summaryrefslogtreecommitdiff
path: root/doxygen/html/cmd2_8py_source.html
diff options
context:
space:
mode:
Diffstat (limited to 'doxygen/html/cmd2_8py_source.html')
-rw-r--r--doxygen/html/cmd2_8py_source.html1721
1 files changed, 0 insertions, 1721 deletions
diff --git a/doxygen/html/cmd2_8py_source.html b/doxygen/html/cmd2_8py_source.html
deleted file mode 100644
index ab7ea18..0000000
--- a/doxygen/html/cmd2_8py_source.html
+++ /dev/null
@@ -1,1721 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>Cmd2: /Users/amrogers/Developer/Projects/cmd2/cmd2.py Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
-</script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/search.js"></script>
-<script type="text/javascript">
- $(document).ready(function() { searchBox.OnSelectItem(0); });
-</script>
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-
-
- <td style="padding-left: 0.5em;">
- <div id="projectname">Cmd2
-
- </div>
-
- </td>
-
-
-
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-<script type="text/javascript">
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-</script>
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Main&#160;Page</span></a></li>
- <li><a href="namespaces.html"><span>Packages</span></a></li>
- <li><a href="annotated.html"><span>Classes</span></a></li>
- <li class="current"><a href="files.html"><span>Files</span></a></li>
- <li><a href="dirs.html"><span>Directories</span></a></li>
- <li>
- <div id="MSearchBox" class="MSearchBoxInactive">
- <span class="left">
- <img id="MSearchSelect" src="search/mag_sel.png"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- alt=""/>
- <input type="text" id="MSearchField" value="Search" accesskey="S"
- onfocus="searchBox.OnSearchFieldFocus(true)"
- onblur="searchBox.OnSearchFieldFocus(false)"
- onkeyup="searchBox.OnSearchFieldChange(event)"/>
- </span><span class="right">
- <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
- </span>
- </div>
- </li>
- </ul>
- </div>
- <div id="navrow2" class="tabs2">
- <ul class="tablist">
- <li><a href="files.html"><span>File&#160;List</span></a></li>
- </ul>
- </div>
-</div>
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
- initNavTree('cmd2_8py.html','');
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="headertitle">
-<div class="title">cmd2.py</div> </div>
-</div>
-<div class="contents">
-<a href="cmd2_8py.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a><a class="code" href="namespacecmd2.html">00001</a> <span class="stringliteral">&quot;&quot;&quot;Variant on standard library&#39;s cmd with extra features.</span>
-<a name="l00002"></a>00002 <span class="stringliteral"></span>
-<a name="l00003"></a>00003 <span class="stringliteral">To use, simply import cmd2.Cmd instead of cmd.Cmd; use precisely as though you</span>
-<a name="l00004"></a>00004 <span class="stringliteral">were using the standard library&#39;s cmd, while enjoying the extra features.</span>
-<a name="l00005"></a>00005 <span class="stringliteral"></span>
-<a name="l00006"></a>00006 <span class="stringliteral">Searchable command history (commands: &quot;hi&quot;, &quot;li&quot;, &quot;run&quot;)</span>
-<a name="l00007"></a>00007 <span class="stringliteral">Load commands from file, save to file, edit commands in file</span>
-<a name="l00008"></a>00008 <span class="stringliteral">Multi-line commands</span>
-<a name="l00009"></a>00009 <span class="stringliteral">Case-insensitive commands</span>
-<a name="l00010"></a>00010 <span class="stringliteral">Special-character shortcut commands (beyond cmd&#39;s &quot;@&quot; and &quot;!&quot;)</span>
-<a name="l00011"></a>00011 <span class="stringliteral">Settable environment parameters</span>
-<a name="l00012"></a>00012 <span class="stringliteral">Optional _onchange_{paramname} called when environment parameter changes</span>
-<a name="l00013"></a>00013 <span class="stringliteral">Parsing commands with `optparse` options (flags)</span>
-<a name="l00014"></a>00014 <span class="stringliteral">Redirection to file with &gt;, &gt;&gt;; input from file with &lt;</span>
-<a name="l00015"></a>00015 <span class="stringliteral">Easy transcript-based testing of applications (see example/example.py)</span>
-<a name="l00016"></a>00016 <span class="stringliteral">Bash-style ``select`` available</span>
-<a name="l00017"></a>00017 <span class="stringliteral"></span>
-<a name="l00018"></a>00018 <span class="stringliteral">Note that redirection with &gt; and | will only work if `self.stdout.write()`</span>
-<a name="l00019"></a>00019 <span class="stringliteral">is used in place of `print`. The standard library&#39;s `cmd` module is </span>
-<a name="l00020"></a>00020 <span class="stringliteral">written to use `self.stdout.write()`, </span>
-<a name="l00021"></a>00021 <span class="stringliteral"></span>
-<a name="l00022"></a>00022 <span class="stringliteral">- Catherine Devlin, Jan 03 2008 - catherinedevlin.blogspot.com</span>
-<a name="l00023"></a>00023 <span class="stringliteral"></span>
-<a name="l00024"></a>00024 <span class="stringliteral">mercurial repository at http://www.assembla.com/wiki/show/python-cmd2</span>
-<a name="l00025"></a>00025 <span class="stringliteral">&quot;&quot;&quot;</span>
-<a name="l00026"></a>00026 <span class="keyword">import</span> cmd
-<a name="l00027"></a>00027 <span class="keyword">import</span> re
-<a name="l00028"></a>00028 <span class="keyword">import</span> os
-<a name="l00029"></a>00029 <span class="keyword">import</span> sys
-<a name="l00030"></a>00030 <span class="keyword">import</span> optparse
-<a name="l00031"></a>00031 <span class="keyword">import</span> subprocess
-<a name="l00032"></a>00032 <span class="keyword">import</span> tempfile
-<a name="l00033"></a>00033 <span class="keyword">import</span> doctest
-<a name="l00034"></a>00034 <span class="keyword">import</span> unittest
-<a name="l00035"></a>00035 <span class="keyword">import</span> datetime
-<a name="l00036"></a>00036 <span class="keyword">import</span> urllib
-<a name="l00037"></a>00037 <span class="keyword">import</span> glob
-<a name="l00038"></a>00038 <span class="keyword">import</span> traceback
-<a name="l00039"></a>00039 <span class="keyword">import</span> platform
-<a name="l00040"></a>00040 <span class="keyword">import</span> copy
-<a name="l00041"></a>00041 <span class="keyword">from</span> code <span class="keyword">import</span> InteractiveConsole, InteractiveInterpreter
-<a name="l00042"></a>00042 <span class="keyword">from</span> optparse <span class="keyword">import</span> make_option
-<a name="l00043"></a>00043 <span class="keyword">import</span> pyparsing
-<a name="l00044"></a>00044
-<a name="l00045"></a><a class="code" href="namespacecmd2.html#a05ce8a1645f64208f969036f8621ddd2">00045</a> __version__ = <span class="stringliteral">&#39;0.6.4&#39;</span>
-<a name="l00046"></a>00046
-<a name="l00047"></a>00047 <span class="keywordflow">if</span> sys.version_info[0] == 2:
-<a name="l00048"></a>00048 pyparsing.ParserElement.enablePackrat()
-<a name="l00049"></a>00049
-<a name="l00050"></a>00050 <span class="stringliteral">&quot;&quot;&quot;</span>
-<a name="l00051"></a>00051 <span class="stringliteral">Packrat is causing Python3 errors that I don&#39;t understand.</span>
-<a name="l00052"></a>00052 <span class="stringliteral"></span>
-<a name="l00053"></a>00053 <span class="stringliteral">&gt; /usr/local/Cellar/python3/3.2/lib/python3.2/site-packages/pyparsing-1.5.6-py3.2.egg/pyparsing.py(999)scanString()</span>
-<a name="l00054"></a>00054 <span class="stringliteral">-&gt; nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )</span>
-<a name="l00055"></a>00055 <span class="stringliteral">(Pdb) n</span>
-<a name="l00056"></a>00056 <span class="stringliteral">NameError: global name &#39;exc&#39; is not defined</span>
-<a name="l00057"></a>00057 <span class="stringliteral"></span>
-<a name="l00058"></a>00058 <span class="stringliteral">(Pdb) parseFn</span>
-<a name="l00059"></a>00059 <span class="stringliteral">&lt;bound method Or._parseCache of {Python style comment ^ C style comment}&gt;</span>
-<a name="l00060"></a>00060 <span class="stringliteral"></span>
-<a name="l00061"></a>00061 <span class="stringliteral">Bug report filed: https://sourceforge.net/tracker/?func=detail&amp;atid=617311&amp;aid=3381439&amp;group_id=97203</span>
-<a name="l00062"></a>00062 <span class="stringliteral">&quot;&quot;&quot;</span>
-<a name="l00063"></a>00063
-<a name="l00064"></a><a class="code" href="classcmd2_1_1OptionParser.html">00064</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1OptionParser.html">OptionParser</a>(optparse.OptionParser):
-<a name="l00065"></a><a class="code" href="classcmd2_1_1OptionParser.html#ad82c8fb7559af2e4b1663e0762a80c89">00065</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1OptionParser.html#ad82c8fb7559af2e4b1663e0762a80c89">exit</a>(self, status=0, msg=None):
-<a name="l00066"></a>00066 self.values._exit = <span class="keyword">True</span>
-<a name="l00067"></a>00067 <span class="keywordflow">if</span> msg:
-<a name="l00068"></a>00068 <span class="keywordflow">print</span> (msg)
-<a name="l00069"></a>00069
-<a name="l00070"></a><a class="code" href="classcmd2_1_1OptionParser.html#a6f2d24051471268be245221149bc9c6a">00070</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1OptionParser.html#a6f2d24051471268be245221149bc9c6a">print_help</a>(self, *args, **kwargs):
-<a name="l00071"></a>00071 <span class="keywordflow">try</span>:
-<a name="l00072"></a>00072 <span class="keywordflow">print</span> (self._func.__doc__)
-<a name="l00073"></a>00073 <span class="keywordflow">except</span> AttributeError:
-<a name="l00074"></a>00074 <span class="keywordflow">pass</span>
-<a name="l00075"></a>00075 optparse.OptionParser.print_help(self, *args, **kwargs)
-<a name="l00076"></a>00076
-<a name="l00077"></a><a class="code" href="classcmd2_1_1OptionParser.html#ada4f39b453e033ae4356709f8ee9f340">00077</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1OptionParser.html#ada4f39b453e033ae4356709f8ee9f340">error</a>(self, msg):
-<a name="l00078"></a>00078 <span class="stringliteral">&quot;&quot;&quot;error(msg : string)</span>
-<a name="l00079"></a>00079 <span class="stringliteral"></span>
-<a name="l00080"></a>00080 <span class="stringliteral"> Print a usage message incorporating &#39;msg&#39; to stderr and exit.</span>
-<a name="l00081"></a>00081 <span class="stringliteral"> If you override this in a subclass, it should not return -- it</span>
-<a name="l00082"></a>00082 <span class="stringliteral"> should either exit or raise an exception.</span>
-<a name="l00083"></a>00083 <span class="stringliteral"> &quot;&quot;&quot;</span>
-<a name="l00084"></a>00084 <span class="keywordflow">raise</span> optparse.OptParseError(msg)
-<a name="l00085"></a>00085
-<a name="l00086"></a><a class="code" href="namespacecmd2.html#a11d252497d81548f19771cddf0ca68fb">00086</a> <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a11d252497d81548f19771cddf0ca68fb">remaining_args</a>(oldArgs, newArgList):
-<a name="l00087"></a>00087 <span class="stringliteral">&#39;&#39;&#39;</span>
-<a name="l00088"></a>00088 <span class="stringliteral"> Preserves the spacing originally in the argument after</span>
-<a name="l00089"></a>00089 <span class="stringliteral"> the removal of options.</span>
-<a name="l00090"></a>00090 <span class="stringliteral"> </span>
-<a name="l00091"></a>00091 <span class="stringliteral"> &gt;&gt;&gt; remaining_args(&#39;-f bar bar cow&#39;, [&#39;bar&#39;, &#39;cow&#39;])</span>
-<a name="l00092"></a>00092 <span class="stringliteral"> &#39;bar cow&#39;</span>
-<a name="l00093"></a>00093 <span class="stringliteral"> &#39;&#39;&#39;</span>
-<a name="l00094"></a>00094 pattern = <span class="stringliteral">&#39;\s+&#39;</span>.join(re.escape(a) <span class="keywordflow">for</span> a <span class="keywordflow">in</span> newArgList) + <span class="stringliteral">&#39;\s*$&#39;</span>
-<a name="l00095"></a>00095 matchObj = re.search(pattern, oldArgs)
-<a name="l00096"></a>00096 <span class="keywordflow">return</span> oldArgs[matchObj.start():]
-<a name="l00097"></a>00097
-<a name="l00098"></a><a class="code" href="namespacecmd2.html#a93001003cf51a72d1d6adaf5e3e22366">00098</a> <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a93001003cf51a72d1d6adaf5e3e22366">_attr_get_</a>(obj, attr):
-<a name="l00099"></a>00099 <span class="stringliteral">&#39;&#39;&#39;Returns an attribute&#39;s value, or None (no error) if undefined.</span>
-<a name="l00100"></a>00100 <span class="stringliteral"> Analagous to .get() for dictionaries. Useful when checking for</span>
-<a name="l00101"></a>00101 <span class="stringliteral"> value of options that may not have been defined on a given</span>
-<a name="l00102"></a>00102 <span class="stringliteral"> method.&#39;&#39;&#39;</span>
-<a name="l00103"></a>00103 <span class="keywordflow">try</span>:
-<a name="l00104"></a>00104 <span class="keywordflow">return</span> getattr(obj, attr)
-<a name="l00105"></a>00105 <span class="keywordflow">except</span> AttributeError:
-<a name="l00106"></a>00106 <span class="keywordflow">return</span> <span class="keywordtype">None</span>
-<a name="l00107"></a>00107
-<a name="l00108"></a>00108 optparse.Values.get = _attr_get_
-<a name="l00109"></a>00109
-<a name="l00110"></a><a class="code" href="namespacecmd2.html#afd483925db6ff208624b8e5c0ae09271">00110</a> options_defined = [] <span class="comment"># used to distinguish --options from SQL-style --comments</span>
-<a name="l00111"></a>00111
-<a name="l00112"></a><a class="code" href="namespacecmd2.html#a863be2c5e3b9fdec03710fd550801c22">00112</a> <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a863be2c5e3b9fdec03710fd550801c22">options</a>(option_list, arg_desc=&quot;arg&quot;):
-<a name="l00113"></a>00113 <span class="stringliteral">&#39;&#39;&#39;Used as a decorator and passed a list of optparse-style options,</span>
-<a name="l00114"></a>00114 <span class="stringliteral"> alters a cmd2 method to populate its ``opts`` argument from its</span>
-<a name="l00115"></a>00115 <span class="stringliteral"> raw text argument.</span>
-<a name="l00116"></a>00116 <span class="stringliteral"></span>
-<a name="l00117"></a>00117 <span class="stringliteral"> Example: transform</span>
-<a name="l00118"></a>00118 <span class="stringliteral"> def do_something(self, arg):</span>
-<a name="l00119"></a>00119 <span class="stringliteral"></span>
-<a name="l00120"></a>00120 <span class="stringliteral"> into</span>
-<a name="l00121"></a>00121 <span class="stringliteral"> @options([make_option(&#39;-q&#39;, &#39;--quick&#39;, action=&quot;store_true&quot;,</span>
-<a name="l00122"></a>00122 <span class="stringliteral"> help=&quot;Makes things fast&quot;)],</span>
-<a name="l00123"></a>00123 <span class="stringliteral"> &quot;source dest&quot;)</span>
-<a name="l00124"></a>00124 <span class="stringliteral"> def do_something(self, arg, opts):</span>
-<a name="l00125"></a>00125 <span class="stringliteral"> if opts.quick:</span>
-<a name="l00126"></a>00126 <span class="stringliteral"> self.fast_button = True</span>
-<a name="l00127"></a>00127 <span class="stringliteral"> &#39;&#39;&#39;</span>
-<a name="l00128"></a>00128 <span class="keywordflow">if</span> <span class="keywordflow">not</span> isinstance(option_list, list):
-<a name="l00129"></a>00129 option_list = [option_list]
-<a name="l00130"></a>00130 <span class="keywordflow">for</span> opt <span class="keywordflow">in</span> option_list:
-<a name="l00131"></a>00131 options_defined.append(pyparsing.Literal(opt.get_opt_string()))
-<a name="l00132"></a>00132 <span class="keyword">def </span>option_setup(func):
-<a name="l00133"></a>00133 optionParser = <a class="code" href="classcmd2_1_1OptionParser.html">OptionParser</a>()
-<a name="l00134"></a>00134 <span class="keywordflow">for</span> opt <span class="keywordflow">in</span> option_list:
-<a name="l00135"></a>00135 optionParser.add_option(opt)
-<a name="l00136"></a>00136 optionParser.set_usage(<span class="stringliteral">&quot;%s [options] %s&quot;</span> % (func.__name__[3:], arg_desc))
-<a name="l00137"></a>00137 optionParser._func = func
-<a name="l00138"></a>00138 <span class="keyword">def </span>new_func(instance, arg):
-<a name="l00139"></a>00139 <span class="keywordflow">try</span>:
-<a name="l00140"></a>00140 opts, newArgList = optionParser.parse_args(arg.split())
-<a name="l00141"></a>00141 <span class="comment"># Must find the remaining args in the original argument list, but </span>
-<a name="l00142"></a>00142 <span class="comment"># mustn&#39;t include the command itself</span>
-<a name="l00143"></a>00143 <span class="comment">#if hasattr(arg, &#39;parsed&#39;) and newArgList[0] == arg.parsed.command:</span>
-<a name="l00144"></a>00144 <span class="comment"># newArgList = newArgList[1:]</span>
-<a name="l00145"></a>00145 newArgs = <a class="code" href="namespacecmd2.html#a11d252497d81548f19771cddf0ca68fb">remaining_args</a>(arg, newArgList)
-<a name="l00146"></a>00146 <span class="keywordflow">if</span> isinstance(arg, ParsedString):
-<a name="l00147"></a>00147 arg = arg.with_args_replaced(newArgs)
-<a name="l00148"></a>00148 <span class="keywordflow">else</span>:
-<a name="l00149"></a>00149 arg = newArgs
-<a name="l00150"></a>00150 <span class="keywordflow">except</span> optparse.OptParseError, e:
-<a name="l00151"></a>00151 <span class="keywordflow">print</span> (e)
-<a name="l00152"></a>00152 optionParser.print_help()
-<a name="l00153"></a>00153 <span class="keywordflow">return</span>
-<a name="l00154"></a>00154 <span class="keywordflow">if</span> hasattr(opts, <span class="stringliteral">&#39;_exit&#39;</span>):
-<a name="l00155"></a>00155 <span class="keywordflow">return</span> <span class="keywordtype">None</span>
-<a name="l00156"></a>00156 result = func(instance, arg, opts)
-<a name="l00157"></a>00157 <span class="keywordflow">return</span> result
-<a name="l00158"></a>00158 new_func.__doc__ = <span class="stringliteral">&#39;%s\n%s&#39;</span> % (func.__doc__, optionParser.format_help())
-<a name="l00159"></a>00159 <span class="keywordflow">return</span> new_func
-<a name="l00160"></a>00160 <span class="keywordflow">return</span> option_setup
-<a name="l00161"></a>00161
-<a name="l00162"></a><a class="code" href="classcmd2_1_1PasteBufferError.html">00162</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1PasteBufferError.html">PasteBufferError</a>(EnvironmentError):
-<a name="l00163"></a>00163 <span class="keywordflow">if</span> sys.platform[:3] == <span class="stringliteral">&#39;win&#39;</span>:
-<a name="l00164"></a><a class="code" href="classcmd2_1_1PasteBufferError.html#adaa363483c6d5a54f13713233ba398b2">00164</a> errmsg = <span class="stringliteral">&quot;&quot;&quot;Redirecting to or from paste buffer requires pywin32</span>
-<a name="l00165"></a>00165 <span class="stringliteral">to be installed on operating system.</span>
-<a name="l00166"></a>00166 <span class="stringliteral">Download from http://sourceforge.net/projects/pywin32/&quot;&quot;&quot;</span>
-<a name="l00167"></a>00167 <span class="keywordflow">elif</span> sys.platform[:3] == <span class="stringliteral">&#39;dar&#39;</span>:
-<a name="l00168"></a>00168 <span class="comment"># Use built in pbcopy on Mac OSX</span>
-<a name="l00169"></a>00169 <span class="keywordflow">pass</span>
-<a name="l00170"></a>00170 <span class="keywordflow">else</span>:
-<a name="l00171"></a>00171 errmsg = <span class="stringliteral">&quot;&quot;&quot;Redirecting to or from paste buffer requires xclip </span>
-<a name="l00172"></a>00172 <span class="stringliteral">to be installed on operating system.</span>
-<a name="l00173"></a>00173 <span class="stringliteral">On Debian/Ubuntu, &#39;sudo apt-get install xclip&#39; will install it.&quot;&quot;&quot;</span>
-<a name="l00174"></a><a class="code" href="classcmd2_1_1PasteBufferError.html#ae1cd41756d1ae940201fe2cb0d0f821e">00174</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1PasteBufferError.html#ae1cd41756d1ae940201fe2cb0d0f821e">__init__</a>(self):
-<a name="l00175"></a>00175 Exception.__init__(self, self.<a class="code" href="classcmd2_1_1PasteBufferError.html#adaa363483c6d5a54f13713233ba398b2">errmsg</a>)
-<a name="l00176"></a>00176
-<a name="l00177"></a><a class="code" href="namespacecmd2.html#abb901de4eb2987589c68b4d895acd8c3">00177</a> pastebufferr = <span class="stringliteral">&quot;&quot;&quot;Redirecting to or from paste buffer requires %s</span>
-<a name="l00178"></a>00178 <span class="stringliteral">to be installed on operating system.</span>
-<a name="l00179"></a>00179 <span class="stringliteral">%s&quot;&quot;&quot;</span>
-<a name="l00180"></a>00180
-<a name="l00181"></a>00181 <span class="keywordflow">if</span> subprocess.mswindows:
-<a name="l00182"></a>00182 <span class="keywordflow">try</span>:
-<a name="l00183"></a>00183 <span class="keyword">import</span> win32clipboard
-<a name="l00184"></a><a class="code" href="namespacecmd2.html#a9f1495f6c72f7d8c0dbb0f9f22029763">00184</a> <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a9f1495f6c72f7d8c0dbb0f9f22029763">get_paste_buffer</a>():
-<a name="l00185"></a>00185 win32clipboard.OpenClipboard(0)
-<a name="l00186"></a>00186 <span class="keywordflow">try</span>:
-<a name="l00187"></a>00187 result = win32clipboard.GetClipboardData()
-<a name="l00188"></a>00188 <span class="keywordflow">except</span> TypeError:
-<a name="l00189"></a>00189 result = <span class="stringliteral">&#39;&#39;</span> <span class="comment">#non-text</span>
-<a name="l00190"></a>00190 win32clipboard.CloseClipboard()
-<a name="l00191"></a>00191 <span class="keywordflow">return</span> result
-<a name="l00192"></a><a class="code" href="namespacecmd2.html#a514a20ceb8ab40dd89d2df2dd5ff87a0">00192</a> <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a514a20ceb8ab40dd89d2df2dd5ff87a0">write_to_paste_buffer</a>(txt):
-<a name="l00193"></a>00193 win32clipboard.OpenClipboard(0)
-<a name="l00194"></a>00194 win32clipboard.EmptyClipboard()
-<a name="l00195"></a>00195 win32clipboard.SetClipboardText(txt)
-<a name="l00196"></a>00196 win32clipboard.CloseClipboard()
-<a name="l00197"></a>00197 <span class="keywordflow">except</span> ImportError:
-<a name="l00198"></a><a class="code" href="namespacecmd2.html#a9f1495f6c72f7d8c0dbb0f9f22029763">00198</a> <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a9f1495f6c72f7d8c0dbb0f9f22029763">get_paste_buffer</a>(*args):
-<a name="l00199"></a>00199 <span class="keywordflow">raise</span> OSError, pastebufferr % (<span class="stringliteral">&#39;pywin32&#39;</span>, <span class="stringliteral">&#39;Download from http://sourceforge.net/projects/pywin32/&#39;</span>)
-<a name="l00200"></a><a class="code" href="namespacecmd2.html#a514a20ceb8ab40dd89d2df2dd5ff87a0">00200</a> write_to_paste_buffer = get_paste_buffer
-<a name="l00201"></a>00201 <span class="keywordflow">elif</span> sys.platform == <span class="stringliteral">&#39;darwin&#39;</span>:
-<a name="l00202"></a><a class="code" href="namespacecmd2.html#a3f2a6eb75c58ca830028f18cf2851958">00202</a> can_clip = <span class="keyword">False</span>
-<a name="l00203"></a>00203 <span class="keywordflow">try</span>:
-<a name="l00204"></a>00204 <span class="comment"># test for pbcopy - AFAIK, should always be installed on MacOS</span>
-<a name="l00205"></a>00205 subprocess.check_call(<span class="stringliteral">&#39;pbcopy -help&#39;</span>, shell=<span class="keyword">True</span>, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
-<a name="l00206"></a>00206 can_clip = <span class="keyword">True</span>
-<a name="l00207"></a>00207 <span class="keywordflow">except</span> (subprocess.CalledProcessError, OSError, IOError):
-<a name="l00208"></a>00208 <span class="keywordflow">pass</span>
-<a name="l00209"></a>00209 <span class="keywordflow">if</span> can_clip:
-<a name="l00210"></a>00210 <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a9f1495f6c72f7d8c0dbb0f9f22029763">get_paste_buffer</a>():
-<a name="l00211"></a>00211 pbcopyproc = subprocess.Popen(<span class="stringliteral">&#39;pbcopy -help&#39;</span>, shell=<span class="keyword">True</span>, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
-<a name="l00212"></a>00212 <span class="keywordflow">return</span> pbcopyproc.stdout.read()
-<a name="l00213"></a>00213 <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a514a20ceb8ab40dd89d2df2dd5ff87a0">write_to_paste_buffer</a>(txt):
-<a name="l00214"></a>00214 pbcopyproc = subprocess.Popen(<span class="stringliteral">&#39;pbcopy&#39;</span>, shell=<span class="keyword">True</span>, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
-<a name="l00215"></a>00215 pbcopyproc.communicate(txt.encode())
-<a name="l00216"></a>00216 <span class="keywordflow">else</span>:
-<a name="l00217"></a>00217 <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a9f1495f6c72f7d8c0dbb0f9f22029763">get_paste_buffer</a>(*args):
-<a name="l00218"></a>00218 <span class="keywordflow">raise</span> OSError, pastebufferr % (<span class="stringliteral">&#39;pbcopy&#39;</span>, <span class="stringliteral">&#39;On MacOS X - error should not occur - part of the default installation&#39;</span>)
-<a name="l00219"></a>00219 write_to_paste_buffer = get_paste_buffer
-<a name="l00220"></a>00220 <span class="keywordflow">else</span>:
-<a name="l00221"></a>00221 can_clip = <span class="keyword">False</span>
-<a name="l00222"></a>00222 <span class="keywordflow">try</span>:
-<a name="l00223"></a>00223 subprocess.check_call(<span class="stringliteral">&#39;xclip -o -sel clip&#39;</span>, shell=<span class="keyword">True</span>, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
-<a name="l00224"></a>00224 can_clip = <span class="keyword">True</span>
-<a name="l00225"></a>00225 <span class="keywordflow">except</span> AttributeError: <span class="comment"># check_call not defined, Python &lt; 2.5</span>
-<a name="l00226"></a>00226 <span class="keywordflow">try</span>:
-<a name="l00227"></a><a class="code" href="namespacecmd2.html#ab810fc3f05607c1e4311225b04591244">00227</a> teststring = <span class="stringliteral">&#39;Testing for presence of xclip.&#39;</span>
-<a name="l00228"></a><a class="code" href="namespacecmd2.html#ae76e61704924b26b7ddb97fce8c384ef">00228</a> xclipproc = subprocess.Popen(<span class="stringliteral">&#39;xclip -sel clip&#39;</span>, shell=<span class="keyword">True</span>, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
-<a name="l00229"></a>00229 xclipproc.stdin.write(teststring)
-<a name="l00230"></a>00230 xclipproc.stdin.close()
-<a name="l00231"></a>00231 xclipproc = subprocess.Popen(<span class="stringliteral">&#39;xclip -o -sel clip&#39;</span>, shell=<span class="keyword">True</span>, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
-<a name="l00232"></a>00232 <span class="keywordflow">if</span> xclipproc.stdout.read() == teststring:
-<a name="l00233"></a>00233 can_clip = <span class="keyword">True</span>
-<a name="l00234"></a>00234 <span class="keywordflow">except</span> Exception: <span class="comment"># hate a bare Exception call, but exception classes vary too much b/t stdlib versions</span>
-<a name="l00235"></a>00235 <span class="keywordflow">pass</span>
-<a name="l00236"></a>00236 <span class="keywordflow">except</span> Exception:
-<a name="l00237"></a>00237 <span class="keywordflow">pass</span> <span class="comment"># something went wrong with xclip and we cannot use it</span>
-<a name="l00238"></a>00238 <span class="keywordflow">if</span> can_clip:
-<a name="l00239"></a>00239 <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a9f1495f6c72f7d8c0dbb0f9f22029763">get_paste_buffer</a>():
-<a name="l00240"></a>00240 xclipproc = subprocess.Popen(<span class="stringliteral">&#39;xclip -o -sel clip&#39;</span>, shell=<span class="keyword">True</span>, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
-<a name="l00241"></a>00241 <span class="keywordflow">return</span> xclipproc.stdout.read()
-<a name="l00242"></a>00242 <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a514a20ceb8ab40dd89d2df2dd5ff87a0">write_to_paste_buffer</a>(txt):
-<a name="l00243"></a>00243 xclipproc = subprocess.Popen(<span class="stringliteral">&#39;xclip -sel clip&#39;</span>, shell=<span class="keyword">True</span>, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
-<a name="l00244"></a>00244 xclipproc.stdin.write(txt.encode())
-<a name="l00245"></a>00245 xclipproc.stdin.close()
-<a name="l00246"></a>00246 <span class="comment"># but we want it in both the &quot;primary&quot; and &quot;mouse&quot; clipboards</span>
-<a name="l00247"></a>00247 xclipproc = subprocess.Popen(<span class="stringliteral">&#39;xclip&#39;</span>, shell=<span class="keyword">True</span>, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
-<a name="l00248"></a>00248 xclipproc.stdin.write(txt.encode())
-<a name="l00249"></a>00249 xclipproc.stdin.close()
-<a name="l00250"></a>00250 <span class="keywordflow">else</span>:
-<a name="l00251"></a>00251 <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a9f1495f6c72f7d8c0dbb0f9f22029763">get_paste_buffer</a>(*args):
-<a name="l00252"></a>00252 <span class="keywordflow">raise</span> OSError, pastebufferr % (<span class="stringliteral">&#39;xclip&#39;</span>, <span class="stringliteral">&#39;On Debian/Ubuntu, install with &quot;sudo apt-get install xclip&quot;&#39;</span>)
-<a name="l00253"></a>00253 write_to_paste_buffer = get_paste_buffer
-<a name="l00254"></a>00254
-<a name="l00255"></a>00255 pyparsing.ParserElement.setDefaultWhitespaceChars(<span class="stringliteral">&#39; \t&#39;</span>)
-<a name="l00256"></a>00256
-<a name="l00257"></a><a class="code" href="classcmd2_1_1ParsedString.html">00257</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1ParsedString.html">ParsedString</a>(str):
-<a name="l00258"></a><a class="code" href="classcmd2_1_1ParsedString.html#a6ac3a7f2f37126a25774517b3eb7cace">00258</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1ParsedString.html#a6ac3a7f2f37126a25774517b3eb7cace">full_parsed_statement</a>(self):
-<a name="l00259"></a>00259 new = <a class="code" href="classcmd2_1_1ParsedString.html">ParsedString</a>(<span class="stringliteral">&#39;%s %s&#39;</span> % (self.parsed.command, self.parsed.args))
-<a name="l00260"></a>00260 new.parsed = self.parsed
-<a name="l00261"></a>00261 new.parser = self.parser
-<a name="l00262"></a>00262 <span class="keywordflow">return</span> new
-<a name="l00263"></a><a class="code" href="classcmd2_1_1ParsedString.html#afe56ec060a51b268e266f7c0d1fb7328">00263</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1ParsedString.html#afe56ec060a51b268e266f7c0d1fb7328">with_args_replaced</a>(self, newargs):
-<a name="l00264"></a>00264 new = <a class="code" href="classcmd2_1_1ParsedString.html">ParsedString</a>(newargs)
-<a name="l00265"></a>00265 new.parsed = self.parsed
-<a name="l00266"></a>00266 new.parser = self.parser
-<a name="l00267"></a>00267 new.parsed[<span class="stringliteral">&#39;args&#39;</span>] = newargs
-<a name="l00268"></a>00268 new.parsed.statement[<span class="stringliteral">&#39;args&#39;</span>] = newargs
-<a name="l00269"></a>00269 <span class="keywordflow">return</span> new
-<a name="l00270"></a>00270
-<a name="l00271"></a><a class="code" href="classcmd2_1_1StubbornDict.html">00271</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1StubbornDict.html">StubbornDict</a>(dict):
-<a name="l00272"></a>00272 <span class="stringliteral">&#39;&#39;&#39;Dictionary that tolerates many input formats.</span>
-<a name="l00273"></a>00273 <span class="stringliteral"> Create it with stubbornDict(arg) factory function.</span>
-<a name="l00274"></a>00274 <span class="stringliteral"> </span>
-<a name="l00275"></a>00275 <span class="stringliteral"> &gt;&gt;&gt; d = StubbornDict(large=&#39;gross&#39;, small=&#39;klein&#39;)</span>
-<a name="l00276"></a>00276 <span class="stringliteral"> &gt;&gt;&gt; sorted(d.items())</span>
-<a name="l00277"></a>00277 <span class="stringliteral"> [(&#39;large&#39;, &#39;gross&#39;), (&#39;small&#39;, &#39;klein&#39;)]</span>
-<a name="l00278"></a>00278 <span class="stringliteral"> &gt;&gt;&gt; d.append([&#39;plain&#39;, &#39; plaid&#39;])</span>
-<a name="l00279"></a>00279 <span class="stringliteral"> &gt;&gt;&gt; sorted(d.items())</span>
-<a name="l00280"></a>00280 <span class="stringliteral"> [(&#39;large&#39;, &#39;gross&#39;), (&#39;plaid&#39;, &#39;&#39;), (&#39;plain&#39;, &#39;&#39;), (&#39;small&#39;, &#39;klein&#39;)]</span>
-<a name="l00281"></a>00281 <span class="stringliteral"> &gt;&gt;&gt; d += &#39; girl Frauelein, Maedchen\\n\\n shoe schuh&#39;</span>
-<a name="l00282"></a>00282 <span class="stringliteral"> &gt;&gt;&gt; sorted(d.items())</span>
-<a name="l00283"></a>00283 <span class="stringliteral"> [(&#39;girl&#39;, &#39;Frauelein, Maedchen&#39;), (&#39;large&#39;, &#39;gross&#39;), (&#39;plaid&#39;, &#39;&#39;), (&#39;plain&#39;, &#39;&#39;), (&#39;shoe&#39;, &#39;schuh&#39;), (&#39;small&#39;, &#39;klein&#39;)]</span>
-<a name="l00284"></a>00284 <span class="stringliteral"> &#39;&#39;&#39;</span>
-<a name="l00285"></a><a class="code" href="classcmd2_1_1StubbornDict.html#a669dd7f5373f3726d8c8fb52a1e85bbd">00285</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1StubbornDict.html#a669dd7f5373f3726d8c8fb52a1e85bbd">update</a>(self, arg):
-<a name="l00286"></a>00286 dict.update(self, StubbornDict.to_dict(arg))
-<a name="l00287"></a><a class="code" href="classcmd2_1_1StubbornDict.html#a66dc32a221c00611f1c131382703c333">00287</a> append = update
-<a name="l00288"></a><a class="code" href="classcmd2_1_1StubbornDict.html#ad7c49b2ca37c0c88b198853706ae7e99">00288</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1StubbornDict.html#ad7c49b2ca37c0c88b198853706ae7e99">__iadd__</a>(self, arg):
-<a name="l00289"></a>00289 self.<a class="code" href="classcmd2_1_1StubbornDict.html#a669dd7f5373f3726d8c8fb52a1e85bbd">update</a>(arg)
-<a name="l00290"></a>00290 <span class="keywordflow">return</span> self
-<a name="l00291"></a><a class="code" href="classcmd2_1_1StubbornDict.html#a219b3f21c078f3b8158de67beae62da2">00291</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1StubbornDict.html#a219b3f21c078f3b8158de67beae62da2">__add__</a>(self, arg):
-<a name="l00292"></a>00292 selfcopy = copy.copy(self)
-<a name="l00293"></a>00293 selfcopy.update(<a class="code" href="namespacecmd2.html#aae88fcdb31e45b322ecdaf7df9922823">stubbornDict</a>(arg))
-<a name="l00294"></a>00294 <span class="keywordflow">return</span> selfcopy
-<a name="l00295"></a><a class="code" href="classcmd2_1_1StubbornDict.html#a190b1b2bd8a914bafaab137c5b1276ea">00295</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1StubbornDict.html#a190b1b2bd8a914bafaab137c5b1276ea">__radd__</a>(self, arg):
-<a name="l00296"></a>00296 selfcopy = copy.copy(self)
-<a name="l00297"></a>00297 selfcopy.update(<a class="code" href="namespacecmd2.html#aae88fcdb31e45b322ecdaf7df9922823">stubbornDict</a>(arg))
-<a name="l00298"></a>00298 <span class="keywordflow">return</span> selfcopy
-<a name="l00299"></a>00299
-<a name="l00300"></a>00300 @classmethod
-<a name="l00301"></a><a class="code" href="classcmd2_1_1StubbornDict.html#ad46f55b61faae98d241e30d52cd04eee">00301</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1StubbornDict.html#ad46f55b61faae98d241e30d52cd04eee">to_dict</a>(cls, arg):
-<a name="l00302"></a>00302 <span class="stringliteral">&#39;Generates dictionary from string or list of strings&#39;</span>
-<a name="l00303"></a>00303 <span class="keywordflow">if</span> hasattr(arg, <span class="stringliteral">&#39;splitlines&#39;</span>):
-<a name="l00304"></a>00304 arg = arg.splitlines()
-<a name="l00305"></a>00305 <span class="keywordflow">if</span> hasattr(arg, <span class="stringliteral">&#39;__reversed__&#39;</span>):
-<a name="l00306"></a>00306 result = {}
-<a name="l00307"></a>00307 <span class="keywordflow">for</span> a <span class="keywordflow">in</span> arg:
-<a name="l00308"></a>00308 a = a.strip()
-<a name="l00309"></a>00309 <span class="keywordflow">if</span> a:
-<a name="l00310"></a>00310 key_val = a.split(<span class="keywordtype">None</span>, 1)
-<a name="l00311"></a>00311 key = key_val[0]
-<a name="l00312"></a>00312 <span class="keywordflow">if</span> len(key_val) &gt; 1:
-<a name="l00313"></a>00313 val = key_val[1]
-<a name="l00314"></a>00314 <span class="keywordflow">else</span>:
-<a name="l00315"></a>00315 val = <span class="stringliteral">&#39;&#39;</span>
-<a name="l00316"></a>00316 result[key] = val
-<a name="l00317"></a>00317 <span class="keywordflow">else</span>:
-<a name="l00318"></a>00318 result = arg
-<a name="l00319"></a>00319 <span class="keywordflow">return</span> result
-<a name="l00320"></a>00320
-<a name="l00321"></a><a class="code" href="namespacecmd2.html#aae88fcdb31e45b322ecdaf7df9922823">00321</a> <span class="keyword">def </span><a class="code" href="namespacecmd2.html#aae88fcdb31e45b322ecdaf7df9922823">stubbornDict</a>(*arg, **kwarg):
-<a name="l00322"></a>00322 <span class="stringliteral">&#39;&#39;&#39;</span>
-<a name="l00323"></a>00323 <span class="stringliteral"> &gt;&gt;&gt; sorted(stubbornDict(&#39;cow a bovine\\nhorse an equine&#39;).items())</span>
-<a name="l00324"></a>00324 <span class="stringliteral"> [(&#39;cow&#39;, &#39;a bovine&#39;), (&#39;horse&#39;, &#39;an equine&#39;)]</span>
-<a name="l00325"></a>00325 <span class="stringliteral"> &gt;&gt;&gt; sorted(stubbornDict([&#39;badger&#39;, &#39;porcupine a poky creature&#39;]).items())</span>
-<a name="l00326"></a>00326 <span class="stringliteral"> [(&#39;badger&#39;, &#39;&#39;), (&#39;porcupine&#39;, &#39;a poky creature&#39;)]</span>
-<a name="l00327"></a>00327 <span class="stringliteral"> &gt;&gt;&gt; sorted(stubbornDict(turtle=&#39;has shell&#39;, frog=&#39;jumpy&#39;).items())</span>
-<a name="l00328"></a>00328 <span class="stringliteral"> [(&#39;frog&#39;, &#39;jumpy&#39;), (&#39;turtle&#39;, &#39;has shell&#39;)]</span>
-<a name="l00329"></a>00329 <span class="stringliteral"> &#39;&#39;&#39;</span>
-<a name="l00330"></a>00330 result = {}
-<a name="l00331"></a>00331 <span class="keywordflow">for</span> a <span class="keywordflow">in</span> arg:
-<a name="l00332"></a>00332 result.update(StubbornDict.to_dict(a))
-<a name="l00333"></a>00333 result.update(kwarg)
-<a name="l00334"></a>00334 <span class="keywordflow">return</span> <a class="code" href="classcmd2_1_1StubbornDict.html">StubbornDict</a>(result)
-<a name="l00335"></a>00335
-<a name="l00336"></a><a class="code" href="namespacecmd2.html#aa5aa0c16a66d0ec0510ac38f3cc00ad3">00336</a> <span class="keyword">def </span><a class="code" href="namespacecmd2.html#aa5aa0c16a66d0ec0510ac38f3cc00ad3">replace_with_file_contents</a>(fname):
-<a name="l00337"></a>00337 <span class="keywordflow">if</span> fname:
-<a name="l00338"></a>00338 <span class="keywordflow">try</span>:
-<a name="l00339"></a>00339 result = open(os.path.expanduser(fname[0])).read()
-<a name="l00340"></a>00340 <span class="keywordflow">except</span> IOError:
-<a name="l00341"></a>00341 result = <span class="stringliteral">&#39;&lt; %s&#39;</span> % fname[0] <span class="comment"># wasn&#39;t a file after all</span>
-<a name="l00342"></a>00342 <span class="keywordflow">else</span>:
-<a name="l00343"></a>00343 result = <a class="code" href="namespacecmd2.html#a9f1495f6c72f7d8c0dbb0f9f22029763">get_paste_buffer</a>()
-<a name="l00344"></a>00344 <span class="keywordflow">return</span> result
-<a name="l00345"></a>00345
-<a name="l00346"></a><a class="code" href="classcmd2_1_1EmbeddedConsoleExit.html">00346</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1EmbeddedConsoleExit.html">EmbeddedConsoleExit</a>(SystemExit):
-<a name="l00347"></a>00347 <span class="keywordflow">pass</span>
-<a name="l00348"></a>00348
-<a name="l00349"></a><a class="code" href="classcmd2_1_1EmptyStatement.html">00349</a> <span class="keyword">class </span>EmptyStatement(Exception):
-<a name="l00350"></a>00350 <span class="keywordflow">pass</span>
-<a name="l00351"></a>00351
-<a name="l00352"></a><a class="code" href="namespacecmd2.html#ad4ac87ba068f9549b5a7735054df8065">00352</a> <span class="keyword">def </span><a class="code" href="namespacecmd2.html#ad4ac87ba068f9549b5a7735054df8065">ljust</a>(x, width, fillchar=&#39; &#39;):
-<a name="l00353"></a>00353 <span class="stringliteral">&#39;analogous to str.ljust, but works for lists&#39;</span>
-<a name="l00354"></a>00354 <span class="keywordflow">if</span> hasattr(x, <span class="stringliteral">&#39;ljust&#39;</span>):
-<a name="l00355"></a>00355 <span class="keywordflow">return</span> x.ljust(width, fillchar)
-<a name="l00356"></a>00356 <span class="keywordflow">else</span>:
-<a name="l00357"></a>00357 <span class="keywordflow">if</span> len(x) &lt; width:
-<a name="l00358"></a>00358 x = (x + [fillchar] * width)[:width]
-<a name="l00359"></a>00359 <span class="keywordflow">return</span> x
-<a name="l00360"></a>00360
-<a name="l00361"></a><a class="code" href="classcmd2_1_1Cmd.html">00361</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1Cmd.html">Cmd</a>(cmd.Cmd):
-<a name="l00362"></a><a class="code" href="classcmd2_1_1Cmd.html#a417779ccb5de864826f97a959bd196d3">00362</a> echo = <span class="keyword">False</span>
-<a name="l00363"></a><a class="code" href="classcmd2_1_1Cmd.html#a10de661ca23b94cd93972c260523c8a0">00363</a> case_insensitive = <span class="keyword">True</span> <span class="comment"># Commands recognized regardless of case</span>
-<a name="l00364"></a><a class="code" href="classcmd2_1_1Cmd.html#a186ca22e76dc63ad9d8a95cfaeb4f7fd">00364</a> continuation_prompt = <span class="stringliteral">&#39;&gt; &#39;</span>
-<a name="l00365"></a><a class="code" href="classcmd2_1_1Cmd.html#a2d83899c5edb8c1296cb90b0fb282de7">00365</a> timing = <span class="keyword">False</span> <span class="comment"># Prints elapsed time for each command</span>
-<a name="l00366"></a>00366 <span class="comment"># make sure your terminators are not in legalChars!</span>
-<a name="l00367"></a><a class="code" href="classcmd2_1_1Cmd.html#a866c4b8895784a477d36bebfecfa397e">00367</a> legalChars = <span class="stringliteral">u&#39;!#$%.:?@_&#39;</span> + pyparsing.alphanums + pyparsing.alphas8bit
-<a name="l00368"></a><a class="code" href="classcmd2_1_1Cmd.html#ad8ccfbcd2a4eb800f040fcdbd26089df">00368</a> shortcuts = {<span class="stringliteral">&#39;?&#39;</span>: <span class="stringliteral">&#39;help&#39;</span>, <span class="stringliteral">&#39;!&#39;</span>: <span class="stringliteral">&#39;shell&#39;</span>, <span class="stringliteral">&#39;@&#39;</span>: <span class="stringliteral">&#39;load&#39;</span>, <span class="stringliteral">&#39;@@&#39;</span>: <span class="stringliteral">&#39;_relative_load&#39;</span>}
-<a name="l00369"></a><a class="code" href="classcmd2_1_1Cmd.html#a35586c262b272917f6ecae8e76fca6b9">00369</a> excludeFromHistory = <span class="stringliteral">&#39;&#39;&#39;run r list l history hi ed edit li eof&#39;&#39;&#39;</span>.split()
-<a name="l00370"></a><a class="code" href="classcmd2_1_1Cmd.html#a7da859e33eae87d5069b96d366cf04b4">00370</a> default_to_shell = <span class="keyword">False</span>
-<a name="l00371"></a><a class="code" href="classcmd2_1_1Cmd.html#a4e4d47a554f0725c2562c2bc19af1a3e">00371</a> noSpecialParse = <span class="stringliteral">&#39;set ed edit exit&#39;</span>.split()
-<a name="l00372"></a><a class="code" href="classcmd2_1_1Cmd.html#ab14061f1d84f49fb8fefcce285e7aec7">00372</a> defaultExtension = <span class="stringliteral">&#39;txt&#39;</span> <span class="comment"># For ``save``, ``load``, etc.</span>
-<a name="l00373"></a><a class="code" href="classcmd2_1_1Cmd.html#a3af82e64cdabf19b462cd0ddf686823d">00373</a> default_file_name = <span class="stringliteral">&#39;command.txt&#39;</span> <span class="comment"># For ``save``, ``load``, etc.</span>
-<a name="l00374"></a><a class="code" href="classcmd2_1_1Cmd.html#a810ba12198cbbc4e38643c83278956f6">00374</a> abbrev = <span class="keyword">True</span> <span class="comment"># Abbreviated commands recognized</span>
-<a name="l00375"></a><a class="code" href="classcmd2_1_1Cmd.html#a549399bed9574c87901100530343ac68">00375</a> current_script_dir = <span class="keywordtype">None</span>
-<a name="l00376"></a><a class="code" href="classcmd2_1_1Cmd.html#a01befaea1ef9fa2c8b26521f7b2dfb9c">00376</a> reserved_words = []
-<a name="l00377"></a><a class="code" href="classcmd2_1_1Cmd.html#ad571e5687af698c33a547062762a26bc">00377</a> feedback_to_output = <span class="keyword">False</span> <span class="comment"># Do include nonessentials in &gt;, | output</span>
-<a name="l00378"></a><a class="code" href="classcmd2_1_1Cmd.html#a50495cbf3a3ea3467c86233ebbea4572">00378</a> quiet = <span class="keyword">False</span> <span class="comment"># Do not suppress nonessential output</span>
-<a name="l00379"></a><a class="code" href="classcmd2_1_1Cmd.html#a7b07b64964162c07f50675b2b40160b2">00379</a> debug = <span class="keyword">False</span>
-<a name="l00380"></a><a class="code" href="classcmd2_1_1Cmd.html#a55e7978c792429a0a2e3321abdbd23fe">00380</a> locals_in_py = <span class="keyword">True</span>
-<a name="l00381"></a><a class="code" href="classcmd2_1_1Cmd.html#ad480d9102b3a5e4c8c5541d2c205a1ad">00381</a> kept_state = <span class="keywordtype">None</span>
-<a name="l00382"></a><a class="code" href="classcmd2_1_1Cmd.html#a64b810574dab9ec12100c5344dc66735">00382</a> redirector = <span class="stringliteral">&#39;&gt;&#39;</span> <span class="comment"># for sending output to file</span>
-<a name="l00383"></a><a class="code" href="classcmd2_1_1Cmd.html#a6cec2f634666d15d032d4c113e654c3c">00383</a> settable = <a class="code" href="namespacecmd2.html#aae88fcdb31e45b322ecdaf7df9922823">stubbornDict</a>(<span class="stringliteral">&#39;&#39;&#39;</span>
-<a name="l00384"></a>00384 <span class="stringliteral"> prompt</span>
-<a name="l00385"></a>00385 <span class="stringliteral"> colors Colorized output (*nix only)</span>
-<a name="l00386"></a>00386 <span class="stringliteral"> continuation_prompt On 2nd+ line of input</span>
-<a name="l00387"></a>00387 <span class="stringliteral"> debug Show full error stack on error</span>
-<a name="l00388"></a>00388 <span class="stringliteral"> default_file_name for ``save``, ``load``, etc.</span>
-<a name="l00389"></a>00389 <span class="stringliteral"> editor Program used by ``edit`` </span>
-<a name="l00390"></a>00390 <span class="stringliteral"> case_insensitive upper- and lower-case both OK</span>
-<a name="l00391"></a>00391 <span class="stringliteral"> feedback_to_output include nonessentials in `|`, `&gt;` results </span>
-<a name="l00392"></a>00392 <span class="stringliteral"> quiet Don&#39;t print nonessential feedback</span>
-<a name="l00393"></a>00393 <span class="stringliteral"> echo Echo command issued into output</span>
-<a name="l00394"></a>00394 <span class="stringliteral"> timing Report execution times</span>
-<a name="l00395"></a>00395 <span class="stringliteral"> abbrev Accept abbreviated commands</span>
-<a name="l00396"></a>00396 <span class="stringliteral"> &#39;&#39;&#39;</span>)
-<a name="l00397"></a>00397
-<a name="l00398"></a><a class="code" href="classcmd2_1_1Cmd.html#ad8b5d33873f9b515e33f83a616d0828f">00398</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#ad8b5d33873f9b515e33f83a616d0828f">poutput</a>(self, msg):
-<a name="l00399"></a>00399 <span class="stringliteral">&#39;&#39;&#39;Convenient shortcut for self.stdout.write(); adds newline if necessary.&#39;&#39;&#39;</span>
-<a name="l00400"></a>00400 <span class="keywordflow">if</span> msg:
-<a name="l00401"></a>00401 self.stdout.write(msg)
-<a name="l00402"></a>00402 <span class="keywordflow">if</span> msg[-1] != <span class="stringliteral">&#39;\n&#39;</span>:
-<a name="l00403"></a>00403 self.stdout.write(<span class="stringliteral">&#39;\n&#39;</span>)
-<a name="l00404"></a><a class="code" href="classcmd2_1_1Cmd.html#a118c16455f28dbd3918b565bca086db4">00404</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a118c16455f28dbd3918b565bca086db4">perror</a>(self, errmsg, statement=None):
-<a name="l00405"></a>00405 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a7b07b64964162c07f50675b2b40160b2">debug</a>:
-<a name="l00406"></a>00406 traceback.print_exc()
-<a name="l00407"></a>00407 <span class="keywordflow">print</span> (str(errmsg))
-<a name="l00408"></a><a class="code" href="classcmd2_1_1Cmd.html#a122b67681a0db23863f5ddaa7a687975">00408</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a122b67681a0db23863f5ddaa7a687975">pfeedback</a>(self, msg):
-<a name="l00409"></a>00409 <span class="stringliteral">&quot;&quot;&quot;For printing nonessential feedback. Can be silenced with `quiet`.</span>
-<a name="l00410"></a>00410 <span class="stringliteral"> Inclusion in redirected output is controlled by `feedback_to_output`.&quot;&quot;&quot;</span>
-<a name="l00411"></a>00411 <span class="keywordflow">if</span> <span class="keywordflow">not</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a50495cbf3a3ea3467c86233ebbea4572">quiet</a>:
-<a name="l00412"></a>00412 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#ad571e5687af698c33a547062762a26bc">feedback_to_output</a>:
-<a name="l00413"></a>00413 self.<a class="code" href="classcmd2_1_1Cmd.html#ad8b5d33873f9b515e33f83a616d0828f">poutput</a>(msg)
-<a name="l00414"></a>00414 <span class="keywordflow">else</span>:
-<a name="l00415"></a>00415 <span class="keywordflow">print</span> (msg)
-<a name="l00416"></a><a class="code" href="classcmd2_1_1Cmd.html#a7a8e8257d7d35c7813355cdefb62b85b">00416</a> _STOP_AND_EXIT = <span class="keyword">True</span> <span class="comment"># distinguish end of script file from actual exit</span>
-<a name="l00417"></a><a class="code" href="classcmd2_1_1Cmd.html#abe14bda0dc50326876c6a761cefba702">00417</a> _STOP_SCRIPT_NO_EXIT = -999
-<a name="l00418"></a><a class="code" href="classcmd2_1_1Cmd.html#a25fe904aca52573c6f10e798dd561588">00418</a> editor = os.environ.get(<span class="stringliteral">&#39;EDITOR&#39;</span>)
-<a name="l00419"></a>00419 <span class="keywordflow">if</span> <span class="keywordflow">not</span> editor:
-<a name="l00420"></a>00420 <span class="keywordflow">if</span> sys.platform[:3] == <span class="stringliteral">&#39;win&#39;</span>:
-<a name="l00421"></a><a class="code" href="classcmd2_1_1Cmd.html#a3a1abb5d4a8d42dcce7d61b04bdf9e97">00421</a> editor = <span class="stringliteral">&#39;notepad&#39;</span>
-<a name="l00422"></a>00422 <span class="keywordflow">else</span>:
-<a name="l00423"></a>00423 <span class="keywordflow">for</span> editor <span class="keywordflow">in</span> [<span class="stringliteral">&#39;gedit&#39;</span>, <span class="stringliteral">&#39;kate&#39;</span>, <span class="stringliteral">&#39;vim&#39;</span>, <span class="stringliteral">&#39;emacs&#39;</span>, <span class="stringliteral">&#39;nano&#39;</span>, <span class="stringliteral">&#39;pico&#39;</span>]:
-<a name="l00424"></a>00424 <span class="keywordflow">if</span> subprocess.Popen([<span class="stringliteral">&#39;which&#39;</span>, editor], stdout=subprocess.PIPE).communicate()[0]:
-<a name="l00425"></a>00425 <span class="keywordflow">break</span>
-<a name="l00426"></a>00426
-<a name="l00427"></a><a class="code" href="classcmd2_1_1Cmd.html#a91dd3e77a8d1f247dcfdddbfc0288b3b">00427</a> colorcodes = {<span class="stringliteral">&#39;bold&#39;</span>:{<span class="keyword">True</span>:<span class="stringliteral">&#39;\x1b[1m&#39;</span>,<span class="keyword">False</span>:<span class="stringliteral">&#39;\x1b[22m&#39;</span>},
-<a name="l00428"></a>00428 <span class="stringliteral">&#39;cyan&#39;</span>:{<span class="keyword">True</span>:<span class="stringliteral">&#39;\x1b[36m&#39;</span>,<span class="keyword">False</span>:<span class="stringliteral">&#39;\x1b[39m&#39;</span>},
-<a name="l00429"></a>00429 <span class="stringliteral">&#39;blue&#39;</span>:{<span class="keyword">True</span>:<span class="stringliteral">&#39;\x1b[34m&#39;</span>,<span class="keyword">False</span>:<span class="stringliteral">&#39;\x1b[39m&#39;</span>},
-<a name="l00430"></a>00430 <span class="stringliteral">&#39;red&#39;</span>:{<span class="keyword">True</span>:<span class="stringliteral">&#39;\x1b[31m&#39;</span>,<span class="keyword">False</span>:<span class="stringliteral">&#39;\x1b[39m&#39;</span>},
-<a name="l00431"></a>00431 <span class="stringliteral">&#39;magenta&#39;</span>:{<span class="keyword">True</span>:<span class="stringliteral">&#39;\x1b[35m&#39;</span>,<span class="keyword">False</span>:<span class="stringliteral">&#39;\x1b[39m&#39;</span>},
-<a name="l00432"></a>00432 <span class="stringliteral">&#39;green&#39;</span>:{<span class="keyword">True</span>:<span class="stringliteral">&#39;\x1b[32m&#39;</span>,<span class="keyword">False</span>:<span class="stringliteral">&#39;\x1b[39m&#39;</span>},
-<a name="l00433"></a>00433 <span class="stringliteral">&#39;underline&#39;</span>:{<span class="keyword">True</span>:<span class="stringliteral">&#39;\x1b[4m&#39;</span>,<span class="keyword">False</span>:<span class="stringliteral">&#39;\x1b[24m&#39;</span>}}
-<a name="l00434"></a><a class="code" href="classcmd2_1_1Cmd.html#a2ec43e734ae5b2a581216dc7914b231a">00434</a> colors = (platform.system() != <span class="stringliteral">&#39;Windows&#39;</span>)
-<a name="l00435"></a><a class="code" href="classcmd2_1_1Cmd.html#a9c7f8fd1e7909d18a0f1d8cebf6c1966">00435</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a9c7f8fd1e7909d18a0f1d8cebf6c1966">colorize</a>(self, val, color):
-<a name="l00436"></a>00436 <span class="stringliteral">&#39;&#39;&#39;Given a string (``val``), returns that string wrapped in UNIX-style </span>
-<a name="l00437"></a>00437 <span class="stringliteral"> special characters that turn on (and then off) text color and style.</span>
-<a name="l00438"></a>00438 <span class="stringliteral"> If the ``colors`` environment paramter is ``False``, or the application</span>
-<a name="l00439"></a>00439 <span class="stringliteral"> is running on Windows, will return ``val`` unchanged.</span>
-<a name="l00440"></a><a class="code" href="classcmd2_1_1Cmd.html#a2a71ccfd9f189e17db765b603f2c9a78">00440</a> <span class="stringliteral"> ``color`` should be one of the supported strings (or styles):</span>
-<a name="l00441"></a>00441 <span class="stringliteral"> red/blue/green/cyan/magenta, bold, underline&#39;&#39;&#39;</span>
-<a name="l00442"></a>00442 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a2ec43e734ae5b2a581216dc7914b231a">colors</a> <span class="keywordflow">and</span> (self.<a class="code" href="classcmd2_1_1Cmd.html#a2a71ccfd9f189e17db765b603f2c9a78">stdout</a> == self.<a class="code" href="classcmd2_1_1Cmd.html#af7cb41e066bc55be38b97ea82269e5e8">initial_stdout</a>):
-<a name="l00443"></a>00443 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a91dd3e77a8d1f247dcfdddbfc0288b3b">colorcodes</a>[color][<span class="keyword">True</span>] + val + self.<a class="code" href="classcmd2_1_1Cmd.html#a91dd3e77a8d1f247dcfdddbfc0288b3b">colorcodes</a>[color][<span class="keyword">False</span>]
-<a name="l00444"></a>00444 <span class="keywordflow">return</span> val
-<a name="l00445"></a>00445
-<a name="l00446"></a><a class="code" href="classcmd2_1_1Cmd.html#a79949284f70e1fdb7e33117cc4195f80">00446</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a79949284f70e1fdb7e33117cc4195f80">do_cmdenvironment</a>(self, args):
-<a name="l00447"></a>00447 <span class="stringliteral">&#39;&#39;&#39;Summary report of interactive parameters.&#39;&#39;&#39;</span>
-<a name="l00448"></a>00448 self.stdout.write(<span class="stringliteral">&quot;&quot;&quot;</span>
-<a name="l00449"></a>00449 <span class="stringliteral"> Commands are %(casesensitive)scase-sensitive.</span>
-<a name="l00450"></a>00450 <span class="stringliteral"> Commands may be terminated with: %(terminators)s</span>
-<a name="l00451"></a>00451 <span class="stringliteral"> Settable parameters: %(settable)s\n&quot;&quot;&quot;</span> % \
-<a name="l00452"></a>00452 { <span class="stringliteral">&#39;casesensitive&#39;</span>: (self.<a class="code" href="classcmd2_1_1Cmd.html#a10de661ca23b94cd93972c260523c8a0">case_insensitive</a> <span class="keywordflow">and</span> <span class="stringliteral">&#39;not &#39;</span>) <span class="keywordflow">or</span> <span class="stringliteral">&#39;&#39;</span>,
-<a name="l00453"></a>00453 <span class="stringliteral">&#39;terminators&#39;</span>: str(self.<a class="code" href="classcmd2_1_1Cmd.html#a6bd95a7f702f668696ab6e88555da23d">terminators</a>),
-<a name="l00454"></a>00454 <span class="stringliteral">&#39;settable&#39;</span>: <span class="stringliteral">&#39; &#39;</span>.join(self.<a class="code" href="classcmd2_1_1Cmd.html#a6cec2f634666d15d032d4c113e654c3c">settable</a>)
-<a name="l00455"></a>00455 })
-<a name="l00456"></a>00456
-<a name="l00457"></a><a class="code" href="classcmd2_1_1Cmd.html#af112b7b704dcd8d34c389fcaa150e3d0">00457</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#af112b7b704dcd8d34c389fcaa150e3d0">do_help</a>(self, arg):
-<a name="l00458"></a>00458 <span class="keywordflow">if</span> arg:
-<a name="l00459"></a>00459 funcname = self.<a class="code" href="classcmd2_1_1Cmd.html#a7fbb17b136654f705387ede1fb685a3e">func_named</a>(arg)
-<a name="l00460"></a>00460 <span class="keywordflow">if</span> funcname:
-<a name="l00461"></a>00461 fn = getattr(self, funcname)
-<a name="l00462"></a>00462 <span class="keywordflow">try</span>:
-<a name="l00463"></a>00463 fn.optionParser.print_help(file=self.<a class="code" href="classcmd2_1_1Cmd.html#a2a71ccfd9f189e17db765b603f2c9a78">stdout</a>)
-<a name="l00464"></a>00464 <span class="keywordflow">except</span> AttributeError:
-<a name="l00465"></a>00465 cmd.Cmd.do_help(self, funcname[3:])
-<a name="l00466"></a>00466 <span class="keywordflow">else</span>:
-<a name="l00467"></a>00467 cmd.Cmd.do_help(self, arg)
-<a name="l00468"></a>00468
-<a name="l00469"></a><a class="code" href="classcmd2_1_1Cmd.html#a728675cc7b48ac258c5026929df0dfe4">00469</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#afef8fbba2cb5adea45e3a22a506c8665">__init__</a>(self, *args, **kwargs):
-<a name="l00470"></a>00470 cmd.Cmd.__init__(self, *args, **kwargs)
-<a name="l00471"></a>00471 self.<a class="code" href="classcmd2_1_1Cmd.html#af7cb41e066bc55be38b97ea82269e5e8">initial_stdout</a> = sys.stdout
-<a name="l00472"></a>00472 self.<a class="code" href="classcmd2_1_1Cmd.html#a666a090bc7298aae6ca55840e9418f96">history</a> = <a class="code" href="classcmd2_1_1History.html">History</a>()
-<a name="l00473"></a>00473 self.<a class="code" href="classcmd2_1_1Cmd.html#a30058e5e628d60dedf7c500e270b3e5d">pystate</a> = {}
-<a name="l00474"></a>00474 self.<a class="code" href="classcmd2_1_1Cmd.html#ad8ccfbcd2a4eb800f040fcdbd26089df">shortcuts</a> = sorted(self.shortcuts.items(), reverse=<span class="keyword">True</span>)
-<a name="l00475"></a>00475 self.<a class="code" href="classcmd2_1_1Cmd.html#a8ccd464e255a798b587637f9b812dbcd">keywords</a> = self.<a class="code" href="classcmd2_1_1Cmd.html#a01befaea1ef9fa2c8b26521f7b2dfb9c">reserved_words</a> + [fname[3:] <span class="keywordflow">for</span> fname <span class="keywordflow">in</span> dir(self)
-<a name="l00476"></a>00476 <span class="keywordflow">if</span> fname.startswith(<span class="stringliteral">&#39;do_&#39;</span>)]
-<a name="l00477"></a>00477 self.<a class="code" href="classcmd2_1_1Cmd.html#a819bd7bd930dab0e39e59af3397c2eac">_init_parser</a>()
-<a name="l00478"></a>00478
-<a name="l00479"></a><a class="code" href="classcmd2_1_1Cmd.html#aea47330c6e0f4e5f14e2cdff41679597">00479</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#aea47330c6e0f4e5f14e2cdff41679597">do_shortcuts</a>(self, args):
-<a name="l00480"></a>00480 <span class="stringliteral">&quot;&quot;&quot;Lists single-key shortcuts available.&quot;&quot;&quot;</span>
-<a name="l00481"></a>00481 result = <span class="stringliteral">&quot;\n&quot;</span>.join(<span class="stringliteral">&#39;%s: %s&#39;</span> % (sc[0], sc[1]) <span class="keywordflow">for</span> sc <span class="keywordflow">in</span> sorted(self.<a class="code" href="classcmd2_1_1Cmd.html#ad8ccfbcd2a4eb800f040fcdbd26089df">shortcuts</a>))
-<a name="l00482"></a>00482 self.stdout.write(<span class="stringliteral">&quot;Single-key shortcuts for other commands:\n%s\n&quot;</span> % (result))
-<a name="l00483"></a>00483
-<a name="l00484"></a><a class="code" href="classcmd2_1_1Cmd.html#a794ce4cfd06ddd8df24df33d9f116a65">00484</a> prefixParser = pyparsing.Empty()
-<a name="l00485"></a><a class="code" href="classcmd2_1_1Cmd.html#ae6adde6cd440331e4add0bdf8c2c61d0">00485</a> commentGrammars = pyparsing.Or([pyparsing.pythonStyleComment, pyparsing.cStyleComment])
-<a name="l00486"></a>00486 commentGrammars.addParseAction(<span class="keyword">lambda</span> x: <span class="stringliteral">&#39;&#39;</span>)
-<a name="l00487"></a><a class="code" href="classcmd2_1_1Cmd.html#a0333f71a3291354d3238a4853ec5e762">00487</a> commentInProgress = pyparsing.Literal(<span class="stringliteral">&#39;/*&#39;</span>) + pyparsing.SkipTo(
-<a name="l00488"></a>00488 pyparsing.stringEnd ^ <span class="stringliteral">&#39;*/&#39;</span>)
-<a name="l00489"></a><a class="code" href="classcmd2_1_1Cmd.html#a6bd95a7f702f668696ab6e88555da23d">00489</a> terminators = [<span class="stringliteral">&#39;;&#39;</span>]
-<a name="l00490"></a><a class="code" href="classcmd2_1_1Cmd.html#a395ee1f733c5faeb66e74b308cbc5e63">00490</a> blankLinesAllowed = <span class="keyword">False</span>
-<a name="l00491"></a><a class="code" href="classcmd2_1_1Cmd.html#a05fbd7501cbc1f911e9a4925e5f0804a">00491</a> multilineCommands = []
-<a name="l00492"></a>00492
-<a name="l00493"></a><a class="code" href="classcmd2_1_1Cmd.html#a819bd7bd930dab0e39e59af3397c2eac">00493</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a819bd7bd930dab0e39e59af3397c2eac">_init_parser</a>(self):
-<a name="l00494"></a>00494 <span class="stringliteral">r&#39;&#39;&#39;</span>
-<a name="l00495"></a>00495 <span class="stringliteral"> &gt;&gt;&gt; c = Cmd()</span>
-<a name="l00496"></a>00496 <span class="stringliteral"> &gt;&gt;&gt; c.multilineCommands = [&#39;multiline&#39;]</span>
-<a name="l00497"></a>00497 <span class="stringliteral"> &gt;&gt;&gt; c.case_insensitive = True</span>
-<a name="l00498"></a>00498 <span class="stringliteral"> &gt;&gt;&gt; c._init_parser()</span>
-<a name="l00499"></a>00499 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;&#39;).dump())</span>
-<a name="l00500"></a>00500 <span class="stringliteral"> []</span>
-<a name="l00501"></a>00501 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;&#39;).dump())</span>
-<a name="l00502"></a>00502 <span class="stringliteral"> [] </span>
-<a name="l00503"></a>00503 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;/* empty command */&#39;).dump())</span>
-<a name="l00504"></a>00504 <span class="stringliteral"> [] </span>
-<a name="l00505"></a>00505 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;plainword&#39;).dump())</span>
-<a name="l00506"></a>00506 <span class="stringliteral"> [&#39;plainword&#39;, &#39;&#39;]</span>
-<a name="l00507"></a>00507 <span class="stringliteral"> - command: plainword</span>
-<a name="l00508"></a>00508 <span class="stringliteral"> - statement: [&#39;plainword&#39;, &#39;&#39;]</span>
-<a name="l00509"></a>00509 <span class="stringliteral"> - command: plainword </span>
-<a name="l00510"></a>00510 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;termbare;&#39;).dump())</span>
-<a name="l00511"></a>00511 <span class="stringliteral"> [&#39;termbare&#39;, &#39;&#39;, &#39;;&#39;, &#39;&#39;]</span>
-<a name="l00512"></a>00512 <span class="stringliteral"> - command: termbare</span>
-<a name="l00513"></a>00513 <span class="stringliteral"> - statement: [&#39;termbare&#39;, &#39;&#39;, &#39;;&#39;]</span>
-<a name="l00514"></a>00514 <span class="stringliteral"> - command: termbare</span>
-<a name="l00515"></a>00515 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00516"></a>00516 <span class="stringliteral"> - terminator: ; </span>
-<a name="l00517"></a>00517 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;termbare; suffx&#39;).dump())</span>
-<a name="l00518"></a>00518 <span class="stringliteral"> [&#39;termbare&#39;, &#39;&#39;, &#39;;&#39;, &#39;suffx&#39;]</span>
-<a name="l00519"></a>00519 <span class="stringliteral"> - command: termbare</span>
-<a name="l00520"></a>00520 <span class="stringliteral"> - statement: [&#39;termbare&#39;, &#39;&#39;, &#39;;&#39;]</span>
-<a name="l00521"></a>00521 <span class="stringliteral"> - command: termbare</span>
-<a name="l00522"></a>00522 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00523"></a>00523 <span class="stringliteral"> - suffix: suffx</span>
-<a name="l00524"></a>00524 <span class="stringliteral"> - terminator: ; </span>
-<a name="l00525"></a>00525 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;barecommand&#39;).dump())</span>
-<a name="l00526"></a>00526 <span class="stringliteral"> [&#39;barecommand&#39;, &#39;&#39;]</span>
-<a name="l00527"></a>00527 <span class="stringliteral"> - command: barecommand</span>
-<a name="l00528"></a>00528 <span class="stringliteral"> - statement: [&#39;barecommand&#39;, &#39;&#39;]</span>
-<a name="l00529"></a>00529 <span class="stringliteral"> - command: barecommand</span>
-<a name="l00530"></a>00530 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;COMmand with args&#39;).dump())</span>
-<a name="l00531"></a>00531 <span class="stringliteral"> [&#39;command&#39;, &#39;with args&#39;]</span>
-<a name="l00532"></a>00532 <span class="stringliteral"> - args: with args</span>
-<a name="l00533"></a>00533 <span class="stringliteral"> - command: command</span>
-<a name="l00534"></a>00534 <span class="stringliteral"> - statement: [&#39;command&#39;, &#39;with args&#39;]</span>
-<a name="l00535"></a>00535 <span class="stringliteral"> - args: with args</span>
-<a name="l00536"></a>00536 <span class="stringliteral"> - command: command</span>
-<a name="l00537"></a>00537 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;command with args and terminator; and suffix&#39;).dump())</span>
-<a name="l00538"></a>00538 <span class="stringliteral"> [&#39;command&#39;, &#39;with args and terminator&#39;, &#39;;&#39;, &#39;and suffix&#39;]</span>
-<a name="l00539"></a>00539 <span class="stringliteral"> - args: with args and terminator</span>
-<a name="l00540"></a>00540 <span class="stringliteral"> - command: command</span>
-<a name="l00541"></a>00541 <span class="stringliteral"> - statement: [&#39;command&#39;, &#39;with args and terminator&#39;, &#39;;&#39;]</span>
-<a name="l00542"></a>00542 <span class="stringliteral"> - args: with args and terminator</span>
-<a name="l00543"></a>00543 <span class="stringliteral"> - command: command</span>
-<a name="l00544"></a>00544 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00545"></a>00545 <span class="stringliteral"> - suffix: and suffix</span>
-<a name="l00546"></a>00546 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00547"></a>00547 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;simple | piped&#39;).dump())</span>
-<a name="l00548"></a>00548 <span class="stringliteral"> [&#39;simple&#39;, &#39;&#39;, &#39;|&#39;, &#39; piped&#39;]</span>
-<a name="l00549"></a>00549 <span class="stringliteral"> - command: simple</span>
-<a name="l00550"></a>00550 <span class="stringliteral"> - pipeTo: piped</span>
-<a name="l00551"></a>00551 <span class="stringliteral"> - statement: [&#39;simple&#39;, &#39;&#39;]</span>
-<a name="l00552"></a>00552 <span class="stringliteral"> - command: simple</span>
-<a name="l00553"></a>00553 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;double-pipe || is not a pipe&#39;).dump())</span>
-<a name="l00554"></a>00554 <span class="stringliteral"> [&#39;double&#39;, &#39;-pipe || is not a pipe&#39;]</span>
-<a name="l00555"></a>00555 <span class="stringliteral"> - args: -pipe || is not a pipe</span>
-<a name="l00556"></a>00556 <span class="stringliteral"> - command: double</span>
-<a name="l00557"></a>00557 <span class="stringliteral"> - statement: [&#39;double&#39;, &#39;-pipe || is not a pipe&#39;]</span>
-<a name="l00558"></a>00558 <span class="stringliteral"> - args: -pipe || is not a pipe</span>
-<a name="l00559"></a>00559 <span class="stringliteral"> - command: double</span>
-<a name="l00560"></a>00560 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;command with args, terminator;sufx | piped&#39;).dump())</span>
-<a name="l00561"></a>00561 <span class="stringliteral"> [&#39;command&#39;, &#39;with args, terminator&#39;, &#39;;&#39;, &#39;sufx&#39;, &#39;|&#39;, &#39; piped&#39;]</span>
-<a name="l00562"></a>00562 <span class="stringliteral"> - args: with args, terminator</span>
-<a name="l00563"></a>00563 <span class="stringliteral"> - command: command</span>
-<a name="l00564"></a>00564 <span class="stringliteral"> - pipeTo: piped</span>
-<a name="l00565"></a>00565 <span class="stringliteral"> - statement: [&#39;command&#39;, &#39;with args, terminator&#39;, &#39;;&#39;]</span>
-<a name="l00566"></a>00566 <span class="stringliteral"> - args: with args, terminator</span>
-<a name="l00567"></a>00567 <span class="stringliteral"> - command: command</span>
-<a name="l00568"></a>00568 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00569"></a>00569 <span class="stringliteral"> - suffix: sufx</span>
-<a name="l00570"></a>00570 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00571"></a>00571 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;output into &gt; afile.txt&#39;).dump())</span>
-<a name="l00572"></a>00572 <span class="stringliteral"> [&#39;output&#39;, &#39;into&#39;, &#39;&gt;&#39;, &#39;afile.txt&#39;]</span>
-<a name="l00573"></a>00573 <span class="stringliteral"> - args: into</span>
-<a name="l00574"></a>00574 <span class="stringliteral"> - command: output</span>
-<a name="l00575"></a>00575 <span class="stringliteral"> - output: &gt;</span>
-<a name="l00576"></a>00576 <span class="stringliteral"> - outputTo: afile.txt</span>
-<a name="l00577"></a>00577 <span class="stringliteral"> - statement: [&#39;output&#39;, &#39;into&#39;]</span>
-<a name="l00578"></a>00578 <span class="stringliteral"> - args: into</span>
-<a name="l00579"></a>00579 <span class="stringliteral"> - command: output </span>
-<a name="l00580"></a>00580 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;output into;sufx | pipethrume plz &gt; afile.txt&#39;).dump())</span>
-<a name="l00581"></a>00581 <span class="stringliteral"> [&#39;output&#39;, &#39;into&#39;, &#39;;&#39;, &#39;sufx&#39;, &#39;|&#39;, &#39; pipethrume plz&#39;, &#39;&gt;&#39;, &#39;afile.txt&#39;]</span>
-<a name="l00582"></a>00582 <span class="stringliteral"> - args: into</span>
-<a name="l00583"></a>00583 <span class="stringliteral"> - command: output</span>
-<a name="l00584"></a>00584 <span class="stringliteral"> - output: &gt;</span>
-<a name="l00585"></a>00585 <span class="stringliteral"> - outputTo: afile.txt</span>
-<a name="l00586"></a>00586 <span class="stringliteral"> - pipeTo: pipethrume plz</span>
-<a name="l00587"></a>00587 <span class="stringliteral"> - statement: [&#39;output&#39;, &#39;into&#39;, &#39;;&#39;]</span>
-<a name="l00588"></a>00588 <span class="stringliteral"> - args: into</span>
-<a name="l00589"></a>00589 <span class="stringliteral"> - command: output</span>
-<a name="l00590"></a>00590 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00591"></a>00591 <span class="stringliteral"> - suffix: sufx</span>
-<a name="l00592"></a>00592 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00593"></a>00593 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;output to paste buffer &gt;&gt; &#39;).dump())</span>
-<a name="l00594"></a>00594 <span class="stringliteral"> [&#39;output&#39;, &#39;to paste buffer&#39;, &#39;&gt;&gt;&#39;, &#39;&#39;]</span>
-<a name="l00595"></a>00595 <span class="stringliteral"> - args: to paste buffer</span>
-<a name="l00596"></a>00596 <span class="stringliteral"> - command: output</span>
-<a name="l00597"></a>00597 <span class="stringliteral"> - output: &gt;&gt;</span>
-<a name="l00598"></a>00598 <span class="stringliteral"> - statement: [&#39;output&#39;, &#39;to paste buffer&#39;]</span>
-<a name="l00599"></a>00599 <span class="stringliteral"> - args: to paste buffer</span>
-<a name="l00600"></a>00600 <span class="stringliteral"> - command: output</span>
-<a name="l00601"></a>00601 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;ignore the /* commented | &gt; */ stuff;&#39;).dump())</span>
-<a name="l00602"></a>00602 <span class="stringliteral"> [&#39;ignore&#39;, &#39;the /* commented | &gt; */ stuff&#39;, &#39;;&#39;, &#39;&#39;]</span>
-<a name="l00603"></a>00603 <span class="stringliteral"> - args: the /* commented | &gt; */ stuff</span>
-<a name="l00604"></a>00604 <span class="stringliteral"> - command: ignore</span>
-<a name="l00605"></a>00605 <span class="stringliteral"> - statement: [&#39;ignore&#39;, &#39;the /* commented | &gt; */ stuff&#39;, &#39;;&#39;]</span>
-<a name="l00606"></a>00606 <span class="stringliteral"> - args: the /* commented | &gt; */ stuff</span>
-<a name="l00607"></a>00607 <span class="stringliteral"> - command: ignore</span>
-<a name="l00608"></a>00608 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00609"></a>00609 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00610"></a>00610 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;has &gt; inside;&#39;).dump())</span>
-<a name="l00611"></a>00611 <span class="stringliteral"> [&#39;has&#39;, &#39;&gt; inside&#39;, &#39;;&#39;, &#39;&#39;]</span>
-<a name="l00612"></a>00612 <span class="stringliteral"> - args: &gt; inside</span>
-<a name="l00613"></a>00613 <span class="stringliteral"> - command: has</span>
-<a name="l00614"></a>00614 <span class="stringliteral"> - statement: [&#39;has&#39;, &#39;&gt; inside&#39;, &#39;;&#39;]</span>
-<a name="l00615"></a>00615 <span class="stringliteral"> - args: &gt; inside</span>
-<a name="l00616"></a>00616 <span class="stringliteral"> - command: has</span>
-<a name="l00617"></a>00617 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00618"></a>00618 <span class="stringliteral"> - terminator: ; </span>
-<a name="l00619"></a>00619 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;multiline has &gt; inside an unfinished command&#39;).dump())</span>
-<a name="l00620"></a>00620 <span class="stringliteral"> [&#39;multiline&#39;, &#39; has &gt; inside an unfinished command&#39;]</span>
-<a name="l00621"></a>00621 <span class="stringliteral"> - multilineCommand: multiline </span>
-<a name="l00622"></a>00622 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;multiline has &gt; inside;&#39;).dump())</span>
-<a name="l00623"></a>00623 <span class="stringliteral"> [&#39;multiline&#39;, &#39;has &gt; inside&#39;, &#39;;&#39;, &#39;&#39;]</span>
-<a name="l00624"></a>00624 <span class="stringliteral"> - args: has &gt; inside</span>
-<a name="l00625"></a>00625 <span class="stringliteral"> - multilineCommand: multiline</span>
-<a name="l00626"></a>00626 <span class="stringliteral"> - statement: [&#39;multiline&#39;, &#39;has &gt; inside&#39;, &#39;;&#39;]</span>
-<a name="l00627"></a>00627 <span class="stringliteral"> - args: has &gt; inside</span>
-<a name="l00628"></a>00628 <span class="stringliteral"> - multilineCommand: multiline</span>
-<a name="l00629"></a>00629 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00630"></a>00630 <span class="stringliteral"> - terminator: ; </span>
-<a name="l00631"></a>00631 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;multiline command /* with comment in progress;&#39;).dump())</span>
-<a name="l00632"></a>00632 <span class="stringliteral"> [&#39;multiline&#39;, &#39; command /* with comment in progress;&#39;]</span>
-<a name="l00633"></a>00633 <span class="stringliteral"> - multilineCommand: multiline</span>
-<a name="l00634"></a>00634 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;multiline command /* with comment complete */ is done;&#39;).dump())</span>
-<a name="l00635"></a>00635 <span class="stringliteral"> [&#39;multiline&#39;, &#39;command /* with comment complete */ is done&#39;, &#39;;&#39;, &#39;&#39;]</span>
-<a name="l00636"></a>00636 <span class="stringliteral"> - args: command /* with comment complete */ is done</span>
-<a name="l00637"></a>00637 <span class="stringliteral"> - multilineCommand: multiline</span>
-<a name="l00638"></a>00638 <span class="stringliteral"> - statement: [&#39;multiline&#39;, &#39;command /* with comment complete */ is done&#39;, &#39;;&#39;]</span>
-<a name="l00639"></a>00639 <span class="stringliteral"> - args: command /* with comment complete */ is done</span>
-<a name="l00640"></a>00640 <span class="stringliteral"> - multilineCommand: multiline</span>
-<a name="l00641"></a>00641 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00642"></a>00642 <span class="stringliteral"> - terminator: ;</span>
-<a name="l00643"></a>00643 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;multiline command ends\n\n&#39;).dump())</span>
-<a name="l00644"></a>00644 <span class="stringliteral"> [&#39;multiline&#39;, &#39;command ends&#39;, &#39;\n&#39;, &#39;\n&#39;]</span>
-<a name="l00645"></a>00645 <span class="stringliteral"> - args: command ends</span>
-<a name="l00646"></a>00646 <span class="stringliteral"> - multilineCommand: multiline</span>
-<a name="l00647"></a>00647 <span class="stringliteral"> - statement: [&#39;multiline&#39;, &#39;command ends&#39;, &#39;\n&#39;, &#39;\n&#39;]</span>
-<a name="l00648"></a>00648 <span class="stringliteral"> - args: command ends</span>
-<a name="l00649"></a>00649 <span class="stringliteral"> - multilineCommand: multiline</span>
-<a name="l00650"></a>00650 <span class="stringliteral"> - terminator: [&#39;\n&#39;, &#39;\n&#39;]</span>
-<a name="l00651"></a>00651 <span class="stringliteral"> - terminator: [&#39;\n&#39;, &#39;\n&#39;]</span>
-<a name="l00652"></a>00652 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;multiline command &quot;with term; ends&quot; now\n\n&#39;).dump())</span>
-<a name="l00653"></a>00653 <span class="stringliteral"> [&#39;multiline&#39;, &#39;command &quot;with term; ends&quot; now&#39;, &#39;\n&#39;, &#39;\n&#39;]</span>
-<a name="l00654"></a>00654 <span class="stringliteral"> - args: command &quot;with term; ends&quot; now</span>
-<a name="l00655"></a>00655 <span class="stringliteral"> - multilineCommand: multiline</span>
-<a name="l00656"></a>00656 <span class="stringliteral"> - statement: [&#39;multiline&#39;, &#39;command &quot;with term; ends&quot; now&#39;, &#39;\n&#39;, &#39;\n&#39;]</span>
-<a name="l00657"></a>00657 <span class="stringliteral"> - args: command &quot;with term; ends&quot; now</span>
-<a name="l00658"></a>00658 <span class="stringliteral"> - multilineCommand: multiline</span>
-<a name="l00659"></a>00659 <span class="stringliteral"> - terminator: [&#39;\n&#39;, &#39;\n&#39;]</span>
-<a name="l00660"></a>00660 <span class="stringliteral"> - terminator: [&#39;\n&#39;, &#39;\n&#39;]</span>
-<a name="l00661"></a>00661 <span class="stringliteral"> &gt;&gt;&gt; print (c.parser.parseString(&#39;what if &quot;quoted strings /* seem to &quot; start comments?&#39;).dump())</span>
-<a name="l00662"></a>00662 <span class="stringliteral"> [&#39;what&#39;, &#39;if &quot;quoted strings /* seem to &quot; start comments?&#39;]</span>
-<a name="l00663"></a>00663 <span class="stringliteral"> - args: if &quot;quoted strings /* seem to &quot; start comments?</span>
-<a name="l00664"></a>00664 <span class="stringliteral"> - command: what</span>
-<a name="l00665"></a>00665 <span class="stringliteral"> - statement: [&#39;what&#39;, &#39;if &quot;quoted strings /* seem to &quot; start comments?&#39;]</span>
-<a name="l00666"></a>00666 <span class="stringliteral"> - args: if &quot;quoted strings /* seem to &quot; start comments?</span>
-<a name="l00667"></a><a class="code" href="classcmd2_1_1Cmd.html#a58e84cc1e072fda53b98ba9ed4376540">00667</a> <span class="stringliteral"> - command: what</span>
-<a name="l00668"></a>00668 <span class="stringliteral"> &#39;&#39;&#39;</span>
-<a name="l00669"></a>00669 <span class="comment">#outputParser = (pyparsing.Literal(&#39;&gt;&gt;&#39;) | (pyparsing.WordStart() + &#39;&gt;&#39;) | pyparsing.Regex(&#39;[^=]&gt;&#39;))(&#39;output&#39;)</span>
-<a name="l00670"></a>00670 outputParser = (pyparsing.Literal(self.<a class="code" href="classcmd2_1_1Cmd.html#a64b810574dab9ec12100c5344dc66735">redirector</a> *2) | \
-<a name="l00671"></a>00671 (pyparsing.WordStart() + self.<a class="code" href="classcmd2_1_1Cmd.html#a64b810574dab9ec12100c5344dc66735">redirector</a>) | \
-<a name="l00672"></a>00672 pyparsing.Regex(<span class="stringliteral">&#39;[^=]&#39;</span> + self.<a class="code" href="classcmd2_1_1Cmd.html#a64b810574dab9ec12100c5344dc66735">redirector</a>))(<span class="stringliteral">&#39;output&#39;</span>)
-<a name="l00673"></a>00673
-<a name="l00674"></a>00674 terminatorParser = pyparsing.Or([(hasattr(t, <span class="stringliteral">&#39;parseString&#39;</span>) <span class="keywordflow">and</span> t) <span class="keywordflow">or</span> pyparsing.Literal(t) <span class="keywordflow">for</span> t <span class="keywordflow">in</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a6bd95a7f702f668696ab6e88555da23d">terminators</a>])(<span class="stringliteral">&#39;terminator&#39;</span>)
-<a name="l00675"></a>00675 stringEnd = pyparsing.stringEnd ^ <span class="stringliteral">&#39;\nEOF&#39;</span>
-<a name="l00676"></a>00676 self.<a class="code" href="classcmd2_1_1Cmd.html#a295de6e6060359049be89b5cdb6c09b1">multilineCommand</a> = pyparsing.Or([pyparsing.Keyword(c, caseless=self.<a class="code" href="classcmd2_1_1Cmd.html#a10de661ca23b94cd93972c260523c8a0">case_insensitive</a>) <span class="keywordflow">for</span> c <span class="keywordflow">in</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a05fbd7501cbc1f911e9a4925e5f0804a">multilineCommands</a>])(<span class="stringliteral">&#39;multilineCommand&#39;</span>)
-<a name="l00677"></a>00677 oneLineCommand = (~self.<a class="code" href="classcmd2_1_1Cmd.html#a295de6e6060359049be89b5cdb6c09b1">multilineCommand</a> + pyparsing.Word(self.<a class="code" href="classcmd2_1_1Cmd.html#a866c4b8895784a477d36bebfecfa397e">legalChars</a>))(<span class="stringliteral">&#39;command&#39;</span>)
-<a name="l00678"></a>00678 pipe = pyparsing.Keyword(<span class="stringliteral">&#39;|&#39;</span>, identChars=<span class="stringliteral">&#39;|&#39;</span>)
-<a name="l00679"></a>00679 self.commentGrammars.ignore(pyparsing.quotedString).setParseAction(<span class="keyword">lambda</span> x: <span class="stringliteral">&#39;&#39;</span>)
-<a name="l00680"></a>00680 doNotParse = self.<a class="code" href="classcmd2_1_1Cmd.html#ae6adde6cd440331e4add0bdf8c2c61d0">commentGrammars</a> | self.<a class="code" href="classcmd2_1_1Cmd.html#a0333f71a3291354d3238a4853ec5e762">commentInProgress</a> | pyparsing.quotedString
-<a name="l00681"></a>00681 afterElements = \
-<a name="l00682"></a>00682 pyparsing.Optional(pipe + pyparsing.SkipTo(outputParser ^ stringEnd, ignore=doNotParse)(<span class="stringliteral">&#39;pipeTo&#39;</span>)) + \
-<a name="l00683"></a>00683 pyparsing.Optional(outputParser + pyparsing.SkipTo(stringEnd, ignore=doNotParse).setParseAction(<span class="keyword">lambda</span> x: x[0].strip())(<span class="stringliteral">&#39;outputTo&#39;</span>))
-<a name="l00684"></a>00684 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a10de661ca23b94cd93972c260523c8a0">case_insensitive</a>:
-<a name="l00685"></a>00685 self.multilineCommand.setParseAction(<span class="keyword">lambda</span> x: x[0].lower())
-<a name="l00686"></a>00686 oneLineCommand.setParseAction(<span class="keyword">lambda</span> x: x[0].lower())
-<a name="l00687"></a>00687 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a395ee1f733c5faeb66e74b308cbc5e63">blankLinesAllowed</a>:
-<a name="l00688"></a>00688 self.<a class="code" href="classcmd2_1_1Cmd.html#ab45987033aafd0458078de49d4cf1fb5">blankLineTerminationParser</a> = pyparsing.NoMatch
-<a name="l00689"></a>00689 <span class="keywordflow">else</span>:
-<a name="l00690"></a>00690 self.<a class="code" href="classcmd2_1_1Cmd.html#a826ac7c82dd02c99be27940c179c9af3">blankLineTerminator</a> = (pyparsing.lineEnd + pyparsing.lineEnd)(<span class="stringliteral">&#39;terminator&#39;</span>)
-<a name="l00691"></a>00691 self.blankLineTerminator.setResultsName(<span class="stringliteral">&#39;terminator&#39;</span>)
-<a name="l00692"></a>00692 self.<a class="code" href="classcmd2_1_1Cmd.html#ab45987033aafd0458078de49d4cf1fb5">blankLineTerminationParser</a> = ((self.<a class="code" href="classcmd2_1_1Cmd.html#a295de6e6060359049be89b5cdb6c09b1">multilineCommand</a> ^ oneLineCommand) + pyparsing.SkipTo(self.<a class="code" href="classcmd2_1_1Cmd.html#a826ac7c82dd02c99be27940c179c9af3">blankLineTerminator</a>, ignore=doNotParse).setParseAction(<span class="keyword">lambda</span> x: x[0].strip())(<span class="stringliteral">&#39;args&#39;</span>) + self.<a class="code" href="classcmd2_1_1Cmd.html#a826ac7c82dd02c99be27940c179c9af3">blankLineTerminator</a>)(<span class="stringliteral">&#39;statement&#39;</span>)
-<a name="l00693"></a>00693 self.<a class="code" href="classcmd2_1_1Cmd.html#a501ba802672b553037e265760319cfe1">multilineParser</a> = (((self.<a class="code" href="classcmd2_1_1Cmd.html#a295de6e6060359049be89b5cdb6c09b1">multilineCommand</a> ^ oneLineCommand) + pyparsing.SkipTo(terminatorParser, ignore=doNotParse).setParseAction(<span class="keyword">lambda</span> x: x[0].strip())(<span class="stringliteral">&#39;args&#39;</span>) + terminatorParser)(<span class="stringliteral">&#39;statement&#39;</span>) +
-<a name="l00694"></a>00694 pyparsing.SkipTo(outputParser ^ pipe ^ stringEnd, ignore=doNotParse).setParseAction(<span class="keyword">lambda</span> x: x[0].strip())(<span class="stringliteral">&#39;suffix&#39;</span>) + afterElements)
-<a name="l00695"></a>00695 self.multilineParser.ignore(self.<a class="code" href="classcmd2_1_1Cmd.html#a0333f71a3291354d3238a4853ec5e762">commentInProgress</a>)
-<a name="l00696"></a>00696 self.<a class="code" href="classcmd2_1_1Cmd.html#a58e84cc1e072fda53b98ba9ed4376540">singleLineParser</a> = ((oneLineCommand + pyparsing.SkipTo(terminatorParser ^ stringEnd ^ pipe ^ outputParser, ignore=doNotParse).setParseAction(<span class="keyword">lambda</span> x:x[0].strip())(<span class="stringliteral">&#39;args&#39;</span>))(<span class="stringliteral">&#39;statement&#39;</span>) +
-<a name="l00697"></a>00697 pyparsing.Optional(terminatorParser) + afterElements)
-<a name="l00698"></a>00698 <span class="comment">#self.multilineParser = self.multilineParser.setResultsName(&#39;multilineParser&#39;)</span>
-<a name="l00699"></a>00699 <span class="comment">#self.singleLineParser = self.singleLineParser.setResultsName(&#39;singleLineParser&#39;)</span>
-<a name="l00700"></a>00700 self.<a class="code" href="classcmd2_1_1Cmd.html#ab45987033aafd0458078de49d4cf1fb5">blankLineTerminationParser</a> = self.blankLineTerminationParser.setResultsName(<span class="stringliteral">&#39;statement&#39;</span>)
-<a name="l00701"></a>00701 self.<a class="code" href="classcmd2_1_1Cmd.html#a60c8c9f51ca086f83a2563b7c5e93421">parser</a> = self.<a class="code" href="classcmd2_1_1Cmd.html#a794ce4cfd06ddd8df24df33d9f116a65">prefixParser</a> + (
-<a name="l00702"></a>00702 stringEnd |
-<a name="l00703"></a>00703 self.<a class="code" href="classcmd2_1_1Cmd.html#a501ba802672b553037e265760319cfe1">multilineParser</a> |
-<a name="l00704"></a>00704 self.<a class="code" href="classcmd2_1_1Cmd.html#a58e84cc1e072fda53b98ba9ed4376540">singleLineParser</a> |
-<a name="l00705"></a>00705 self.<a class="code" href="classcmd2_1_1Cmd.html#ab45987033aafd0458078de49d4cf1fb5">blankLineTerminationParser</a> |
-<a name="l00706"></a>00706 self.<a class="code" href="classcmd2_1_1Cmd.html#a295de6e6060359049be89b5cdb6c09b1">multilineCommand</a> + pyparsing.SkipTo(stringEnd, ignore=doNotParse)
-<a name="l00707"></a>00707 )
-<a name="l00708"></a>00708 self.parser.ignore(self.<a class="code" href="classcmd2_1_1Cmd.html#ae6adde6cd440331e4add0bdf8c2c61d0">commentGrammars</a>)
-<a name="l00709"></a>00709
-<a name="l00710"></a>00710 inputMark = pyparsing.Literal(<span class="stringliteral">&#39;&lt;&#39;</span>)
-<a name="l00711"></a>00711 inputMark.setParseAction(<span class="keyword">lambda</span> x: <span class="stringliteral">&#39;&#39;</span>)
-<a name="l00712"></a>00712 fileName = pyparsing.Word(self.<a class="code" href="classcmd2_1_1Cmd.html#a866c4b8895784a477d36bebfecfa397e">legalChars</a> + <span class="stringliteral">&#39;/\\&#39;</span>)
-<a name="l00713"></a>00713 inputFrom = fileName(<span class="stringliteral">&#39;inputFrom&#39;</span>)
-<a name="l00714"></a>00714 inputFrom.setParseAction(replace_with_file_contents)
-<a name="l00715"></a>00715 <span class="comment"># a not-entirely-satisfactory way of distinguishing &lt; as in &quot;import from&quot; from &lt;</span>
-<a name="l00716"></a>00716 <span class="comment"># as in &quot;lesser than&quot;</span>
-<a name="l00717"></a>00717 self.<a class="code" href="classcmd2_1_1Cmd.html#a984d7a052143f938fa7894fbd44632d2">inputParser</a> = inputMark + pyparsing.Optional(inputFrom) + pyparsing.Optional(<span class="stringliteral">&#39;&gt;&#39;</span>) + \
-<a name="l00718"></a>00718 pyparsing.Optional(fileName) + (pyparsing.stringEnd | <span class="stringliteral">&#39;|&#39;</span>)
-<a name="l00719"></a>00719 self.inputParser.ignore(self.<a class="code" href="classcmd2_1_1Cmd.html#a0333f71a3291354d3238a4853ec5e762">commentInProgress</a>)
-<a name="l00720"></a>00720
-<a name="l00721"></a><a class="code" href="classcmd2_1_1Cmd.html#a794ada2c7a6027d079d6a5bae38fea2b">00721</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a794ada2c7a6027d079d6a5bae38fea2b">preparse</a>(self, raw, **kwargs):
-<a name="l00722"></a>00722 <span class="keywordflow">return</span> raw
-<a name="l00723"></a><a class="code" href="classcmd2_1_1Cmd.html#aeda7fe76e7ecbc032386722e8f5cae3a">00723</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#aeda7fe76e7ecbc032386722e8f5cae3a">postparse</a>(self, parseResult):
-<a name="l00724"></a>00724 <span class="keywordflow">return</span> parseResult
-<a name="l00725"></a>00725
-<a name="l00726"></a><a class="code" href="classcmd2_1_1Cmd.html#a1d2749139a96bd29ddabc6cb0dfd4c00">00726</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a1d2749139a96bd29ddabc6cb0dfd4c00">parsed</a>(self, raw, **kwargs):
-<a name="l00727"></a>00727 <span class="keywordflow">if</span> isinstance(raw, ParsedString):
-<a name="l00728"></a>00728 p = raw
-<a name="l00729"></a>00729 <span class="keywordflow">else</span>:
-<a name="l00730"></a>00730 <span class="comment"># preparse is an overridable hook; default makes no changes</span>
-<a name="l00731"></a>00731 s = self.<a class="code" href="classcmd2_1_1Cmd.html#a794ada2c7a6027d079d6a5bae38fea2b">preparse</a>(raw, **kwargs)
-<a name="l00732"></a>00732 s = self.inputParser.transformString(s.lstrip())
-<a name="l00733"></a>00733 s = self.commentGrammars.transformString(s)
-<a name="l00734"></a>00734 <span class="keywordflow">for</span> (shortcut, expansion) <span class="keywordflow">in</span> self.<a class="code" href="classcmd2_1_1Cmd.html#ad8ccfbcd2a4eb800f040fcdbd26089df">shortcuts</a>:
-<a name="l00735"></a>00735 <span class="keywordflow">if</span> s.lower().startswith(shortcut):
-<a name="l00736"></a>00736 s = s.replace(shortcut, expansion + <span class="stringliteral">&#39; &#39;</span>, 1)
-<a name="l00737"></a>00737 <span class="keywordflow">break</span>
-<a name="l00738"></a>00738 result = self.parser.parseString(s)
-<a name="l00739"></a>00739 result[<span class="stringliteral">&#39;raw&#39;</span>] = raw
-<a name="l00740"></a>00740 result[<span class="stringliteral">&#39;command&#39;</span>] = result.multilineCommand <span class="keywordflow">or</span> result.command
-<a name="l00741"></a>00741 result = self.<a class="code" href="classcmd2_1_1Cmd.html#aeda7fe76e7ecbc032386722e8f5cae3a">postparse</a>(result)
-<a name="l00742"></a>00742 p = <a class="code" href="classcmd2_1_1ParsedString.html">ParsedString</a>(result.args)
-<a name="l00743"></a>00743 p.parsed = result
-<a name="l00744"></a>00744 p.parser = self.<a class="code" href="classcmd2_1_1Cmd.html#a1d2749139a96bd29ddabc6cb0dfd4c00">parsed</a>
-<a name="l00745"></a>00745 <span class="keywordflow">for</span> (key, val) <span class="keywordflow">in</span> kwargs.items():
-<a name="l00746"></a>00746 p.parsed[key] = val
-<a name="l00747"></a>00747 <span class="keywordflow">return</span> p
-<a name="l00748"></a>00748
-<a name="l00749"></a><a class="code" href="classcmd2_1_1Cmd.html#ab021b9befbc198bc266b1a439cdc44e6">00749</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#ab021b9befbc198bc266b1a439cdc44e6">postparsing_precmd</a>(self, statement):
-<a name="l00750"></a>00750 stop = 0
-<a name="l00751"></a>00751 <span class="keywordflow">return</span> stop, statement
-<a name="l00752"></a><a class="code" href="classcmd2_1_1Cmd.html#ae64756253f4ef8494ad3cd920f749eb6">00752</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#ae64756253f4ef8494ad3cd920f749eb6">postparsing_postcmd</a>(self, stop):
-<a name="l00753"></a>00753 <span class="keywordflow">return</span> stop
-<a name="l00754"></a>00754
-<a name="l00755"></a><a class="code" href="classcmd2_1_1Cmd.html#a7fbb17b136654f705387ede1fb685a3e">00755</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a7fbb17b136654f705387ede1fb685a3e">func_named</a>(self, arg):
-<a name="l00756"></a>00756 result = <span class="keywordtype">None</span>
-<a name="l00757"></a>00757 target = <span class="stringliteral">&#39;do_&#39;</span> + arg
-<a name="l00758"></a>00758 <span class="keywordflow">if</span> target <span class="keywordflow">in</span> dir(self):
-<a name="l00759"></a>00759 result = target
-<a name="l00760"></a>00760 <span class="keywordflow">else</span>:
-<a name="l00761"></a>00761 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a810ba12198cbbc4e38643c83278956f6">abbrev</a>: <span class="comment"># accept shortened versions of commands</span>
-<a name="l00762"></a>00762 funcs = [fname <span class="keywordflow">for</span> fname <span class="keywordflow">in</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a8ccd464e255a798b587637f9b812dbcd">keywords</a> <span class="keywordflow">if</span> fname.startswith(arg)]
-<a name="l00763"></a>00763 <span class="keywordflow">if</span> len(funcs) == 1:
-<a name="l00764"></a>00764 result = <span class="stringliteral">&#39;do_&#39;</span> + funcs[0]
-<a name="l00765"></a>00765 <span class="keywordflow">return</span> result
-<a name="l00766"></a><a class="code" href="classcmd2_1_1Cmd.html#ac188a434c9c7d5c939e971a3d42c1c63">00766</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#ac188a434c9c7d5c939e971a3d42c1c63">onecmd_plus_hooks</a>(self, line):
-<a name="l00767"></a>00767 <span class="comment"># The outermost level of try/finally nesting can be condensed once</span>
-<a name="l00768"></a>00768 <span class="comment"># Python 2.4 support can be dropped.</span>
-<a name="l00769"></a>00769 stop = 0
-<a name="l00770"></a>00770 <span class="keywordflow">try</span>:
-<a name="l00771"></a>00771 <span class="keywordflow">try</span>:
-<a name="l00772"></a>00772 statement = self.<a class="code" href="classcmd2_1_1Cmd.html#a9f07c787a0f421ce9186b404fed63c54">complete_statement</a>(line)
-<a name="l00773"></a>00773 (stop, statement) = self.<a class="code" href="classcmd2_1_1Cmd.html#ab021b9befbc198bc266b1a439cdc44e6">postparsing_precmd</a>(statement)
-<a name="l00774"></a>00774 <span class="keywordflow">if</span> stop:
-<a name="l00775"></a>00775 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#ae64756253f4ef8494ad3cd920f749eb6">postparsing_postcmd</a>(stop)
-<a name="l00776"></a>00776 <span class="keywordflow">if</span> statement.parsed.command <span class="keywordflow">not</span> <span class="keywordflow">in</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a35586c262b272917f6ecae8e76fca6b9">excludeFromHistory</a>:
-<a name="l00777"></a>00777 self.history.append(statement.parsed.raw)
-<a name="l00778"></a>00778 <span class="keywordflow">try</span>:
-<a name="l00779"></a>00779 self.<a class="code" href="classcmd2_1_1Cmd.html#a46d1bc05e01f5eced432f00c9934db88">redirect_output</a>(statement)
-<a name="l00780"></a>00780 timestart = datetime.datetime.now()
-<a name="l00781"></a>00781 statement = self.precmd(statement)
-<a name="l00782"></a>00782 stop = self.<a class="code" href="classcmd2_1_1Cmd.html#a7b46b9fabe42bf5ec481ab5ea68effcd">onecmd</a>(statement)
-<a name="l00783"></a>00783 stop = self.postcmd(stop, statement)
-<a name="l00784"></a>00784 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a2d83899c5edb8c1296cb90b0fb282de7">timing</a>:
-<a name="l00785"></a>00785 self.<a class="code" href="classcmd2_1_1Cmd.html#a122b67681a0db23863f5ddaa7a687975">pfeedback</a>(<span class="stringliteral">&#39;Elapsed: %s&#39;</span> % str(datetime.datetime.now() - timestart))
-<a name="l00786"></a>00786 <span class="keywordflow">finally</span>:
-<a name="l00787"></a>00787 self.<a class="code" href="classcmd2_1_1Cmd.html#a8b44f9a5a3197613178b4a8fb1804ef7">restore_output</a>(statement)
-<a name="l00788"></a>00788 <span class="keywordflow">except</span> EmptyStatement:
-<a name="l00789"></a>00789 <span class="keywordflow">return</span> 0
-<a name="l00790"></a>00790 <span class="keywordflow">except</span> Exception, e:
-<a name="l00791"></a>00791 self.<a class="code" href="classcmd2_1_1Cmd.html#a118c16455f28dbd3918b565bca086db4">perror</a>(str(e), statement)
-<a name="l00792"></a>00792 <span class="keywordflow">finally</span>:
-<a name="l00793"></a>00793 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#ae64756253f4ef8494ad3cd920f749eb6">postparsing_postcmd</a>(stop)
-<a name="l00794"></a><a class="code" href="classcmd2_1_1Cmd.html#a9f07c787a0f421ce9186b404fed63c54">00794</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a9f07c787a0f421ce9186b404fed63c54">complete_statement</a>(self, line):
-<a name="l00795"></a>00795 <span class="stringliteral">&quot;&quot;&quot;Keep accepting lines of input until the command is complete.&quot;&quot;&quot;</span>
-<a name="l00796"></a>00796 <span class="keywordflow">if</span> (<span class="keywordflow">not</span> line) <span class="keywordflow">or</span> (
-<a name="l00797"></a>00797 <span class="keywordflow">not</span> pyparsing.Or(self.<a class="code" href="classcmd2_1_1Cmd.html#ae6adde6cd440331e4add0bdf8c2c61d0">commentGrammars</a>).
-<a name="l00798"></a>00798 setParseAction(<span class="keyword">lambda</span> x: <span class="stringliteral">&#39;&#39;</span>).transformString(line)):
-<a name="l00799"></a>00799 <span class="keywordflow">raise</span> EmptyStatement
-<a name="l00800"></a>00800 statement = self.<a class="code" href="classcmd2_1_1Cmd.html#a1d2749139a96bd29ddabc6cb0dfd4c00">parsed</a>(line)
-<a name="l00801"></a>00801 <span class="keywordflow">while</span> statement.parsed.multilineCommand <span class="keywordflow">and</span> (statement.parsed.terminator == <span class="stringliteral">&#39;&#39;</span>):
-<a name="l00802"></a>00802 statement = <span class="stringliteral">&#39;%s\n%s&#39;</span> % (statement.parsed.raw,
-<a name="l00803"></a>00803 self.<a class="code" href="classcmd2_1_1Cmd.html#ab2b46bf4fdbb22536322417117eebf16">pseudo_raw_input</a>(self.<a class="code" href="classcmd2_1_1Cmd.html#a186ca22e76dc63ad9d8a95cfaeb4f7fd">continuation_prompt</a>))
-<a name="l00804"></a>00804 statement = self.<a class="code" href="classcmd2_1_1Cmd.html#a1d2749139a96bd29ddabc6cb0dfd4c00">parsed</a>(statement)
-<a name="l00805"></a>00805 <span class="keywordflow">if</span> <span class="keywordflow">not</span> statement.parsed.command:
-<a name="l00806"></a>00806 <span class="keywordflow">raise</span> EmptyStatement
-<a name="l00807"></a>00807 <span class="keywordflow">return</span> statement
-<a name="l00808"></a>00808
-<a name="l00809"></a><a class="code" href="classcmd2_1_1Cmd.html#a46d1bc05e01f5eced432f00c9934db88">00809</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a46d1bc05e01f5eced432f00c9934db88">redirect_output</a>(self, statement):
-<a name="l00810"></a>00810 <span class="keywordflow">if</span> statement.parsed.pipeTo:
-<a name="l00811"></a>00811 self.<a class="code" href="classcmd2_1_1Cmd.html#ad480d9102b3a5e4c8c5541d2c205a1ad">kept_state</a> = <a class="code" href="classcmd2_1_1Statekeeper.html">Statekeeper</a>(self, (<span class="stringliteral">&#39;stdout&#39;</span>,))
-<a name="l00812"></a>00812 self.<a class="code" href="classcmd2_1_1Cmd.html#a86a3b99c482252a9c9e7fc283c7eae5d">kept_sys</a> = <a class="code" href="classcmd2_1_1Statekeeper.html">Statekeeper</a>(sys, (<span class="stringliteral">&#39;stdout&#39;</span>,))
-<a name="l00813"></a>00813 self.<a class="code" href="classcmd2_1_1Cmd.html#ac1dac1bcd74f78671161775a95d74c0a">redirect</a> = subprocess.Popen(statement.parsed.pipeTo, shell=<span class="keyword">True</span>, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
-<a name="l00814"></a>00814 sys.stdout = self.<a class="code" href="classcmd2_1_1Cmd.html#a2a71ccfd9f189e17db765b603f2c9a78">stdout</a> = self.<a class="code" href="classcmd2_1_1Cmd.html#ac1dac1bcd74f78671161775a95d74c0a">redirect</a>.stdin
-<a name="l00815"></a>00815 <span class="keywordflow">elif</span> statement.parsed.output:
-<a name="l00816"></a>00816 <span class="keywordflow">if</span> (<span class="keywordflow">not</span> statement.parsed.outputTo) <span class="keywordflow">and</span> (<span class="keywordflow">not</span> can_clip):
-<a name="l00817"></a>00817 <span class="keywordflow">raise</span> EnvironmentError(<span class="stringliteral">&#39;Cannot redirect to paste buffer; install ``xclip`` and re-run to enable&#39;</span>)
-<a name="l00818"></a>00818 self.<a class="code" href="classcmd2_1_1Cmd.html#ad480d9102b3a5e4c8c5541d2c205a1ad">kept_state</a> = <a class="code" href="classcmd2_1_1Statekeeper.html">Statekeeper</a>(self, (<span class="stringliteral">&#39;stdout&#39;</span>,))
-<a name="l00819"></a>00819 self.<a class="code" href="classcmd2_1_1Cmd.html#a86a3b99c482252a9c9e7fc283c7eae5d">kept_sys</a> = <a class="code" href="classcmd2_1_1Statekeeper.html">Statekeeper</a>(sys, (<span class="stringliteral">&#39;stdout&#39;</span>,))
-<a name="l00820"></a>00820 <span class="keywordflow">if</span> statement.parsed.outputTo:
-<a name="l00821"></a>00821 mode = <span class="stringliteral">&#39;w&#39;</span>
-<a name="l00822"></a>00822 <span class="keywordflow">if</span> statement.parsed.output == 2 * self.<a class="code" href="classcmd2_1_1Cmd.html#a64b810574dab9ec12100c5344dc66735">redirector</a>:
-<a name="l00823"></a>00823 mode = <span class="stringliteral">&#39;a&#39;</span>
-<a name="l00824"></a>00824 sys.stdout = self.<a class="code" href="classcmd2_1_1Cmd.html#a2a71ccfd9f189e17db765b603f2c9a78">stdout</a> = open(os.path.expanduser(statement.parsed.outputTo), mode)
-<a name="l00825"></a>00825 <span class="keywordflow">else</span>:
-<a name="l00826"></a>00826 sys.stdout = self.<a class="code" href="classcmd2_1_1Cmd.html#a2a71ccfd9f189e17db765b603f2c9a78">stdout</a> = tempfile.TemporaryFile(mode=<span class="stringliteral">&quot;w+&quot;</span>)
-<a name="l00827"></a>00827 <span class="keywordflow">if</span> statement.parsed.output == <span class="stringliteral">&#39;&gt;&gt;&#39;</span>:
-<a name="l00828"></a>00828 self.stdout.write(<a class="code" href="namespacecmd2.html#a9f1495f6c72f7d8c0dbb0f9f22029763">get_paste_buffer</a>())
-<a name="l00829"></a>00829
-<a name="l00830"></a><a class="code" href="classcmd2_1_1Cmd.html#a8b44f9a5a3197613178b4a8fb1804ef7">00830</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a8b44f9a5a3197613178b4a8fb1804ef7">restore_output</a>(self, statement):
-<a name="l00831"></a>00831 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#ad480d9102b3a5e4c8c5541d2c205a1ad">kept_state</a>:
-<a name="l00832"></a>00832 <span class="keywordflow">if</span> statement.parsed.output:
-<a name="l00833"></a>00833 <span class="keywordflow">if</span> <span class="keywordflow">not</span> statement.parsed.outputTo:
-<a name="l00834"></a>00834 self.stdout.seek(0)
-<a name="l00835"></a>00835 <a class="code" href="namespacecmd2.html#a514a20ceb8ab40dd89d2df2dd5ff87a0">write_to_paste_buffer</a>(self.stdout.read())
-<a name="l00836"></a>00836 <span class="keywordflow">elif</span> statement.parsed.pipeTo:
-<a name="l00837"></a>00837 <span class="keywordflow">for</span> result <span class="keywordflow">in</span> self.redirect.communicate():
-<a name="l00838"></a>00838 self.kept_state.stdout.write(result <span class="keywordflow">or</span> <span class="stringliteral">&#39;&#39;</span>)
-<a name="l00839"></a>00839 self.stdout.close()
-<a name="l00840"></a>00840 self.kept_state.restore()
-<a name="l00841"></a>00841 self.kept_sys.restore()
-<a name="l00842"></a>00842 self.<a class="code" href="classcmd2_1_1Cmd.html#ad480d9102b3a5e4c8c5541d2c205a1ad">kept_state</a> = <span class="keywordtype">None</span>
-<a name="l00843"></a>00843
-<a name="l00844"></a><a class="code" href="classcmd2_1_1Cmd.html#a7b46b9fabe42bf5ec481ab5ea68effcd">00844</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a7b46b9fabe42bf5ec481ab5ea68effcd">onecmd</a>(self, line):
-<a name="l00845"></a>00845 <span class="stringliteral">&quot;&quot;&quot;Interpret the argument as though it had been typed in response</span>
-<a name="l00846"></a>00846 <span class="stringliteral"> to the prompt.</span>
-<a name="l00847"></a>00847 <span class="stringliteral"></span>
-<a name="l00848"></a>00848 <span class="stringliteral"> This may be overridden, but should not normally need to be;</span>
-<a name="l00849"></a>00849 <span class="stringliteral"> see the precmd() and postcmd() methods for useful execution hooks.</span>
-<a name="l00850"></a>00850 <span class="stringliteral"> The return value is a flag indicating whether interpretation of</span>
-<a name="l00851"></a>00851 <span class="stringliteral"> commands by the interpreter should stop.</span>
-<a name="l00852"></a>00852 <span class="stringliteral"> </span>
-<a name="l00853"></a>00853 <span class="stringliteral"> This (`cmd2`) version of `onecmd` already override&#39;s `cmd`&#39;s `onecmd`.</span>
-<a name="l00854"></a><a class="code" href="classcmd2_1_1Cmd.html#adaaec8df571e88463c3b8b02fefea8b2">00854</a> <span class="stringliteral"></span>
-<a name="l00855"></a>00855 <span class="stringliteral"> &quot;&quot;&quot;</span>
-<a name="l00856"></a>00856 statement = self.<a class="code" href="classcmd2_1_1Cmd.html#a1d2749139a96bd29ddabc6cb0dfd4c00">parsed</a>(line)
-<a name="l00857"></a>00857 self.<a class="code" href="classcmd2_1_1Cmd.html#adaaec8df571e88463c3b8b02fefea8b2">lastcmd</a> = statement.parsed.raw
-<a name="l00858"></a>00858 funcname = self.<a class="code" href="classcmd2_1_1Cmd.html#a7fbb17b136654f705387ede1fb685a3e">func_named</a>(statement.parsed.command)
-<a name="l00859"></a>00859 <span class="keywordflow">if</span> <span class="keywordflow">not</span> funcname:
-<a name="l00860"></a>00860 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#aea64b66ff75b5daaeef61a3dd583df99">_default</a>(statement)
-<a name="l00861"></a>00861 <span class="keywordflow">try</span>:
-<a name="l00862"></a>00862 func = getattr(self, funcname)
-<a name="l00863"></a>00863 <span class="keywordflow">except</span> AttributeError:
-<a name="l00864"></a>00864 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#aea64b66ff75b5daaeef61a3dd583df99">_default</a>(statement)
-<a name="l00865"></a>00865 stop = func(statement)
-<a name="l00866"></a>00866 <span class="keywordflow">return</span> stop
-<a name="l00867"></a>00867
-<a name="l00868"></a><a class="code" href="classcmd2_1_1Cmd.html#aea64b66ff75b5daaeef61a3dd583df99">00868</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#aea64b66ff75b5daaeef61a3dd583df99">_default</a>(self, statement):
-<a name="l00869"></a>00869 arg = statement.full_parsed_statement()
-<a name="l00870"></a>00870 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a7da859e33eae87d5069b96d366cf04b4">default_to_shell</a>:
-<a name="l00871"></a>00871 result = os.system(arg)
-<a name="l00872"></a>00872 <span class="keywordflow">if</span> <span class="keywordflow">not</span> result:
-<a name="l00873"></a>00873 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#ae64756253f4ef8494ad3cd920f749eb6">postparsing_postcmd</a>(<span class="keywordtype">None</span>)
-<a name="l00874"></a>00874 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#ae64756253f4ef8494ad3cd920f749eb6">postparsing_postcmd</a>(self.default(arg))
-<a name="l00875"></a>00875
-<a name="l00876"></a><a class="code" href="classcmd2_1_1Cmd.html#ab2b46bf4fdbb22536322417117eebf16">00876</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#ab2b46bf4fdbb22536322417117eebf16">pseudo_raw_input</a>(self, prompt):
-<a name="l00877"></a>00877 <span class="stringliteral">&quot;&quot;&quot;copied from cmd&#39;s cmdloop; like raw_input, but accounts for changed stdin, stdout&quot;&quot;&quot;</span>
-<a name="l00878"></a>00878
-<a name="l00879"></a>00879 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#add0217858bbc4c268a5f2f27330ad1f8">use_rawinput</a>:
-<a name="l00880"></a>00880 <span class="keywordflow">try</span>:
-<a name="l00881"></a>00881 line = raw_input(prompt)
-<a name="l00882"></a>00882 <span class="keywordflow">except</span> EOFError:
-<a name="l00883"></a>00883 line = <span class="stringliteral">&#39;EOF&#39;</span>
-<a name="l00884"></a>00884 <span class="keywordflow">else</span>:
-<a name="l00885"></a>00885 self.stdout.write(prompt)
-<a name="l00886"></a>00886 self.stdout.flush()
-<a name="l00887"></a>00887 line = self.stdin.readline()
-<a name="l00888"></a>00888 <span class="keywordflow">if</span> <span class="keywordflow">not</span> len(line):
-<a name="l00889"></a>00889 line = <span class="stringliteral">&#39;EOF&#39;</span>
-<a name="l00890"></a>00890 <span class="keywordflow">else</span>:
-<a name="l00891"></a>00891 <span class="keywordflow">if</span> line[-1] == <span class="stringliteral">&#39;\n&#39;</span>: <span class="comment"># this was always true in Cmd</span>
-<a name="l00892"></a>00892 line = line[:-1]
-<a name="l00893"></a>00893 <span class="keywordflow">return</span> line
-<a name="l00894"></a>00894
-<a name="l00895"></a><a class="code" href="classcmd2_1_1Cmd.html#a392c5cd062c20d916c0cacc9cc36c022">00895</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a392c5cd062c20d916c0cacc9cc36c022">_cmdloop</a>(self, intro=None):
-<a name="l00896"></a>00896 <span class="stringliteral">&quot;&quot;&quot;Repeatedly issue a prompt, accept input, parse an initial prefix</span>
-<a name="l00897"></a>00897 <span class="stringliteral"> off the received input, and dispatch to action methods, passing them</span>
-<a name="l00898"></a><a class="code" href="classcmd2_1_1Cmd.html#a4540b84ee5f75aa1f915042ac4f327dc">00898</a> <span class="stringliteral"> the remainder of the line as argument.</span>
-<a name="l00899"></a>00899 <span class="stringliteral"> &quot;&quot;&quot;</span>
-<a name="l00900"></a>00900
-<a name="l00901"></a>00901 <span class="comment"># An almost perfect copy from Cmd; however, the pseudo_raw_input portion</span>
-<a name="l00902"></a>00902 <span class="comment"># has been split out so that it can be called separately</span>
-<a name="l00903"></a>00903
-<a name="l00904"></a>00904 self.preloop()
-<a name="l00905"></a>00905 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#add0217858bbc4c268a5f2f27330ad1f8">use_rawinput</a> <span class="keywordflow">and</span> self.completekey:
-<a name="l00906"></a>00906 <span class="keywordflow">try</span>:
-<a name="l00907"></a>00907 <span class="keyword">import</span> readline
-<a name="l00908"></a>00908 self.<a class="code" href="classcmd2_1_1Cmd.html#a4540b84ee5f75aa1f915042ac4f327dc">old_completer</a> = readline.get_completer()
-<a name="l00909"></a>00909 readline.set_completer(self.complete)
-<a name="l00910"></a>00910 readline.parse_and_bind(self.completekey+<span class="stringliteral">&quot;: complete&quot;</span>)
-<a name="l00911"></a>00911 <span class="keywordflow">except</span> ImportError:
-<a name="l00912"></a>00912 <span class="keywordflow">pass</span>
-<a name="l00913"></a>00913 <span class="keywordflow">try</span>:
-<a name="l00914"></a>00914 <span class="keywordflow">if</span> intro <span class="keywordflow">is</span> <span class="keywordflow">not</span> <span class="keywordtype">None</span>:
-<a name="l00915"></a>00915 self.<a class="code" href="classcmd2_1_1Cmd.html#a3f1d7fcb42b72f182eed91009e0708c3">intro</a> = intro
-<a name="l00916"></a>00916 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a3f1d7fcb42b72f182eed91009e0708c3">intro</a>:
-<a name="l00917"></a>00917 self.stdout.write(str(self.<a class="code" href="classcmd2_1_1Cmd.html#a3f1d7fcb42b72f182eed91009e0708c3">intro</a>)+<span class="stringliteral">&quot;\n&quot;</span>)
-<a name="l00918"></a>00918 stop = <span class="keywordtype">None</span>
-<a name="l00919"></a>00919 <span class="keywordflow">while</span> <span class="keywordflow">not</span> stop:
-<a name="l00920"></a>00920 <span class="keywordflow">if</span> self.cmdqueue:
-<a name="l00921"></a>00921 line = self.cmdqueue.pop(0)
-<a name="l00922"></a>00922 <span class="keywordflow">else</span>:
-<a name="l00923"></a>00923 line = self.<a class="code" href="classcmd2_1_1Cmd.html#ab2b46bf4fdbb22536322417117eebf16">pseudo_raw_input</a>(self.<a class="code" href="classcmd2_1_1Cmd.html#ae9a33dc613b00f4d5b849c0d3521f2c3">prompt</a>)
-<a name="l00924"></a>00924 <span class="keywordflow">if</span> (self.<a class="code" href="classcmd2_1_1Cmd.html#a417779ccb5de864826f97a959bd196d3">echo</a>) <span class="keywordflow">and</span> (isinstance(self.<a class="code" href="classcmd2_1_1Cmd.html#a6f0eed071b4e9197cc4fa46a2c8f1457">stdin</a>, file)):
-<a name="l00925"></a>00925 self.stdout.write(line + <span class="stringliteral">&#39;\n&#39;</span>)
-<a name="l00926"></a>00926 stop = self.<a class="code" href="classcmd2_1_1Cmd.html#ac188a434c9c7d5c939e971a3d42c1c63">onecmd_plus_hooks</a>(line)
-<a name="l00927"></a>00927 self.postloop()
-<a name="l00928"></a>00928 <span class="keywordflow">finally</span>:
-<a name="l00929"></a>00929 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#add0217858bbc4c268a5f2f27330ad1f8">use_rawinput</a> <span class="keywordflow">and</span> self.completekey:
-<a name="l00930"></a>00930 <span class="keywordflow">try</span>:
-<a name="l00931"></a>00931 <span class="keyword">import</span> readline
-<a name="l00932"></a>00932 readline.set_completer(self.<a class="code" href="classcmd2_1_1Cmd.html#a4540b84ee5f75aa1f915042ac4f327dc">old_completer</a>)
-<a name="l00933"></a>00933 <span class="keywordflow">except</span> ImportError:
-<a name="l00934"></a>00934 <span class="keywordflow">pass</span>
-<a name="l00935"></a>00935 <span class="keywordflow">return</span> stop
-<a name="l00936"></a>00936
-<a name="l00937"></a><a class="code" href="classcmd2_1_1Cmd.html#ab2783ec53899e2b4c0abda7007471e64">00937</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#ab2783ec53899e2b4c0abda7007471e64">do_EOF</a>(self, arg):
-<a name="l00938"></a>00938 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#abe14bda0dc50326876c6a761cefba702">_STOP_SCRIPT_NO_EXIT</a> <span class="comment"># End of script; should not exit app</span>
-<a name="l00939"></a><a class="code" href="classcmd2_1_1Cmd.html#a489ae23e2c2dc31c04eab9287c9339fa">00939</a> do_eof = do_EOF
-<a name="l00940"></a>00940
-<a name="l00941"></a><a class="code" href="classcmd2_1_1Cmd.html#a27f6387585848a575e95c936ce97c4cf">00941</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a27f6387585848a575e95c936ce97c4cf">do_quit</a>(self, arg):
-<a name="l00942"></a>00942 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a7a8e8257d7d35c7813355cdefb62b85b">_STOP_AND_EXIT</a>
-<a name="l00943"></a><a class="code" href="classcmd2_1_1Cmd.html#a7407cf3f70091dc1ade5acb856585850">00943</a> do_exit = do_quit
-<a name="l00944"></a><a class="code" href="classcmd2_1_1Cmd.html#ad938266e8224edd7a6e681b9f4416cb5">00944</a> do_q = do_quit
-<a name="l00945"></a>00945
-<a name="l00946"></a><a class="code" href="classcmd2_1_1Cmd.html#a28cd403d962038aca658344673a5ab38">00946</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a28cd403d962038aca658344673a5ab38">select</a>(self, options, prompt=&#39;Your choice? &#39;):
-<a name="l00947"></a>00947 <span class="stringliteral">&#39;&#39;&#39;Presents a numbered menu to the user. Modelled after</span>
-<a name="l00948"></a>00948 <span class="stringliteral"> the bash shell&#39;s SELECT. Returns the item chosen.</span>
-<a name="l00949"></a>00949 <span class="stringliteral"> </span>
-<a name="l00950"></a>00950 <span class="stringliteral"> Argument ``options`` can be:</span>
-<a name="l00951"></a>00951 <span class="stringliteral"></span>
-<a name="l00952"></a>00952 <span class="stringliteral"> | a single string -&gt; will be split into one-word options</span>
-<a name="l00953"></a>00953 <span class="stringliteral"> | a list of strings -&gt; will be offered as options</span>
-<a name="l00954"></a>00954 <span class="stringliteral"> | a list of tuples -&gt; interpreted as (value, text), so </span>
-<a name="l00955"></a>00955 <span class="stringliteral"> that the return value can differ from</span>
-<a name="l00956"></a>00956 <span class="stringliteral"> the text advertised to the user &#39;&#39;&#39;</span>
-<a name="l00957"></a>00957 <span class="keywordflow">if</span> isinstance(options, basestring):
-<a name="l00958"></a>00958 options = zip(options.split(), options.split())
-<a name="l00959"></a>00959 fulloptions = []
-<a name="l00960"></a>00960 <span class="keywordflow">for</span> opt <span class="keywordflow">in</span> options:
-<a name="l00961"></a>00961 <span class="keywordflow">if</span> isinstance(opt, basestring):
-<a name="l00962"></a>00962 fulloptions.append((opt, opt))
-<a name="l00963"></a>00963 <span class="keywordflow">else</span>:
-<a name="l00964"></a>00964 <span class="keywordflow">try</span>:
-<a name="l00965"></a>00965 fulloptions.append((opt[0], opt[1]))
-<a name="l00966"></a>00966 <span class="keywordflow">except</span> IndexError:
-<a name="l00967"></a>00967 fulloptions.append((opt[0], opt[0]))
-<a name="l00968"></a>00968 <span class="keywordflow">for</span> (idx, (value, text)) <span class="keywordflow">in</span> enumerate(fulloptions):
-<a name="l00969"></a>00969 self.<a class="code" href="classcmd2_1_1Cmd.html#ad8b5d33873f9b515e33f83a616d0828f">poutput</a>(<span class="stringliteral">&#39; %2d. %s\n&#39;</span> % (idx+1, text))
-<a name="l00970"></a>00970 <span class="keywordflow">while</span> <span class="keyword">True</span>:
-<a name="l00971"></a>00971 response = raw_input(prompt)
-<a name="l00972"></a>00972 <span class="keywordflow">try</span>:
-<a name="l00973"></a>00973 response = int(response)
-<a name="l00974"></a>00974 result = fulloptions[response - 1][0]
-<a name="l00975"></a>00975 <span class="keywordflow">break</span>
-<a name="l00976"></a>00976 <span class="keywordflow">except</span> ValueError:
-<a name="l00977"></a>00977 <span class="keywordflow">pass</span> <span class="comment"># loop and ask again</span>
-<a name="l00978"></a>00978 <span class="keywordflow">return</span> result
-<a name="l00979"></a>00979
-<a name="l00980"></a>00980 @<a class="code" href="namespacecmd2.html#a863be2c5e3b9fdec03710fd550801c22">options</a>([make_option(<span class="stringliteral">&#39;-l&#39;</span>, <span class="stringliteral">&#39;--long&#39;</span>, action=<span class="stringliteral">&quot;store_true&quot;</span>,
-<a name="l00981"></a><a class="code" href="classcmd2_1_1Cmd.html#a9db85d1db5ea30170d540102f1206b1f">00981</a> help=<span class="stringliteral">&quot;describe function of parameter&quot;</span>)])
-<a name="l00982"></a><a class="code" href="classcmd2_1_1Cmd.html#a4816ba13212f079e4b1e865d20041983">00982</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a4816ba13212f079e4b1e865d20041983">do_show</a>(self, arg, opts):
-<a name="l00983"></a>00983 <span class="stringliteral">&#39;&#39;&#39;Shows value of a parameter.&#39;&#39;&#39;</span>
-<a name="l00984"></a>00984 param = arg.strip().lower()
-<a name="l00985"></a>00985 result = {}
-<a name="l00986"></a>00986 maxlen = 0
-<a name="l00987"></a>00987 <span class="keywordflow">for</span> p <span class="keywordflow">in</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a6cec2f634666d15d032d4c113e654c3c">settable</a>:
-<a name="l00988"></a>00988 <span class="keywordflow">if</span> (<span class="keywordflow">not</span> param) <span class="keywordflow">or</span> p.startswith(param):
-<a name="l00989"></a>00989 result[p] = <span class="stringliteral">&#39;%s: %s&#39;</span> % (p, str(getattr(self, p)))
-<a name="l00990"></a>00990 maxlen = max(maxlen, len(result[p]))
-<a name="l00991"></a>00991 <span class="keywordflow">if</span> result:
-<a name="l00992"></a>00992 <span class="keywordflow">for</span> p <span class="keywordflow">in</span> sorted(result):
-<a name="l00993"></a>00993 <span class="keywordflow">if</span> opts.long:
-<a name="l00994"></a>00994 self.<a class="code" href="classcmd2_1_1Cmd.html#ad8b5d33873f9b515e33f83a616d0828f">poutput</a>(<span class="stringliteral">&#39;%s # %s&#39;</span> % (result[p].<a class="code" href="namespacecmd2.html#ad4ac87ba068f9549b5a7735054df8065">ljust</a>(maxlen), self.<a class="code" href="classcmd2_1_1Cmd.html#a6cec2f634666d15d032d4c113e654c3c">settable</a>[p]))
-<a name="l00995"></a>00995 <span class="keywordflow">else</span>:
-<a name="l00996"></a>00996 self.<a class="code" href="classcmd2_1_1Cmd.html#ad8b5d33873f9b515e33f83a616d0828f">poutput</a>(result[p])
-<a name="l00997"></a>00997 <span class="keywordflow">else</span>:
-<a name="l00998"></a>00998 <span class="keywordflow">raise</span> NotImplementedError(<span class="stringliteral">&quot;Parameter &#39;%s&#39; not supported (type &#39;show&#39; for list of parameters).&quot;</span> % param)
-<a name="l00999"></a>00999
-<a name="l01000"></a><a class="code" href="classcmd2_1_1Cmd.html#a1587bec304ebe93070072d273da9bb31">01000</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a1587bec304ebe93070072d273da9bb31">do_set</a>(self, arg):
-<a name="l01001"></a>01001 <span class="stringliteral">&#39;&#39;&#39;</span>
-<a name="l01002"></a>01002 <span class="stringliteral"> Sets a cmd2 parameter. Accepts abbreviated parameter names so long</span>
-<a name="l01003"></a>01003 <span class="stringliteral"> as there is no ambiguity. Call without arguments for a list of </span>
-<a name="l01004"></a>01004 <span class="stringliteral"> settable parameters with their values.&#39;&#39;&#39;</span>
-<a name="l01005"></a>01005 <span class="keywordflow">try</span>:
-<a name="l01006"></a>01006 statement, paramName, val = arg.parsed.raw.split(<span class="keywordtype">None</span>, 2)
-<a name="l01007"></a>01007 val = val.strip()
-<a name="l01008"></a>01008 paramName = paramName.strip().lower()
-<a name="l01009"></a>01009 <span class="keywordflow">if</span> paramName <span class="keywordflow">not</span> <span class="keywordflow">in</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a6cec2f634666d15d032d4c113e654c3c">settable</a>:
-<a name="l01010"></a>01010 hits = [p <span class="keywordflow">for</span> p <span class="keywordflow">in</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a6cec2f634666d15d032d4c113e654c3c">settable</a> <span class="keywordflow">if</span> p.startswith(paramName)]
-<a name="l01011"></a>01011 <span class="keywordflow">if</span> len(hits) == 1:
-<a name="l01012"></a>01012 paramName = hits[0]
-<a name="l01013"></a>01013 <span class="keywordflow">else</span>:
-<a name="l01014"></a>01014 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a4816ba13212f079e4b1e865d20041983">do_show</a>(paramName)
-<a name="l01015"></a>01015 currentVal = getattr(self, paramName)
-<a name="l01016"></a>01016 <span class="keywordflow">if</span> (val[0] == val[-1]) <span class="keywordflow">and</span> val[0] <span class="keywordflow">in</span> (<span class="stringliteral">&quot;&#39;&quot;</span>, <span class="stringliteral">&#39;&quot;&#39;</span>):
-<a name="l01017"></a>01017 val = val[1:-1]
-<a name="l01018"></a>01018 <span class="keywordflow">else</span>:
-<a name="l01019"></a>01019 val = <a class="code" href="namespacecmd2.html#a0880940558f324b3958aedfc430f592d">cast</a>(currentVal, val)
-<a name="l01020"></a>01020 setattr(self, paramName, val)
-<a name="l01021"></a>01021 self.stdout.write(<span class="stringliteral">&#39;%s - was: %s\nnow: %s\n&#39;</span> % (paramName, currentVal, val))
-<a name="l01022"></a>01022 <span class="keywordflow">if</span> currentVal != val:
-<a name="l01023"></a>01023 <span class="keywordflow">try</span>:
-<a name="l01024"></a>01024 onchange_hook = getattr(self, <span class="stringliteral">&#39;_onchange_%s&#39;</span> % paramName)
-<a name="l01025"></a>01025 onchange_hook(old=currentVal, new=val)
-<a name="l01026"></a>01026 <span class="keywordflow">except</span> AttributeError:
-<a name="l01027"></a>01027 <span class="keywordflow">pass</span>
-<a name="l01028"></a>01028 <span class="keywordflow">except</span> (ValueError, AttributeError, NotSettableError), e:
-<a name="l01029"></a>01029 self.<a class="code" href="classcmd2_1_1Cmd.html#a4816ba13212f079e4b1e865d20041983">do_show</a>(arg)
-<a name="l01030"></a>01030
-<a name="l01031"></a><a class="code" href="classcmd2_1_1Cmd.html#a468717f63c360b46dd5f5bcbae4b0c9c">01031</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a468717f63c360b46dd5f5bcbae4b0c9c">do_pause</a>(self, arg):
-<a name="l01032"></a>01032 <span class="stringliteral">&#39;Displays the specified text then waits for the user to press RETURN.&#39;</span>
-<a name="l01033"></a>01033 raw_input(arg + <span class="stringliteral">&#39;\n&#39;</span>)
-<a name="l01034"></a>01034
-<a name="l01035"></a><a class="code" href="classcmd2_1_1Cmd.html#a734c394c38de8828960370d6d8e68004">01035</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a734c394c38de8828960370d6d8e68004">do_shell</a>(self, arg):
-<a name="l01036"></a>01036 <span class="stringliteral">&#39;execute a command as if at the OS prompt.&#39;</span>
-<a name="l01037"></a>01037 os.system(arg)
-<a name="l01038"></a>01038
-<a name="l01039"></a><a class="code" href="classcmd2_1_1Cmd.html#a5ccce52c26063115070d56b6f099223b">01039</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a5ccce52c26063115070d56b6f099223b">do_py</a>(self, arg):
-<a name="l01040"></a>01040 <span class="stringliteral">&#39;&#39;&#39;</span>
-<a name="l01041"></a>01041 <span class="stringliteral"> py &lt;command&gt;: Executes a Python command.</span>
-<a name="l01042"></a>01042 <span class="stringliteral"> py: Enters interactive Python mode.</span>
-<a name="l01043"></a>01043 <span class="stringliteral"> End with ``Ctrl-D`` (Unix) / ``Ctrl-Z`` (Windows), ``quit()``, &#39;`exit()``.</span>
-<a name="l01044"></a>01044 <span class="stringliteral"> Non-python commands can be issued with ``cmd(&quot;your command&quot;)``.</span>
-<a name="l01045"></a>01045 <span class="stringliteral"> Run python code from external files with ``run(&quot;filename.py&quot;)``</span>
-<a name="l01046"></a>01046 <span class="stringliteral"> &#39;&#39;&#39;</span>
-<a name="l01047"></a>01047 self.<a class="code" href="classcmd2_1_1Cmd.html#a30058e5e628d60dedf7c500e270b3e5d">pystate</a>[<span class="stringliteral">&#39;self&#39;</span>] = self
-<a name="l01048"></a>01048 arg = arg.parsed.raw[2:].strip()
-<a name="l01049"></a>01049 localvars = (self.<a class="code" href="classcmd2_1_1Cmd.html#a55e7978c792429a0a2e3321abdbd23fe">locals_in_py</a> <span class="keywordflow">and</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a30058e5e628d60dedf7c500e270b3e5d">pystate</a>) <span class="keywordflow">or</span> {}
-<a name="l01050"></a>01050 interp = InteractiveConsole(locals=localvars)
-<a name="l01051"></a>01051 interp.runcode(<span class="stringliteral">&#39;import sys, os;sys.path.insert(0, os.getcwd())&#39;</span>)
-<a name="l01052"></a>01052 <span class="keywordflow">if</span> arg.strip():
-<a name="l01053"></a>01053 interp.runcode(arg)
-<a name="l01054"></a>01054 <span class="keywordflow">else</span>:
-<a name="l01055"></a>01055 <span class="keyword">def </span>quit():
-<a name="l01056"></a>01056 <span class="keywordflow">raise</span> EmbeddedConsoleExit
-<a name="l01057"></a>01057 <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#ac188a434c9c7d5c939e971a3d42c1c63">onecmd_plus_hooks</a>(arg):
-<a name="l01058"></a>01058 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#ac188a434c9c7d5c939e971a3d42c1c63">onecmd_plus_hooks</a>(arg + <span class="stringliteral">&#39;\n&#39;</span>)
-<a name="l01059"></a>01059 <span class="keyword">def </span>run(arg):
-<a name="l01060"></a>01060 <span class="keywordflow">try</span>:
-<a name="l01061"></a>01061 file = open(arg)
-<a name="l01062"></a>01062 interp.runcode(file.read())
-<a name="l01063"></a>01063 file.close()
-<a name="l01064"></a>01064 <span class="keywordflow">except</span> IOError, e:
-<a name="l01065"></a>01065 self.<a class="code" href="classcmd2_1_1Cmd.html#a118c16455f28dbd3918b565bca086db4">perror</a>(e)
-<a name="l01066"></a>01066 self.<a class="code" href="classcmd2_1_1Cmd.html#a30058e5e628d60dedf7c500e270b3e5d">pystate</a>[<span class="stringliteral">&#39;quit&#39;</span>] = quit
-<a name="l01067"></a>01067 self.<a class="code" href="classcmd2_1_1Cmd.html#a30058e5e628d60dedf7c500e270b3e5d">pystate</a>[<span class="stringliteral">&#39;exit&#39;</span>] = quit
-<a name="l01068"></a>01068 self.<a class="code" href="classcmd2_1_1Cmd.html#a30058e5e628d60dedf7c500e270b3e5d">pystate</a>[<span class="stringliteral">&#39;cmd&#39;</span>] = onecmd_plus_hooks
-<a name="l01069"></a>01069 self.<a class="code" href="classcmd2_1_1Cmd.html#a30058e5e628d60dedf7c500e270b3e5d">pystate</a>[<span class="stringliteral">&#39;run&#39;</span>] = run
-<a name="l01070"></a>01070 <span class="keywordflow">try</span>:
-<a name="l01071"></a>01071 cprt = <span class="stringliteral">&#39;Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.&#39;</span>
-<a name="l01072"></a>01072 keepstate = <a class="code" href="classcmd2_1_1Statekeeper.html">Statekeeper</a>(sys, (<span class="stringliteral">&#39;stdin&#39;</span>,<span class="stringliteral">&#39;stdout&#39;</span>))
-<a name="l01073"></a>01073 sys.stdout = self.<a class="code" href="classcmd2_1_1Cmd.html#a2a71ccfd9f189e17db765b603f2c9a78">stdout</a>
-<a name="l01074"></a>01074 sys.stdin = self.<a class="code" href="classcmd2_1_1Cmd.html#a6f0eed071b4e9197cc4fa46a2c8f1457">stdin</a>
-<a name="l01075"></a>01075 interp.interact(banner= <span class="stringliteral">&quot;Python %s on %s\n%s\n(%s)\n%s&quot;</span> %
-<a name="l01076"></a>01076 (sys.version, sys.platform, cprt, self.__class__.__name__, self.<a class="code" href="classcmd2_1_1Cmd.html#a5ccce52c26063115070d56b6f099223b">do_py</a>.__doc__))
-<a name="l01077"></a>01077 <span class="keywordflow">except</span> EmbeddedConsoleExit:
-<a name="l01078"></a>01078 <span class="keywordflow">pass</span>
-<a name="l01079"></a>01079 keepstate.restore()
-<a name="l01080"></a>01080
-<a name="l01081"></a>01081 @<a class="code" href="namespacecmd2.html#a863be2c5e3b9fdec03710fd550801c22">options</a>([make_option(<span class="stringliteral">&#39;-s&#39;</span>, <span class="stringliteral">&#39;--script&#39;</span>, action=<span class="stringliteral">&quot;store_true&quot;</span>, help=<span class="stringliteral">&quot;Script format; no separation lines&quot;</span>),
-<a name="l01082"></a>01082 ], arg_desc = <span class="stringliteral">&#39;(limit on which commands to include)&#39;</span>)
-<a name="l01083"></a><a class="code" href="classcmd2_1_1Cmd.html#a46d9a5551bb0456721a0bf7dc07b0d0b">01083</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a46d9a5551bb0456721a0bf7dc07b0d0b">do_history</a>(self, arg, opts):
-<a name="l01084"></a>01084 <span class="stringliteral">&quot;&quot;&quot;history [arg]: lists past commands issued</span>
-<a name="l01085"></a>01085 <span class="stringliteral"> </span>
-<a name="l01086"></a>01086 <span class="stringliteral"> | no arg: list all</span>
-<a name="l01087"></a>01087 <span class="stringliteral"> | arg is integer: list one history item, by index</span>
-<a name="l01088"></a>01088 <span class="stringliteral"> | arg is string: string search</span>
-<a name="l01089"></a>01089 <span class="stringliteral"> | arg is /enclosed in forward-slashes/: regular expression search</span>
-<a name="l01090"></a>01090 <span class="stringliteral"> &quot;&quot;&quot;</span>
-<a name="l01091"></a>01091 <span class="keywordflow">if</span> arg:
-<a name="l01092"></a>01092 history = self.history.get(arg)
-<a name="l01093"></a>01093 <span class="keywordflow">else</span>:
-<a name="l01094"></a>01094 history = self.<a class="code" href="classcmd2_1_1Cmd.html#a666a090bc7298aae6ca55840e9418f96">history</a>
-<a name="l01095"></a>01095 <span class="keywordflow">for</span> hi <span class="keywordflow">in</span> history:
-<a name="l01096"></a>01096 <span class="keywordflow">if</span> opts.script:
-<a name="l01097"></a>01097 self.<a class="code" href="classcmd2_1_1Cmd.html#ad8b5d33873f9b515e33f83a616d0828f">poutput</a>(hi)
-<a name="l01098"></a>01098 <span class="keywordflow">else</span>:
-<a name="l01099"></a>01099 self.stdout.write(hi.pr())
-<a name="l01100"></a><a class="code" href="classcmd2_1_1Cmd.html#aea5c4d49c7b6f552b6123e5a981a6f49">01100</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#aea5c4d49c7b6f552b6123e5a981a6f49">last_matching</a>(self, arg):
-<a name="l01101"></a>01101 <span class="keywordflow">try</span>:
-<a name="l01102"></a>01102 <span class="keywordflow">if</span> arg:
-<a name="l01103"></a>01103 <span class="keywordflow">return</span> self.history.get(arg)[-1]
-<a name="l01104"></a>01104 <span class="keywordflow">else</span>:
-<a name="l01105"></a>01105 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a666a090bc7298aae6ca55840e9418f96">history</a>[-1]
-<a name="l01106"></a>01106 <span class="keywordflow">except</span> IndexError:
-<a name="l01107"></a>01107 <span class="keywordflow">return</span> <span class="keywordtype">None</span>
-<a name="l01108"></a><a class="code" href="classcmd2_1_1Cmd.html#af278702e71cf57de45012216904d1bb5">01108</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#af278702e71cf57de45012216904d1bb5">do_list</a>(self, arg):
-<a name="l01109"></a>01109 <span class="stringliteral">&quot;&quot;&quot;list [arg]: lists last command issued</span>
-<a name="l01110"></a>01110 <span class="stringliteral"> </span>
-<a name="l01111"></a>01111 <span class="stringliteral"> no arg -&gt; list most recent command</span>
-<a name="l01112"></a>01112 <span class="stringliteral"> arg is integer -&gt; list one history item, by index</span>
-<a name="l01113"></a>01113 <span class="stringliteral"> a..b, a:b, a:, ..b -&gt; list spans from a (or start) to b (or end)</span>
-<a name="l01114"></a>01114 <span class="stringliteral"> arg is string -&gt; list all commands matching string search</span>
-<a name="l01115"></a>01115 <span class="stringliteral"> arg is /enclosed in forward-slashes/ -&gt; regular expression search</span>
-<a name="l01116"></a>01116 <span class="stringliteral"> &quot;&quot;&quot;</span>
-<a name="l01117"></a>01117 <span class="keywordflow">try</span>:
-<a name="l01118"></a>01118 history = self.history.span(arg <span class="keywordflow">or</span> <span class="stringliteral">&#39;-1&#39;</span>)
-<a name="l01119"></a>01119 <span class="keywordflow">except</span> IndexError:
-<a name="l01120"></a>01120 history = self.history.search(arg)
-<a name="l01121"></a>01121 <span class="keywordflow">for</span> hi <span class="keywordflow">in</span> history:
-<a name="l01122"></a>01122 self.<a class="code" href="classcmd2_1_1Cmd.html#ad8b5d33873f9b515e33f83a616d0828f">poutput</a>(hi.pr())
-<a name="l01123"></a>01123
-<a name="l01124"></a><a class="code" href="classcmd2_1_1Cmd.html#a71e16c0eab993aa6f22272e04615fa4e">01124</a> do_hi = do_history
-<a name="l01125"></a><a class="code" href="classcmd2_1_1Cmd.html#a978b02763d086aa3f4a278c370b6798f">01125</a> do_l = do_list
-<a name="l01126"></a><a class="code" href="classcmd2_1_1Cmd.html#a0be8d5c8676c2da5eacb8dbaf2e10e29">01126</a> do_li = do_list
-<a name="l01127"></a>01127
-<a name="l01128"></a><a class="code" href="classcmd2_1_1Cmd.html#aebdc7ebb6dc83e9dadb8827cdab1952a">01128</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#aebdc7ebb6dc83e9dadb8827cdab1952a">do_ed</a>(self, arg):
-<a name="l01129"></a>01129 <span class="stringliteral">&quot;&quot;&quot;ed: edit most recent command in text editor</span>
-<a name="l01130"></a>01130 <span class="stringliteral"> ed [N]: edit numbered command from history</span>
-<a name="l01131"></a>01131 <span class="stringliteral"> ed [filename]: edit specified file name</span>
-<a name="l01132"></a>01132 <span class="stringliteral"> </span>
-<a name="l01133"></a>01133 <span class="stringliteral"> commands are run after editor is closed.</span>
-<a name="l01134"></a>01134 <span class="stringliteral"> &quot;set edit (program-name)&quot; or set EDITOR environment variable</span>
-<a name="l01135"></a>01135 <span class="stringliteral"> to control which editing program is used.&quot;&quot;&quot;</span>
-<a name="l01136"></a>01136 <span class="keywordflow">if</span> <span class="keywordflow">not</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a25fe904aca52573c6f10e798dd561588">editor</a>:
-<a name="l01137"></a>01137 <span class="keywordflow">raise</span> EnvironmentError(<span class="stringliteral">&quot;Please use &#39;set editor&#39; to specify your text editing program of choice.&quot;</span>)
-<a name="l01138"></a>01138 filename = self.<a class="code" href="classcmd2_1_1Cmd.html#a3af82e64cdabf19b462cd0ddf686823d">default_file_name</a>
-<a name="l01139"></a>01139 <span class="keywordflow">if</span> arg:
-<a name="l01140"></a>01140 <span class="keywordflow">try</span>:
-<a name="l01141"></a>01141 buffer = self.<a class="code" href="classcmd2_1_1Cmd.html#aea5c4d49c7b6f552b6123e5a981a6f49">last_matching</a>(int(arg))
-<a name="l01142"></a>01142 <span class="keywordflow">except</span> ValueError:
-<a name="l01143"></a>01143 filename = arg
-<a name="l01144"></a>01144 buffer = <span class="stringliteral">&#39;&#39;</span>
-<a name="l01145"></a>01145 <span class="keywordflow">else</span>:
-<a name="l01146"></a>01146 buffer = self.<a class="code" href="classcmd2_1_1Cmd.html#a666a090bc7298aae6ca55840e9418f96">history</a>[-1]
-<a name="l01147"></a>01147
-<a name="l01148"></a>01148 <span class="keywordflow">if</span> buffer:
-<a name="l01149"></a>01149 f = open(os.path.expanduser(filename), <span class="stringliteral">&#39;w&#39;</span>)
-<a name="l01150"></a>01150 f.write(buffer <span class="keywordflow">or</span> <span class="stringliteral">&#39;&#39;</span>)
-<a name="l01151"></a>01151 f.close()
-<a name="l01152"></a>01152
-<a name="l01153"></a>01153 os.system(<span class="stringliteral">&#39;%s %s&#39;</span> % (self.<a class="code" href="classcmd2_1_1Cmd.html#a25fe904aca52573c6f10e798dd561588">editor</a>, filename))
-<a name="l01154"></a>01154 self.<a class="code" href="classcmd2_1_1Cmd.html#a3a237dae48a4dba0daa7e114ff098e90">do__load</a>(filename)
-<a name="l01155"></a><a class="code" href="classcmd2_1_1Cmd.html#a900317e58aad07d0d1fb48080dc63d5c">01155</a> do_edit = do_ed
-<a name="l01156"></a>01156
-<a name="l01157"></a><a class="code" href="classcmd2_1_1Cmd.html#aafc3b1cd861e711c3f5e10cd00a41221">01157</a> saveparser = (pyparsing.Optional(pyparsing.Word(pyparsing.nums)^<span class="stringliteral">&#39;*&#39;</span>)(<span class="stringliteral">&quot;idx&quot;</span>) +
-<a name="l01158"></a>01158 pyparsing.Optional(pyparsing.Word(legalChars + <span class="stringliteral">&#39;/\\&#39;</span>))(<span class="stringliteral">&quot;fname&quot;</span>) +
-<a name="l01159"></a>01159 pyparsing.stringEnd)
-<a name="l01160"></a><a class="code" href="classcmd2_1_1Cmd.html#a12d5262e31e148dafea6017a356ed9cd">01160</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a12d5262e31e148dafea6017a356ed9cd">do_save</a>(self, arg):
-<a name="l01161"></a>01161 <span class="stringliteral">&quot;&quot;&quot;`save [N] [filename.ext]`</span>
-<a name="l01162"></a>01162 <span class="stringliteral"></span>
-<a name="l01163"></a>01163 <span class="stringliteral"> Saves command from history to file.</span>
-<a name="l01164"></a>01164 <span class="stringliteral"></span>
-<a name="l01165"></a>01165 <span class="stringliteral"> | N =&gt; Number of command (from history), or `*`; </span>
-<a name="l01166"></a>01166 <span class="stringliteral"> | most recent command if omitted&quot;&quot;&quot;</span>
-<a name="l01167"></a>01167
-<a name="l01168"></a>01168 <span class="keywordflow">try</span>:
-<a name="l01169"></a>01169 args = self.saveparser.parseString(arg)
-<a name="l01170"></a>01170 <span class="keywordflow">except</span> pyparsing.ParseException:
-<a name="l01171"></a>01171 self.<a class="code" href="classcmd2_1_1Cmd.html#a118c16455f28dbd3918b565bca086db4">perror</a>(<span class="stringliteral">&#39;Could not understand save target %s&#39;</span> % arg)
-<a name="l01172"></a>01172 <span class="keywordflow">raise</span> SyntaxError(self.<a class="code" href="classcmd2_1_1Cmd.html#a12d5262e31e148dafea6017a356ed9cd">do_save</a>.__doc__)
-<a name="l01173"></a>01173 fname = args.fname <span class="keywordflow">or</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a3af82e64cdabf19b462cd0ddf686823d">default_file_name</a>
-<a name="l01174"></a>01174 <span class="keywordflow">if</span> args.idx == <span class="stringliteral">&#39;*&#39;</span>:
-<a name="l01175"></a>01175 saveme = <span class="stringliteral">&#39;\n\n&#39;</span>.join(self.<a class="code" href="classcmd2_1_1Cmd.html#a666a090bc7298aae6ca55840e9418f96">history</a>[:])
-<a name="l01176"></a>01176 <span class="keywordflow">elif</span> args.idx:
-<a name="l01177"></a>01177 saveme = self.<a class="code" href="classcmd2_1_1Cmd.html#a666a090bc7298aae6ca55840e9418f96">history</a>[int(args.idx)-1]
-<a name="l01178"></a>01178 <span class="keywordflow">else</span>:
-<a name="l01179"></a>01179 saveme = self.<a class="code" href="classcmd2_1_1Cmd.html#a666a090bc7298aae6ca55840e9418f96">history</a>[-1]
-<a name="l01180"></a>01180 <span class="keywordflow">try</span>:
-<a name="l01181"></a>01181 f = open(os.path.expanduser(fname), <span class="stringliteral">&#39;w&#39;</span>)
-<a name="l01182"></a>01182 f.write(saveme)
-<a name="l01183"></a>01183 f.close()
-<a name="l01184"></a>01184 self.<a class="code" href="classcmd2_1_1Cmd.html#a122b67681a0db23863f5ddaa7a687975">pfeedback</a>(<span class="stringliteral">&#39;Saved to %s&#39;</span> % (fname))
-<a name="l01185"></a>01185 <span class="keywordflow">except</span> Exception, e:
-<a name="l01186"></a>01186 self.<a class="code" href="classcmd2_1_1Cmd.html#a118c16455f28dbd3918b565bca086db4">perror</a>(<span class="stringliteral">&#39;Error saving %s&#39;</span> % (fname))
-<a name="l01187"></a>01187 <span class="keywordflow">raise</span>
-<a name="l01188"></a>01188
-<a name="l01189"></a><a class="code" href="classcmd2_1_1Cmd.html#a2eba6d3d12d65789880959d788be2d86">01189</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a2eba6d3d12d65789880959d788be2d86">read_file_or_url</a>(self, fname):
-<a name="l01190"></a>01190 <span class="comment"># TODO: not working on localhost</span>
-<a name="l01191"></a>01191 <span class="keywordflow">if</span> isinstance(fname, file):
-<a name="l01192"></a>01192 result = open(fname, <span class="stringliteral">&#39;</span><span class="stringliteral">r&#39;)</span>
-<a name="l01193"></a>01193 <span class="stringliteral"> </span><span class="keywordflow">else</span>:
-<a name="l01194"></a>01194 match = self.urlre.match(fname)
-<a name="l01195"></a>01195 <span class="keywordflow">if</span> match:
-<a name="l01196"></a>01196 result = urllib.urlopen(match.group(1))
-<a name="l01197"></a>01197 <span class="keywordflow">else</span>:
-<a name="l01198"></a>01198 fname = os.path.expanduser(fname)
-<a name="l01199"></a>01199 <span class="keywordflow">try</span>:
-<a name="l01200"></a>01200 result = open(os.path.expanduser(fname), <span class="stringliteral">&#39;</span><span class="stringliteral">r&#39;)</span>
-<a name="l01201"></a>01201 <span class="stringliteral"> </span><span class="keywordflow">except</span> IOError:
-<a name="l01202"></a>01202 result = open(<span class="stringliteral">&#39;%s.%s&#39;</span> % (os.path.expanduser(fname),
-<a name="l01203"></a>01203 self.<a class="code" href="classcmd2_1_1Cmd.html#ab14061f1d84f49fb8fefcce285e7aec7">defaultExtension</a>), <span class="stringliteral">&#39;</span><span class="stringliteral">r&#39;)</span>
-<a name="l01204"></a>01204 <span class="stringliteral"> </span><span class="keywordflow">return</span> result
-<a name="l01205"></a>01205
-<a name="l01206"></a><a class="code" href="classcmd2_1_1Cmd.html#aa084d0f962d9ea060c935ff6a9cf74a8">01206</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#aa084d0f962d9ea060c935ff6a9cf74a8">do__relative_load</a>(self, arg=None):
-<a name="l01207"></a>01207 <span class="stringliteral">&#39;&#39;&#39;</span>
-<a name="l01208"></a>01208 <span class="stringliteral"> Runs commands in script at file or URL; if this is called from within an</span>
-<a name="l01209"></a>01209 <span class="stringliteral"> already-running script, the filename will be interpreted relative to the </span>
-<a name="l01210"></a>01210 <span class="stringliteral"> already-running script&#39;s directory.&#39;&#39;&#39;</span>
-<a name="l01211"></a>01211 <span class="keywordflow">if</span> arg:
-<a name="l01212"></a>01212 arg = arg.split(<span class="keywordtype">None</span>, 1)
-<a name="l01213"></a>01213 targetname, args = arg[0], (arg[1:] <span class="keywordflow">or</span> [<span class="stringliteral">&#39;&#39;</span>])[0]
-<a name="l01214"></a>01214 targetname = os.path.join(self.<a class="code" href="classcmd2_1_1Cmd.html#a549399bed9574c87901100530343ac68">current_script_dir</a> <span class="keywordflow">or</span> <span class="stringliteral">&#39;&#39;</span>, targetname)
-<a name="l01215"></a>01215 self.<a class="code" href="classcmd2_1_1Cmd.html#a3a237dae48a4dba0daa7e114ff098e90">do__load</a>(<span class="stringliteral">&#39;%s %s&#39;</span> % (targetname, args))
-<a name="l01216"></a>01216
-<a name="l01217"></a><a class="code" href="classcmd2_1_1Cmd.html#ad8c02476fc0918fde1093ce103be09de">01217</a> urlre = re.compile(<span class="stringliteral">&#39;(https?://[-\\w\\./]+)&#39;</span>)
-<a name="l01218"></a><a class="code" href="classcmd2_1_1Cmd.html#add0217858bbc4c268a5f2f27330ad1f8">01218</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a8b8c98ab5e1b98e618a5a9122c50fc74">do_load</a>(self, arg=None):
-<a name="l01219"></a>01219 <span class="stringliteral">&quot;&quot;&quot;Runs script of command(s) from a file or URL.&quot;&quot;&quot;</span>
-<a name="l01220"></a>01220 <span class="keywordflow">if</span> arg <span class="keywordflow">is</span> <span class="keywordtype">None</span>:
-<a name="l01221"></a>01221 targetname = self.<a class="code" href="classcmd2_1_1Cmd.html#a3af82e64cdabf19b462cd0ddf686823d">default_file_name</a>
-<a name="l01222"></a>01222 <span class="keywordflow">else</span>:
-<a name="l01223"></a>01223 arg = arg.split(<span class="keywordtype">None</span>, 1)
-<a name="l01224"></a>01224 targetname, args = arg[0], (arg[1:] <span class="keywordflow">or</span> [<span class="stringliteral">&#39;&#39;</span>])[0].strip()
-<a name="l01225"></a>01225 <span class="keywordflow">try</span>:
-<a name="l01226"></a>01226 target = self.<a class="code" href="classcmd2_1_1Cmd.html#a2eba6d3d12d65789880959d788be2d86">read_file_or_url</a>(targetname)
-<a name="l01227"></a>01227 <span class="keywordflow">except</span> IOError, e:
-<a name="l01228"></a>01228 self.<a class="code" href="classcmd2_1_1Cmd.html#a118c16455f28dbd3918b565bca086db4">perror</a>(<span class="stringliteral">&#39;Problem accessing script from %s: \n%s&#39;</span> % (targetname, e))
-<a name="l01229"></a>01229 <span class="keywordflow">return</span>
-<a name="l01230"></a>01230 keepstate = <a class="code" href="classcmd2_1_1Statekeeper.html">Statekeeper</a>(self, (<span class="stringliteral">&#39;stdin&#39;</span>,<span class="stringliteral">&#39;use_rawinput&#39;</span>,<span class="stringliteral">&#39;prompt&#39;</span>,
-<a name="l01231"></a>01231 <span class="stringliteral">&#39;continuation_prompt&#39;</span>,<span class="stringliteral">&#39;current_script_dir&#39;</span>))
-<a name="l01232"></a>01232 self.<a class="code" href="classcmd2_1_1Cmd.html#a6f0eed071b4e9197cc4fa46a2c8f1457">stdin</a> = target
-<a name="l01233"></a>01233 self.<a class="code" href="classcmd2_1_1Cmd.html#add0217858bbc4c268a5f2f27330ad1f8">use_rawinput</a> = <span class="keyword">False</span>
-<a name="l01234"></a>01234 self.<a class="code" href="classcmd2_1_1Cmd.html#ae9a33dc613b00f4d5b849c0d3521f2c3">prompt</a> = self.<a class="code" href="classcmd2_1_1Cmd.html#a186ca22e76dc63ad9d8a95cfaeb4f7fd">continuation_prompt</a> = <span class="stringliteral">&#39;&#39;</span>
-<a name="l01235"></a>01235 self.<a class="code" href="classcmd2_1_1Cmd.html#a549399bed9574c87901100530343ac68">current_script_dir</a> = os.path.split(targetname)[0]
-<a name="l01236"></a>01236 stop = self.<a class="code" href="classcmd2_1_1Cmd.html#a392c5cd062c20d916c0cacc9cc36c022">_cmdloop</a>()
-<a name="l01237"></a>01237 self.stdin.close()
-<a name="l01238"></a>01238 keepstate.restore()
-<a name="l01239"></a>01239 self.<a class="code" href="classcmd2_1_1Cmd.html#adaaec8df571e88463c3b8b02fefea8b2">lastcmd</a> = <span class="stringliteral">&#39;&#39;</span>
-<a name="l01240"></a>01240 <span class="keywordflow">return</span> stop <span class="keywordflow">and</span> (stop != self.<a class="code" href="classcmd2_1_1Cmd.html#abe14bda0dc50326876c6a761cefba702">_STOP_SCRIPT_NO_EXIT</a>)
-<a name="l01241"></a><a class="code" href="classcmd2_1_1Cmd.html#a3a237dae48a4dba0daa7e114ff098e90">01241</a> do__load = do_load <span class="comment"># avoid an unfortunate legacy use of do_load from sqlpython</span>
-<a name="l01242"></a>01242
-<a name="l01243"></a><a class="code" href="classcmd2_1_1Cmd.html#aafd86f263566aa4f2b5bd3c3ea64c678">01243</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#aafd86f263566aa4f2b5bd3c3ea64c678">do_run</a>(self, arg):
-<a name="l01244"></a>01244 <span class="stringliteral">&quot;&quot;&quot;run [arg]: re-runs an earlier command</span>
-<a name="l01245"></a>01245 <span class="stringliteral"> </span>
-<a name="l01246"></a>01246 <span class="stringliteral"> no arg -&gt; run most recent command</span>
-<a name="l01247"></a>01247 <span class="stringliteral"> arg is integer -&gt; run one history item, by index</span>
-<a name="l01248"></a>01248 <span class="stringliteral"> arg is string -&gt; run most recent command by string search</span>
-<a name="l01249"></a>01249 <span class="stringliteral"> arg is /enclosed in forward-slashes/ -&gt; run most recent by regex</span>
-<a name="l01250"></a>01250 <span class="stringliteral"> &quot;&quot;&quot;</span>
-<a name="l01251"></a>01251 <span class="stringliteral">&#39;run [N]: runs the SQL that was run N commands ago&#39;</span>
-<a name="l01252"></a>01252 runme = self.<a class="code" href="classcmd2_1_1Cmd.html#aea5c4d49c7b6f552b6123e5a981a6f49">last_matching</a>(arg)
-<a name="l01253"></a>01253 self.<a class="code" href="classcmd2_1_1Cmd.html#a122b67681a0db23863f5ddaa7a687975">pfeedback</a>(runme)
-<a name="l01254"></a>01254 <span class="keywordflow">if</span> runme:
-<a name="l01255"></a>01255 stop = self.<a class="code" href="classcmd2_1_1Cmd.html#ac188a434c9c7d5c939e971a3d42c1c63">onecmd_plus_hooks</a>(runme)
-<a name="l01256"></a><a class="code" href="classcmd2_1_1Cmd.html#a0a9b6e01b7ac4efb65f2957c28949e87">01256</a> do_r = do_run
-<a name="l01257"></a>01257
-<a name="l01258"></a><a class="code" href="classcmd2_1_1Cmd.html#a66160524beda7b75d70070bebce69e42">01258</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a66160524beda7b75d70070bebce69e42">fileimport</a>(self, statement, source):
-<a name="l01259"></a>01259 <span class="keywordflow">try</span>:
-<a name="l01260"></a>01260 f = open(os.path.expanduser(source))
-<a name="l01261"></a>01261 <span class="keywordflow">except</span> IOError:
-<a name="l01262"></a>01262 self.stdout.write(<span class="stringliteral">&quot;Couldn&#39;t read from file %s\n&quot;</span> % source)
-<a name="l01263"></a>01263 <span class="keywordflow">return</span> <span class="stringliteral">&#39;&#39;</span>
-<a name="l01264"></a>01264 data = f.read()
-<a name="l01265"></a>01265 f.close()
-<a name="l01266"></a>01266 <span class="keywordflow">return</span> data
-<a name="l01267"></a>01267
-<a name="l01268"></a><a class="code" href="classcmd2_1_1Cmd.html#a160c7a080d222defe32c781138901d4e">01268</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a160c7a080d222defe32c781138901d4e">runTranscriptTests</a>(self, callargs):
-<a name="l01269"></a>01269 <span class="keyword">class </span>TestMyAppCase(<a class="code" href="classcmd2_1_1Cmd2TestCase.html">Cmd2TestCase</a>):
-<a name="l01270"></a>01270 CmdApp = self.__class__
-<a name="l01271"></a>01271 self.__class__.testfiles = callargs
-<a name="l01272"></a>01272 sys.argv = [sys.argv[0]] <span class="comment"># the --test argument upsets unittest.main()</span>
-<a name="l01273"></a>01273 testcase = TestMyAppCase()
-<a name="l01274"></a>01274 runner = unittest.TextTestRunner()
-<a name="l01275"></a>01275 result = runner.run(testcase)
-<a name="l01276"></a>01276 result.printErrors()
-<a name="l01277"></a>01277
-<a name="l01278"></a><a class="code" href="classcmd2_1_1Cmd.html#a19b932e21ac917375f16457c986ad4f6">01278</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a19b932e21ac917375f16457c986ad4f6">run_commands_at_invocation</a>(self, callargs):
-<a name="l01279"></a>01279 <span class="keywordflow">for</span> initial_command <span class="keywordflow">in</span> callargs:
-<a name="l01280"></a>01280 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd.html#ac188a434c9c7d5c939e971a3d42c1c63">onecmd_plus_hooks</a>(initial_command + <span class="stringliteral">&#39;\n&#39;</span>):
-<a name="l01281"></a>01281 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a7a8e8257d7d35c7813355cdefb62b85b">_STOP_AND_EXIT</a>
-<a name="l01282"></a>01282
-<a name="l01283"></a><a class="code" href="classcmd2_1_1Cmd.html#a0e5f32e5ab972e32273ef5d69de81afc">01283</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd.html#a0e5f32e5ab972e32273ef5d69de81afc">cmdloop</a>(self):
-<a name="l01284"></a>01284 parser = optparse.OptionParser()
-<a name="l01285"></a>01285 parser.add_option(<span class="stringliteral">&#39;-t&#39;</span>, <span class="stringliteral">&#39;--test&#39;</span>, dest=<span class="stringliteral">&#39;test&#39;</span>,
-<a name="l01286"></a>01286 action=<span class="stringliteral">&quot;store_true&quot;</span>,
-<a name="l01287"></a>01287 help=<span class="stringliteral">&#39;Test against transcript(s) in FILE (wildcards OK)&#39;</span>)
-<a name="l01288"></a>01288 (callopts, callargs) = parser.parse_args()
-<a name="l01289"></a>01289 <span class="keywordflow">if</span> callopts.test:
-<a name="l01290"></a>01290 self.<a class="code" href="classcmd2_1_1Cmd.html#a160c7a080d222defe32c781138901d4e">runTranscriptTests</a>(callargs)
-<a name="l01291"></a>01291 <span class="keywordflow">else</span>:
-<a name="l01292"></a>01292 <span class="keywordflow">if</span> <span class="keywordflow">not</span> self.<a class="code" href="classcmd2_1_1Cmd.html#a19b932e21ac917375f16457c986ad4f6">run_commands_at_invocation</a>(callargs):
-<a name="l01293"></a>01293 self.<a class="code" href="classcmd2_1_1Cmd.html#a392c5cd062c20d916c0cacc9cc36c022">_cmdloop</a>()
-<a name="l01294"></a>01294
-<a name="l01295"></a><a class="code" href="classcmd2_1_1HistoryItem.html">01295</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1HistoryItem.html">HistoryItem</a>(str):
-<a name="l01296"></a><a class="code" href="classcmd2_1_1HistoryItem.html#ac496a3283d2754e61e156ddbf2370259">01296</a> listformat = <span class="stringliteral">&#39;-------------------------[%d]\n%s\n&#39;</span>
-<a name="l01297"></a><a class="code" href="classcmd2_1_1HistoryItem.html#a74c5f486309e86773802f72335ff4252">01297</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1HistoryItem.html#ab873a526e5978d15a16fddae74005471">__init__</a>(self, instr):
-<a name="l01298"></a>01298 str.__init__(self)
-<a name="l01299"></a>01299 self.<a class="code" href="classcmd2_1_1HistoryItem.html#a74c5f486309e86773802f72335ff4252">lowercase</a> = self.lower()
-<a name="l01300"></a>01300 self.<a class="code" href="classcmd2_1_1HistoryItem.html#a83243fbd9faac88d0fb2c13473029d12">idx</a> = <span class="keywordtype">None</span>
-<a name="l01301"></a><a class="code" href="classcmd2_1_1HistoryItem.html#af49dd31da48eafd74653503a69eae230">01301</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1HistoryItem.html#af49dd31da48eafd74653503a69eae230">pr</a>(self):
-<a name="l01302"></a>01302 <span class="keywordflow">return</span> self.<a class="code" href="classcmd2_1_1HistoryItem.html#ac496a3283d2754e61e156ddbf2370259">listformat</a> % (self.<a class="code" href="classcmd2_1_1HistoryItem.html#a83243fbd9faac88d0fb2c13473029d12">idx</a>, str(self))
-<a name="l01303"></a>01303
-<a name="l01304"></a><a class="code" href="classcmd2_1_1History.html">01304</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1History.html">History</a>(list):
-<a name="l01305"></a>01305 <span class="stringliteral">&#39;&#39;&#39;A list of HistoryItems that knows how to respond to user requests.</span>
-<a name="l01306"></a>01306 <span class="stringliteral"> &gt;&gt;&gt; h = History([HistoryItem(&#39;first&#39;), HistoryItem(&#39;second&#39;), HistoryItem(&#39;third&#39;), HistoryItem(&#39;fourth&#39;)])</span>
-<a name="l01307"></a>01307 <span class="stringliteral"> &gt;&gt;&gt; h.span(&#39;-2..&#39;)</span>
-<a name="l01308"></a>01308 <span class="stringliteral"> [&#39;third&#39;, &#39;fourth&#39;]</span>
-<a name="l01309"></a>01309 <span class="stringliteral"> &gt;&gt;&gt; h.span(&#39;2..3&#39;)</span>
-<a name="l01310"></a>01310 <span class="stringliteral"> [&#39;second&#39;, &#39;third&#39;]</span>
-<a name="l01311"></a>01311 <span class="stringliteral"> &gt;&gt;&gt; h.span(&#39;3&#39;)</span>
-<a name="l01312"></a>01312 <span class="stringliteral"> [&#39;third&#39;] </span>
-<a name="l01313"></a>01313 <span class="stringliteral"> &gt;&gt;&gt; h.span(&#39;:&#39;)</span>
-<a name="l01314"></a>01314 <span class="stringliteral"> [&#39;first&#39;, &#39;second&#39;, &#39;third&#39;, &#39;fourth&#39;]</span>
-<a name="l01315"></a>01315 <span class="stringliteral"> &gt;&gt;&gt; h.span(&#39;2..&#39;)</span>
-<a name="l01316"></a>01316 <span class="stringliteral"> [&#39;second&#39;, &#39;third&#39;, &#39;fourth&#39;]</span>
-<a name="l01317"></a>01317 <span class="stringliteral"> &gt;&gt;&gt; h.span(&#39;-1&#39;)</span>
-<a name="l01318"></a>01318 <span class="stringliteral"> [&#39;fourth&#39;] </span>
-<a name="l01319"></a>01319 <span class="stringliteral"> &gt;&gt;&gt; h.span(&#39;-2..-3&#39;)</span>
-<a name="l01320"></a>01320 <span class="stringliteral"> [&#39;third&#39;, &#39;second&#39;] </span>
-<a name="l01321"></a>01321 <span class="stringliteral"> &gt;&gt;&gt; h.search(&#39;o&#39;)</span>
-<a name="l01322"></a>01322 <span class="stringliteral"> [&#39;second&#39;, &#39;fourth&#39;]</span>
-<a name="l01323"></a>01323 <span class="stringliteral"> &gt;&gt;&gt; h.search(&#39;/IR/&#39;)</span>
-<a name="l01324"></a>01324 <span class="stringliteral"> [&#39;first&#39;, &#39;third&#39;]</span>
-<a name="l01325"></a>01325 <span class="stringliteral"> &#39;&#39;&#39;</span>
-<a name="l01326"></a><a class="code" href="classcmd2_1_1History.html#accd354b7c81e1cd538438b834630f3ac">01326</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1History.html#accd354b7c81e1cd538438b834630f3ac">zero_based_index</a>(self, onebased):
-<a name="l01327"></a>01327 result = onebased
-<a name="l01328"></a>01328 <span class="keywordflow">if</span> result &gt; 0:
-<a name="l01329"></a>01329 result -= 1
-<a name="l01330"></a>01330 <span class="keywordflow">return</span> result
-<a name="l01331"></a><a class="code" href="classcmd2_1_1History.html#a28fe5dc698da4c7bf82fdcdfb2e70506">01331</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1History.html#a28fe5dc698da4c7bf82fdcdfb2e70506">to_index</a>(self, raw):
-<a name="l01332"></a>01332 <span class="keywordflow">if</span> raw:
-<a name="l01333"></a>01333 result = self.<a class="code" href="classcmd2_1_1History.html#accd354b7c81e1cd538438b834630f3ac">zero_based_index</a>(int(raw))
-<a name="l01334"></a>01334 <span class="keywordflow">else</span>:
-<a name="l01335"></a>01335 result = <span class="keywordtype">None</span>
-<a name="l01336"></a>01336 <span class="keywordflow">return</span> result
-<a name="l01337"></a><a class="code" href="classcmd2_1_1History.html#ae1db5657367e6aa9b0e43811d5b8893f">01337</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1History.html#ae1db5657367e6aa9b0e43811d5b8893f">search</a>(self, target):
-<a name="l01338"></a>01338 target = target.strip()
-<a name="l01339"></a>01339 <span class="keywordflow">if</span> target[0] == target[-1] == <span class="stringliteral">&#39;/&#39;</span> <span class="keywordflow">and</span> len(target) &gt; 1:
-<a name="l01340"></a>01340 target = target[1:-1]
-<a name="l01341"></a>01341 <span class="keywordflow">else</span>:
-<a name="l01342"></a>01342 target = re.escape(target)
-<a name="l01343"></a>01343 pattern = re.compile(target, re.IGNORECASE)
-<a name="l01344"></a>01344 <span class="keywordflow">return</span> [s <span class="keywordflow">for</span> s <span class="keywordflow">in</span> self <span class="keywordflow">if</span> pattern.search(s)]
-<a name="l01345"></a><a class="code" href="classcmd2_1_1History.html#aa5204f159577beb16f07a8a9ada184ec">01345</a> spanpattern = re.compile(<span class="stringliteral">r&#39;^\s*(?P&lt;start&gt;\-?\d+)?\s*(?P&lt;separator&gt;:|(\.{2,}))?\s*(?P&lt;end&gt;\-?\d+)?\s*$&#39;</span>)
-<a name="l01346"></a><a class="code" href="classcmd2_1_1History.html#a8c0837240ac7747aa804ba9eebddab60">01346</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1History.html#a8c0837240ac7747aa804ba9eebddab60">span</a>(self, raw):
-<a name="l01347"></a>01347 <span class="keywordflow">if</span> raw.lower() <span class="keywordflow">in</span> (<span class="stringliteral">&#39;*&#39;</span>, <span class="stringliteral">&#39;-&#39;</span>, <span class="stringliteral">&#39;all&#39;</span>):
-<a name="l01348"></a>01348 raw = <span class="stringliteral">&#39;:&#39;</span>
-<a name="l01349"></a>01349 results = self.spanpattern.search(raw)
-<a name="l01350"></a>01350 <span class="keywordflow">if</span> <span class="keywordflow">not</span> results:
-<a name="l01351"></a>01351 <span class="keywordflow">raise</span> IndexError
-<a name="l01352"></a>01352 <span class="keywordflow">if</span> <span class="keywordflow">not</span> results.group(<span class="stringliteral">&#39;separator&#39;</span>):
-<a name="l01353"></a>01353 <span class="keywordflow">return</span> [self[self.<a class="code" href="classcmd2_1_1History.html#a28fe5dc698da4c7bf82fdcdfb2e70506">to_index</a>(results.group(<span class="stringliteral">&#39;start&#39;</span>))]]
-<a name="l01354"></a>01354 start = self.<a class="code" href="classcmd2_1_1History.html#a28fe5dc698da4c7bf82fdcdfb2e70506">to_index</a>(results.group(<span class="stringliteral">&#39;start&#39;</span>))
-<a name="l01355"></a>01355 end = self.<a class="code" href="classcmd2_1_1History.html#a28fe5dc698da4c7bf82fdcdfb2e70506">to_index</a>(results.group(<span class="stringliteral">&#39;end&#39;</span>))
-<a name="l01356"></a>01356 reverse = <span class="keyword">False</span>
-<a name="l01357"></a>01357 <span class="keywordflow">if</span> end <span class="keywordflow">is</span> <span class="keywordflow">not</span> <span class="keywordtype">None</span>:
-<a name="l01358"></a>01358 <span class="keywordflow">if</span> end &lt; start:
-<a name="l01359"></a>01359 (start, end) = (end, start)
-<a name="l01360"></a>01360 reverse = <span class="keyword">True</span>
-<a name="l01361"></a>01361 end += 1
-<a name="l01362"></a>01362 result = self[start:end]
-<a name="l01363"></a>01363 <span class="keywordflow">if</span> reverse:
-<a name="l01364"></a>01364 result.reverse()
-<a name="l01365"></a>01365 <span class="keywordflow">return</span> result
-<a name="l01366"></a>01366
-<a name="l01367"></a><a class="code" href="classcmd2_1_1History.html#a47db7cadf89510850e60e3c908a376f1">01367</a> rangePattern = re.compile(<span class="stringliteral">r&#39;^\s*(?P&lt;start&gt;[\d]+)?\s*\-\s*(?P&lt;end&gt;[\d]+)?\s*$&#39;</span>)
-<a name="l01368"></a><a class="code" href="classcmd2_1_1History.html#aef5a4f297a77df78cd0e6bb17b67fb16">01368</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1History.html#aef5a4f297a77df78cd0e6bb17b67fb16">append</a>(self, new):
-<a name="l01369"></a>01369 new = <a class="code" href="classcmd2_1_1HistoryItem.html">HistoryItem</a>(new)
-<a name="l01370"></a>01370 list.append(self, new)
-<a name="l01371"></a>01371 new.idx = len(self)
-<a name="l01372"></a><a class="code" href="classcmd2_1_1History.html#a1c036910ea442db79fe012715b29c9db">01372</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1History.html#a1c036910ea442db79fe012715b29c9db">extend</a>(self, new):
-<a name="l01373"></a>01373 <span class="keywordflow">for</span> n <span class="keywordflow">in</span> new:
-<a name="l01374"></a>01374 self.<a class="code" href="classcmd2_1_1History.html#aef5a4f297a77df78cd0e6bb17b67fb16">append</a>(n)
-<a name="l01375"></a>01375
-<a name="l01376"></a><a class="code" href="classcmd2_1_1History.html#a030faac02c0b814fc676d21d8c5e049c">01376</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1History.html#a030faac02c0b814fc676d21d8c5e049c">get</a>(self, getme=None, fromEnd=False):
-<a name="l01377"></a>01377 <span class="keywordflow">if</span> <span class="keywordflow">not</span> getme:
-<a name="l01378"></a>01378 <span class="keywordflow">return</span> self
-<a name="l01379"></a>01379 <span class="keywordflow">try</span>:
-<a name="l01380"></a>01380 getme = int(getme)
-<a name="l01381"></a>01381 <span class="keywordflow">if</span> getme &lt; 0:
-<a name="l01382"></a>01382 <span class="keywordflow">return</span> self[:(-1 * getme)]
-<a name="l01383"></a>01383 <span class="keywordflow">else</span>:
-<a name="l01384"></a>01384 <span class="keywordflow">return</span> [self[getme-1]]
-<a name="l01385"></a>01385 <span class="keywordflow">except</span> IndexError:
-<a name="l01386"></a>01386 <span class="keywordflow">return</span> []
-<a name="l01387"></a>01387 <span class="keywordflow">except</span> ValueError:
-<a name="l01388"></a>01388 rangeResult = self.rangePattern.search(getme)
-<a name="l01389"></a>01389 <span class="keywordflow">if</span> rangeResult:
-<a name="l01390"></a>01390 start = rangeResult.group(<span class="stringliteral">&#39;start&#39;</span>) <span class="keywordflow">or</span> <span class="keywordtype">None</span>
-<a name="l01391"></a>01391 end = rangeResult.group(<span class="stringliteral">&#39;start&#39;</span>) <span class="keywordflow">or</span> <span class="keywordtype">None</span>
-<a name="l01392"></a>01392 <span class="keywordflow">if</span> start:
-<a name="l01393"></a>01393 start = int(start) - 1
-<a name="l01394"></a>01394 <span class="keywordflow">if</span> end:
-<a name="l01395"></a>01395 end = int(end)
-<a name="l01396"></a>01396 <span class="keywordflow">return</span> self[start:end]
-<a name="l01397"></a>01397
-<a name="l01398"></a>01398 getme = getme.strip()
-<a name="l01399"></a>01399
-<a name="l01400"></a>01400 <span class="keywordflow">if</span> getme.startswith(<span class="stringliteral">r&#39;/&#39;</span>) <span class="keywordflow">and</span> getme.endswith(<span class="stringliteral">r&#39;/&#39;</span>):
-<a name="l01401"></a>01401 finder = re.compile(getme[1:-1], re.DOTALL | re.MULTILINE | re.IGNORECASE)
-<a name="l01402"></a>01402 <span class="keyword">def </span>isin(hi):
-<a name="l01403"></a>01403 <span class="keywordflow">return</span> finder.search(hi)
-<a name="l01404"></a>01404 <span class="keywordflow">else</span>:
-<a name="l01405"></a>01405 <span class="keyword">def </span>isin(hi):
-<a name="l01406"></a>01406 <span class="keywordflow">return</span> (getme.lower() <span class="keywordflow">in</span> hi.lowercase)
-<a name="l01407"></a>01407 <span class="keywordflow">return</span> [itm <span class="keywordflow">for</span> itm <span class="keywordflow">in</span> self <span class="keywordflow">if</span> isin(itm)]
-<a name="l01408"></a>01408
-<a name="l01409"></a><a class="code" href="classcmd2_1_1NotSettableError.html">01409</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1NotSettableError.html">NotSettableError</a>(Exception):
-<a name="l01410"></a>01410 <span class="keywordflow">pass</span>
-<a name="l01411"></a>01411
-<a name="l01412"></a><a class="code" href="namespacecmd2.html#a0880940558f324b3958aedfc430f592d">01412</a> <span class="keyword">def </span><a class="code" href="namespacecmd2.html#a0880940558f324b3958aedfc430f592d">cast</a>(current, new):
-<a name="l01413"></a>01413 <span class="stringliteral">&quot;&quot;&quot;Tries to force a new value into the same type as the current.&quot;&quot;&quot;</span>
-<a name="l01414"></a>01414 typ = type(current)
-<a name="l01415"></a>01415 <span class="keywordflow">if</span> typ == bool:
-<a name="l01416"></a>01416 <span class="keywordflow">try</span>:
-<a name="l01417"></a>01417 <span class="keywordflow">return</span> bool(int(new))
-<a name="l01418"></a>01418 <span class="keywordflow">except</span> (ValueError, TypeError):
-<a name="l01419"></a>01419 <span class="keywordflow">pass</span>
-<a name="l01420"></a>01420 <span class="keywordflow">try</span>:
-<a name="l01421"></a>01421 new = new.lower()
-<a name="l01422"></a>01422 <span class="keywordflow">except</span>:
-<a name="l01423"></a>01423 <span class="keywordflow">pass</span>
-<a name="l01424"></a>01424 <span class="keywordflow">if</span> (new==<span class="stringliteral">&#39;on&#39;</span>) <span class="keywordflow">or</span> (new[0] <span class="keywordflow">in</span> (<span class="stringliteral">&#39;y&#39;</span>,<span class="stringliteral">&#39;t&#39;</span>)):
-<a name="l01425"></a>01425 <span class="keywordflow">return</span> <span class="keyword">True</span>
-<a name="l01426"></a>01426 <span class="keywordflow">if</span> (new==<span class="stringliteral">&#39;off&#39;</span>) <span class="keywordflow">or</span> (new[0] <span class="keywordflow">in</span> (<span class="stringliteral">&#39;n&#39;</span>,<span class="stringliteral">&#39;f&#39;</span>)):
-<a name="l01427"></a>01427 <span class="keywordflow">return</span> <span class="keyword">False</span>
-<a name="l01428"></a>01428 <span class="keywordflow">else</span>:
-<a name="l01429"></a>01429 <span class="keywordflow">try</span>:
-<a name="l01430"></a>01430 <span class="keywordflow">return</span> typ(new)
-<a name="l01431"></a>01431 <span class="keywordflow">except</span>:
-<a name="l01432"></a>01432 <span class="keywordflow">pass</span>
-<a name="l01433"></a>01433 <span class="keywordflow">print</span> (<span class="stringliteral">&quot;Problem setting parameter (now %s) to %s; incorrect type?&quot;</span> % (current, new))
-<a name="l01434"></a>01434 <span class="keywordflow">return</span> current
-<a name="l01435"></a>01435
-<a name="l01436"></a><a class="code" href="classcmd2_1_1Statekeeper.html">01436</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1Statekeeper.html">Statekeeper</a>(object):
-<a name="l01437"></a><a class="code" href="classcmd2_1_1Statekeeper.html#a84a5071e786e0dff91a413e3fd0470c1">01437</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Statekeeper.html#a3550a0316a7f911d7b13da87844ee882">__init__</a>(self, obj, attribs):
-<a name="l01438"></a>01438 self.<a class="code" href="classcmd2_1_1Statekeeper.html#a84a5071e786e0dff91a413e3fd0470c1">obj</a> = obj
-<a name="l01439"></a>01439 self.<a class="code" href="classcmd2_1_1Statekeeper.html#a18466d6cef3f084e92f086a86d4a7244">attribs</a> = attribs
-<a name="l01440"></a>01440 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Statekeeper.html#a84a5071e786e0dff91a413e3fd0470c1">obj</a>:
-<a name="l01441"></a>01441 self.<a class="code" href="classcmd2_1_1Statekeeper.html#a848245f65d18fddf4bb768bd3f911b30">save</a>()
-<a name="l01442"></a><a class="code" href="classcmd2_1_1Statekeeper.html#a848245f65d18fddf4bb768bd3f911b30">01442</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Statekeeper.html#a848245f65d18fddf4bb768bd3f911b30">save</a>(self):
-<a name="l01443"></a>01443 <span class="keywordflow">for</span> attrib <span class="keywordflow">in</span> self.<a class="code" href="classcmd2_1_1Statekeeper.html#a18466d6cef3f084e92f086a86d4a7244">attribs</a>:
-<a name="l01444"></a>01444 setattr(self, attrib, getattr(self.<a class="code" href="classcmd2_1_1Statekeeper.html#a84a5071e786e0dff91a413e3fd0470c1">obj</a>, attrib))
-<a name="l01445"></a><a class="code" href="classcmd2_1_1Statekeeper.html#a00e6cfdbe169bcb76db888b9d0beff03">01445</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Statekeeper.html#a00e6cfdbe169bcb76db888b9d0beff03">restore</a>(self):
-<a name="l01446"></a>01446 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Statekeeper.html#a84a5071e786e0dff91a413e3fd0470c1">obj</a>:
-<a name="l01447"></a>01447 <span class="keywordflow">for</span> attrib <span class="keywordflow">in</span> self.<a class="code" href="classcmd2_1_1Statekeeper.html#a18466d6cef3f084e92f086a86d4a7244">attribs</a>:
-<a name="l01448"></a>01448 setattr(self.<a class="code" href="classcmd2_1_1Statekeeper.html#a84a5071e786e0dff91a413e3fd0470c1">obj</a>, attrib, getattr(self, attrib))
-<a name="l01449"></a>01449
-<a name="l01450"></a><a class="code" href="classcmd2_1_1Borg.html">01450</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1Borg.html">Borg</a>(object):
-<a name="l01451"></a>01451 <span class="stringliteral">&#39;&#39;&#39;All instances of any Borg subclass will share state.</span>
-<a name="l01452"></a>01452 <span class="stringliteral"> from Python Cookbook, 2nd Ed., recipe 6.16&#39;&#39;&#39;</span>
-<a name="l01453"></a><a class="code" href="classcmd2_1_1Borg.html#a3af75c745a5c124376fa050b4d1c3912">01453</a> _shared_state = {}
-<a name="l01454"></a><a class="code" href="classcmd2_1_1Borg.html#addff1031aaf78f5e1dc5ff0c6dba5137">01454</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Borg.html#addff1031aaf78f5e1dc5ff0c6dba5137">__new__</a>(cls, *a, **k):
-<a name="l01455"></a>01455 obj = object.__new__(cls, *a, **k)
-<a name="l01456"></a>01456 obj.__dict__ = cls._shared_state
-<a name="l01457"></a>01457 <span class="keywordflow">return</span> obj
-<a name="l01458"></a>01458
-<a name="l01459"></a><a class="code" href="classcmd2_1_1OutputTrap.html">01459</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1OutputTrap.html">OutputTrap</a>(<a class="code" href="classcmd2_1_1Borg.html">Borg</a>):
-<a name="l01460"></a>01460 <span class="stringliteral">&#39;&#39;&#39;Instantiate an OutputTrap to divert/capture ALL stdout output. For use in unit testing.</span>
-<a name="l01461"></a>01461 <span class="stringliteral"> Call `tearDown()` to return to normal output.&#39;&#39;&#39;</span>
-<a name="l01462"></a><a class="code" href="classcmd2_1_1OutputTrap.html#ac7a0b848dc18c74b089bc0d4044996de">01462</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1OutputTrap.html#a0dc45d536432b07d7ec32da5755b5c85">__init__</a>(self):
-<a name="l01463"></a>01463 self.<a class="code" href="classcmd2_1_1OutputTrap.html#a9117a6d5bfa07f1eeade54f24eeba0ed">contents</a> = <span class="stringliteral">&#39;&#39;</span>
-<a name="l01464"></a>01464 self.<a class="code" href="classcmd2_1_1OutputTrap.html#ac7a0b848dc18c74b089bc0d4044996de">old_stdout</a> = sys.stdout
-<a name="l01465"></a>01465 sys.stdout = self
-<a name="l01466"></a><a class="code" href="classcmd2_1_1OutputTrap.html#aa3bec468fdc0d248cd43cb8e8e0d96cd">01466</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1OutputTrap.html#aa3bec468fdc0d248cd43cb8e8e0d96cd">write</a>(self, txt):
-<a name="l01467"></a>01467 self.<a class="code" href="classcmd2_1_1OutputTrap.html#a9117a6d5bfa07f1eeade54f24eeba0ed">contents</a> += txt
-<a name="l01468"></a><a class="code" href="classcmd2_1_1OutputTrap.html#a492ceb8dfb3f6e90bf095a710ab56ad1">01468</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1OutputTrap.html#a492ceb8dfb3f6e90bf095a710ab56ad1">read</a>(self):
-<a name="l01469"></a>01469 result = self.<a class="code" href="classcmd2_1_1OutputTrap.html#a9117a6d5bfa07f1eeade54f24eeba0ed">contents</a>
-<a name="l01470"></a>01470 self.<a class="code" href="classcmd2_1_1OutputTrap.html#a9117a6d5bfa07f1eeade54f24eeba0ed">contents</a> = <span class="stringliteral">&#39;&#39;</span>
-<a name="l01471"></a>01471 <span class="keywordflow">return</span> result
-<a name="l01472"></a><a class="code" href="classcmd2_1_1OutputTrap.html#a06961b49c3e19e9984f077a08b3a75f2">01472</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1OutputTrap.html#a06961b49c3e19e9984f077a08b3a75f2">tearDown</a>(self):
-<a name="l01473"></a>01473 sys.stdout = self.<a class="code" href="classcmd2_1_1OutputTrap.html#ac7a0b848dc18c74b089bc0d4044996de">old_stdout</a>
-<a name="l01474"></a>01474 self.<a class="code" href="classcmd2_1_1OutputTrap.html#a9117a6d5bfa07f1eeade54f24eeba0ed">contents</a> = <span class="stringliteral">&#39;&#39;</span>
-<a name="l01475"></a>01475
-<a name="l01476"></a><a class="code" href="classcmd2_1_1Cmd2TestCase.html">01476</a> <span class="keyword">class </span><a class="code" href="classcmd2_1_1Cmd2TestCase.html">Cmd2TestCase</a>(unittest.TestCase):
-<a name="l01477"></a>01477 <span class="stringliteral">&#39;&#39;&#39;Subclass this, setting CmdApp, to make a unittest.TestCase class</span>
-<a name="l01478"></a>01478 <span class="stringliteral"> that will execute the commands in a transcript file and expect the results shown.</span>
-<a name="l01479"></a>01479 <span class="stringliteral"> See example.py&#39;&#39;&#39;</span>
-<a name="l01480"></a><a class="code" href="classcmd2_1_1Cmd2TestCase.html#ae3ce50557636abee00a3941461dd450c">01480</a> CmdApp = <span class="keywordtype">None</span>
-<a name="l01481"></a><a class="code" href="classcmd2_1_1Cmd2TestCase.html#ad319aa2e1874f60202610e5b8de33dbb">01481</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd2TestCase.html#ad82fc3489ffaf8ae227e7b122df389e0">fetchTranscripts</a>(self):
-<a name="l01482"></a>01482 self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#ad319aa2e1874f60202610e5b8de33dbb">transcripts</a> = {}
-<a name="l01483"></a>01483 <span class="keywordflow">for</span> fileset <span class="keywordflow">in</span> self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#ae3ce50557636abee00a3941461dd450c">CmdApp</a>.testfiles:
-<a name="l01484"></a>01484 <span class="keywordflow">for</span> fname <span class="keywordflow">in</span> glob.glob(fileset):
-<a name="l01485"></a>01485 tfile = open(fname)
-<a name="l01486"></a>01486 self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#ad319aa2e1874f60202610e5b8de33dbb">transcripts</a>[fname] = iter(tfile.readlines())
-<a name="l01487"></a>01487 tfile.close()
-<a name="l01488"></a>01488 <span class="keywordflow">if</span> <span class="keywordflow">not</span> len(self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#ad319aa2e1874f60202610e5b8de33dbb">transcripts</a>):
-<a name="l01489"></a>01489 <span class="keywordflow">raise</span> (StandardError,), <span class="stringliteral">&quot;No test files found - nothing to test.&quot;</span>
-<a name="l01490"></a><a class="code" href="classcmd2_1_1Cmd2TestCase.html#a5892c02ac5ee5a25c47bbfa1c648647b">01490</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd2TestCase.html#a5892c02ac5ee5a25c47bbfa1c648647b">setUp</a>(self):
-<a name="l01491"></a>01491 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#ae3ce50557636abee00a3941461dd450c">CmdApp</a>:
-<a name="l01492"></a>01492 self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#adeb5a7b735ad3b7f23a3c44d15ad283e">outputTrap</a> = <a class="code" href="classcmd2_1_1OutputTrap.html">OutputTrap</a>()
-<a name="l01493"></a>01493 self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#acc7fc3df4fb04682fd1e4b2c4cc4cd3c">cmdapp</a> = self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#ae3ce50557636abee00a3941461dd450c">CmdApp</a>()
-<a name="l01494"></a>01494 self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#ad82fc3489ffaf8ae227e7b122df389e0">fetchTranscripts</a>()
-<a name="l01495"></a><a class="code" href="classcmd2_1_1Cmd2TestCase.html#acc8585a2192f48e04a8eafd63348c590">01495</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd2TestCase.html#acc8585a2192f48e04a8eafd63348c590">runTest</a>(self): <span class="comment"># was testall</span>
-<a name="l01496"></a>01496 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#ae3ce50557636abee00a3941461dd450c">CmdApp</a>:
-<a name="l01497"></a>01497 its = sorted(self.transcripts.items())
-<a name="l01498"></a>01498 <span class="keywordflow">for</span> (fname, transcript) <span class="keywordflow">in</span> its:
-<a name="l01499"></a>01499 self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#aaad687718f366338a76f83cb6547a258">_test_transcript</a>(fname, transcript)
-<a name="l01500"></a><a class="code" href="classcmd2_1_1Cmd2TestCase.html#aa85409ff40b934d96ca1b3d3ff9e897d">01500</a> regexPattern = pyparsing.QuotedString(quoteChar=<span class="stringliteral">r&#39;/&#39;</span>, escChar=<span class="stringliteral">&#39;\\&#39;</span>, multiline=<span class="keyword">True</span>, unquoteResults=<span class="keyword">True</span>)
-<a name="l01501"></a>01501 regexPattern.ignore(pyparsing.cStyleComment)
-<a name="l01502"></a><a class="code" href="classcmd2_1_1Cmd2TestCase.html#a29b62f02c603b82014102babccd0c40e">01502</a> notRegexPattern = pyparsing.Word(pyparsing.printables)
-<a name="l01503"></a>01503 notRegexPattern.setParseAction(<span class="keyword">lambda</span> t: re.escape(t[0]))
-<a name="l01504"></a><a class="code" href="classcmd2_1_1Cmd2TestCase.html#af9574fde56ba05bc1532a6a028fb566d">01504</a> expectationParser = regexPattern | notRegexPattern
-<a name="l01505"></a><a class="code" href="classcmd2_1_1Cmd2TestCase.html#a946827bef7050042cee99d3749c976d0">01505</a> anyWhitespace = re.compile(<span class="stringliteral">r&#39;\s&#39;</span>, re.DOTALL | re.MULTILINE)
-<a name="l01506"></a><a class="code" href="classcmd2_1_1Cmd2TestCase.html#aaad687718f366338a76f83cb6547a258">01506</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd2TestCase.html#aaad687718f366338a76f83cb6547a258">_test_transcript</a>(self, fname, transcript):
-<a name="l01507"></a>01507 lineNum = 0
-<a name="l01508"></a>01508 finished = <span class="keyword">False</span>
-<a name="l01509"></a>01509 line = transcript.next()
-<a name="l01510"></a>01510 lineNum += 1
-<a name="l01511"></a>01511 tests_run = 0
-<a name="l01512"></a>01512 <span class="keywordflow">while</span> <span class="keywordflow">not</span> finished:
-<a name="l01513"></a>01513 <span class="comment"># Scroll forward to where actual commands begin</span>
-<a name="l01514"></a>01514 <span class="keywordflow">while</span> <span class="keywordflow">not</span> line.startswith(self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#acc7fc3df4fb04682fd1e4b2c4cc4cd3c">cmdapp</a>.prompt):
-<a name="l01515"></a>01515 <span class="keywordflow">try</span>:
-<a name="l01516"></a>01516 line = transcript.next()
-<a name="l01517"></a>01517 <span class="keywordflow">except</span> StopIteration:
-<a name="l01518"></a>01518 finished = <span class="keyword">True</span>
-<a name="l01519"></a>01519 <span class="keywordflow">break</span>
-<a name="l01520"></a>01520 lineNum += 1
-<a name="l01521"></a>01521 command = [line[len(self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#acc7fc3df4fb04682fd1e4b2c4cc4cd3c">cmdapp</a>.prompt):]]
-<a name="l01522"></a>01522 line = transcript.next()
-<a name="l01523"></a>01523 <span class="comment"># Read the entirety of a multi-line command</span>
-<a name="l01524"></a>01524 <span class="keywordflow">while</span> line.startswith(self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#acc7fc3df4fb04682fd1e4b2c4cc4cd3c">cmdapp</a>.continuation_prompt):
-<a name="l01525"></a>01525 command.append(line[len(self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#acc7fc3df4fb04682fd1e4b2c4cc4cd3c">cmdapp</a>.continuation_prompt):])
-<a name="l01526"></a>01526 <span class="keywordflow">try</span>:
-<a name="l01527"></a>01527 line = transcript.next()
-<a name="l01528"></a>01528 <span class="keywordflow">except</span> StopIteration:
-<a name="l01529"></a>01529 <span class="keywordflow">raise</span> (StopIteration,
-<a name="l01530"></a>01530 <span class="stringliteral">&#39;Transcript broke off while reading command beginning at line %d with\n%s&#39;</span>
-<a name="l01531"></a>01531 % (command[0]))
-<a name="l01532"></a>01532 lineNum += 1
-<a name="l01533"></a>01533 command = <span class="stringliteral">&#39;&#39;</span>.join(command)
-<a name="l01534"></a>01534 <span class="comment"># Send the command into the application and capture the resulting output</span>
-<a name="l01535"></a>01535 stop = self.cmdapp.onecmd_plus_hooks(command)
-<a name="l01536"></a>01536 <span class="comment">#TODO: should act on ``stop``</span>
-<a name="l01537"></a>01537 result = self.outputTrap.read()
-<a name="l01538"></a>01538 <span class="comment"># Read the expected result from transcript</span>
-<a name="l01539"></a>01539 <span class="keywordflow">if</span> line.startswith(self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#acc7fc3df4fb04682fd1e4b2c4cc4cd3c">cmdapp</a>.prompt):
-<a name="l01540"></a>01540 message = <span class="stringliteral">&#39;\nFile %s, line %d\nCommand was:\n%s\nExpected: (nothing)\nGot:\n%s\n&#39;</span>%\
-<a name="l01541"></a>01541 (fname, lineNum, command, result)
-<a name="l01542"></a>01542 self.assert_(not(result.strip()), message)
-<a name="l01543"></a>01543 <span class="keywordflow">continue</span>
-<a name="l01544"></a>01544 expected = []
-<a name="l01545"></a>01545 <span class="keywordflow">while</span> <span class="keywordflow">not</span> line.startswith(self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#acc7fc3df4fb04682fd1e4b2c4cc4cd3c">cmdapp</a>.prompt):
-<a name="l01546"></a>01546 expected.append(line)
-<a name="l01547"></a>01547 <span class="keywordflow">try</span>:
-<a name="l01548"></a>01548 line = transcript.next()
-<a name="l01549"></a>01549 <span class="keywordflow">except</span> StopIteration:
-<a name="l01550"></a>01550 finished = <span class="keyword">True</span>
-<a name="l01551"></a>01551 <span class="keywordflow">break</span>
-<a name="l01552"></a>01552 lineNum += 1
-<a name="l01553"></a>01553 expected = <span class="stringliteral">&#39;&#39;</span>.join(expected)
-<a name="l01554"></a>01554 <span class="comment"># Compare actual result to expected</span>
-<a name="l01555"></a>01555 message = <span class="stringliteral">&#39;\nFile %s, line %d\nCommand was:\n%s\nExpected:\n%s\nGot:\n%s\n&#39;</span>%\
-<a name="l01556"></a>01556 (fname, lineNum, command, expected, result)
-<a name="l01557"></a>01557 expected = self.expectationParser.transformString(expected)
-<a name="l01558"></a>01558 <span class="comment"># checking whitespace is a pain - let&#39;s skip it</span>
-<a name="l01559"></a>01559 expected = self.anyWhitespace.sub(<span class="stringliteral">&#39;&#39;</span>, expected)
-<a name="l01560"></a>01560 result = self.anyWhitespace.sub(<span class="stringliteral">&#39;&#39;</span>, result)
-<a name="l01561"></a>01561 self.assert_(re.match(expected, result, re.MULTILINE | re.DOTALL), message)
-<a name="l01562"></a>01562
-<a name="l01563"></a><a class="code" href="classcmd2_1_1Cmd2TestCase.html#a12a9839011a264bf817e646114523052">01563</a> <span class="keyword">def </span><a class="code" href="classcmd2_1_1Cmd2TestCase.html#a12a9839011a264bf817e646114523052">tearDown</a>(self):
-<a name="l01564"></a>01564 <span class="keywordflow">if</span> self.<a class="code" href="classcmd2_1_1Cmd2TestCase.html#ae3ce50557636abee00a3941461dd450c">CmdApp</a>:
-<a name="l01565"></a>01565 self.outputTrap.tearDown()
-<a name="l01566"></a>01566
-<a name="l01567"></a>01567 <span class="keywordflow">if</span> __name__ == <span class="stringliteral">&#39;__main__&#39;</span>:
-<a name="l01568"></a>01568 doctest.testmod(optionflags = doctest.NORMALIZE_WHITESPACE)
-<a name="l01569"></a>01569
-<a name="l01570"></a>01570 <span class="stringliteral">&#39;&#39;&#39;</span>
-<a name="l01571"></a>01571 <span class="stringliteral">To make your application transcript-testable, replace </span>
-<a name="l01572"></a>01572 <span class="stringliteral"></span>
-<a name="l01573"></a>01573 <span class="stringliteral">::</span>
-<a name="l01574"></a>01574 <span class="stringliteral"></span>
-<a name="l01575"></a>01575 <span class="stringliteral"> app = MyApp()</span>
-<a name="l01576"></a>01576 <span class="stringliteral"> app.cmdloop()</span>
-<a name="l01577"></a>01577 <span class="stringliteral"> </span>
-<a name="l01578"></a>01578 <span class="stringliteral">with</span>
-<a name="l01579"></a>01579 <span class="stringliteral"></span>
-<a name="l01580"></a>01580 <span class="stringliteral">::</span>
-<a name="l01581"></a>01581 <span class="stringliteral"></span>
-<a name="l01582"></a>01582 <span class="stringliteral"> app = MyApp()</span>
-<a name="l01583"></a>01583 <span class="stringliteral"> cmd2.run(app)</span>
-<a name="l01584"></a>01584 <span class="stringliteral"> </span>
-<a name="l01585"></a>01585 <span class="stringliteral">Then run a session of your application and paste the entire screen contents</span>
-<a name="l01586"></a>01586 <span class="stringliteral">into a file, ``transcript.test``, and invoke the test like::</span>
-<a name="l01587"></a>01587 <span class="stringliteral"></span>
-<a name="l01588"></a>01588 <span class="stringliteral"> python myapp.py --test transcript.test</span>
-<a name="l01589"></a>01589 <span class="stringliteral"></span>
-<a name="l01590"></a>01590 <span class="stringliteral">Wildcards can be used to test against multiple transcript files.</span>
-<a name="l01591"></a>01591 <span class="stringliteral">&#39;&#39;&#39;</span>
-<a name="l01592"></a>01592
-<a name="l01593"></a>01593
-</pre></div></div>
-</div>
- <div id="nav-path" class="navpath">
- <ul>
- <li class="navelem"><a class="el" href="cmd2_8py.html">cmd2.py</a> </li>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a></div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-
- <li class="footer">Generated on Fri Sep 9 2011 10:50:47 for Cmd2 by
- <a href="http://www.doxygen.org/index.html">
- <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.5.1 </li>
- </ul>
- </div>
-
-
-</body>
-</html>