mirror of
https://github.com/evennia/evennia.git
synced 2026-03-31 04:57:16 +02:00
1289 lines
No EOL
171 KiB
HTML
1289 lines
No EOL
171 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>evennia.utils.eveditor — Evennia 1.0-dev documentation</title>
|
|
<link rel="stylesheet" href="../../../_static/nature.css" type="text/css" />
|
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
|
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
|
<script src="../../../_static/jquery.js"></script>
|
|
<script src="../../../_static/underscore.js"></script>
|
|
<script src="../../../_static/doctools.js"></script>
|
|
<script src="../../../_static/language_data.js"></script>
|
|
<link rel="shortcut icon" href="../../../_static/favicon.ico"/>
|
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../../search.html" />
|
|
</head><body>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.utils.eveditor</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for evennia.utils.eveditor</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">EvEditor (Evennia Line Editor)</span>
|
|
|
|
<span class="sd">This implements an advanced line editor for editing longer texts in-game. The</span>
|
|
<span class="sd">editor mimics the command mechanisms of the "VI" editor (a famous line-by-line</span>
|
|
<span class="sd">editor) as far as reasonable.</span>
|
|
|
|
<span class="sd">Features of the editor:</span>
|
|
|
|
<span class="sd">- undo/redo.</span>
|
|
<span class="sd">- edit/replace on any line of the buffer.</span>
|
|
<span class="sd">- search&replace text anywhere in buffer.</span>
|
|
<span class="sd">- formatting of buffer, or selection, to certain width + indentations.</span>
|
|
<span class="sd">- allow to echo the input or not, depending on your client.</span>
|
|
<span class="sd">- in-built help</span>
|
|
|
|
<span class="sd">To use the editor, just import EvEditor from this module and initialize it:</span>
|
|
|
|
<span class="sd">```python</span>
|
|
<span class="sd">from evennia.utils.eveditor import EvEditor</span>
|
|
|
|
<span class="sd"># set up an editor to edit the caller's 'desc' Attribute</span>
|
|
<span class="sd">def _loadfunc(caller):</span>
|
|
<span class="sd"> return caller.db.desc</span>
|
|
|
|
<span class="sd">def _savefunc(caller, buffer):</span>
|
|
<span class="sd"> caller.db.desc = buffer.strip()</span>
|
|
<span class="sd"> return True</span>
|
|
|
|
<span class="sd">def _quitfunc(caller):</span>
|
|
<span class="sd"> caller.msg("Custom quit message")</span>
|
|
|
|
<span class="sd"># start the editor</span>
|
|
<span class="sd">EvEditor(caller, loadfunc=None, savefunc=None, quitfunc=None, key="",</span>
|
|
<span class="sd"> persistent=True, code=False)</span>
|
|
<span class="sd">```</span>
|
|
|
|
<span class="sd">The editor can also be used to format Python code and be made to</span>
|
|
<span class="sd">survive a reload. See the `EvEditor` class for more details.</span>
|
|
|
|
<span class="sd">"""</span>
|
|
<span class="kn">import</span> <span class="nn">re</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
|
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">CmdSet</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">is_iter</span><span class="p">,</span> <span class="n">fill</span><span class="p">,</span> <span class="n">dedent</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">justify</span><span class="p">,</span> <span class="n">to_str</span><span class="p">,</span> <span class="n">utils</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">raw</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdhandler</span>
|
|
<span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
|
|
|
|
<span class="c1"># we use cmdhandler instead of evennia.syscmdkeys to</span>
|
|
<span class="c1"># avoid some cases of loading before evennia init'd</span>
|
|
<span class="n">_CMD_NOMATCH</span> <span class="o">=</span> <span class="n">cmdhandler</span><span class="o">.</span><span class="n">CMD_NOMATCH</span>
|
|
<span class="n">_CMD_NOINPUT</span> <span class="o">=</span> <span class="n">cmdhandler</span><span class="o">.</span><span class="n">CMD_NOINPUT</span>
|
|
|
|
<span class="n">_RE_GROUP</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"</span><span class="se">\"</span><span class="s2">.*?</span><span class="se">\"</span><span class="s2">|\'.*?\'|\S*"</span><span class="p">)</span>
|
|
<span class="n">_COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">class_from_module</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">)</span>
|
|
<span class="c1"># use NAWS in the future?</span>
|
|
<span class="n">_DEFAULT_WIDTH</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_WIDTH</span>
|
|
|
|
<span class="c1"># -------------------------------------------------------------</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># texts</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># -------------------------------------------------------------</span>
|
|
|
|
<span class="n">_HELP_TEXT</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> <txt> - any non-command is appended to the end of the buffer.</span>
|
|
<span class="sd"> : <l> - view buffer or only line(s) <l></span>
|
|
<span class="sd"> :: <l> - raw-view buffer or only line(s) <l></span>
|
|
<span class="sd"> ::: - escape - enter ':' as the only character on the line.</span>
|
|
<span class="sd"> :h - this help.</span>
|
|
|
|
<span class="sd"> :w - save the buffer (don't quit)</span>
|
|
<span class="sd"> :wq - save buffer and quit</span>
|
|
<span class="sd"> :q - quit (will be asked to save if buffer was changed)</span>
|
|
<span class="sd"> :q! - quit without saving, no questions asked</span>
|
|
|
|
<span class="sd"> :u - (undo) step backwards in undo history</span>
|
|
<span class="sd"> :uu - (redo) step forward in undo history</span>
|
|
<span class="sd"> :UU - reset all changes back to initial state</span>
|
|
|
|
<span class="sd"> :dd <l> - delete last line or line(s) <l></span>
|
|
<span class="sd"> :dw <l> <w> - delete word or regex <w> in entire buffer or on line <l></span>
|
|
<span class="sd"> :DD - clear entire buffer</span>
|
|
|
|
<span class="sd"> :y <l> - yank (copy) line(s) <l> to the copy buffer</span>
|
|
<span class="sd"> :x <l> - cut line(s) <l> and store it in the copy buffer</span>
|
|
<span class="sd"> :p <l> - put (paste) previously copied line(s) directly after <l></span>
|
|
<span class="sd"> :i <l> <txt> - insert new text <txt> at line <l>. Old line will move down</span>
|
|
<span class="sd"> :r <l> <txt> - replace line <l> with text <txt></span>
|
|
<span class="sd"> :I <l> <txt> - insert text at the beginning of line <l></span>
|
|
<span class="sd"> :A <l> <txt> - append text after the end of line <l></span>
|
|
|
|
<span class="sd"> :s <l> <w> <txt> - search/replace word or regex <w> in buffer or on line <l></span>
|
|
|
|
<span class="sd"> :j <l> <w> - justify buffer or line <l>. <w> is f, c, l or r. Default f (full)</span>
|
|
<span class="sd"> :f <l> - flood-fill entire buffer or line <l>: Equivalent to :j left</span>
|
|
<span class="sd"> :fi <l> - indent entire buffer or line <l></span>
|
|
<span class="sd"> :fd <l> - de-indent entire buffer or line <l></span>
|
|
|
|
<span class="sd"> :echo - turn echoing of the input on/off (helpful for some clients)</span>
|
|
<span class="sd">"""</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">_HELP_LEGEND</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Legend:</span>
|
|
<span class="sd"> <l> - line number, like '5' or range, like '3:7'.</span>
|
|
<span class="sd"> <w> - a single word, or multiple words with quotes around them.</span>
|
|
<span class="sd"> <txt> - longer string, usually not needing quotes.</span>
|
|
<span class="sd">"""</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">_HELP_CODE</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> :! - Execute code buffer without saving</span>
|
|
<span class="sd"> :< - Decrease the level of automatic indentation for the next lines</span>
|
|
<span class="sd"> :> - Increase the level of automatic indentation for the next lines</span>
|
|
<span class="sd"> := - Switch automatic indentation on/off</span>
|
|
<span class="sd">"""</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">_ERROR_LOADFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd">{error}</span>
|
|
|
|
<span class="sd">|rBuffer load function error. Could not load initial data.|n</span>
|
|
<span class="sd">"""</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">_ERROR_SAVEFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd">{error}</span>
|
|
|
|
<span class="sd">|rSave function returned an error. Buffer not saved.|n</span>
|
|
<span class="sd">"""</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">_ERROR_NO_SAVEFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">"|rNo save function defined. Buffer cannot be saved.|n"</span><span class="p">)</span>
|
|
|
|
<span class="n">_MSG_SAVE_NO_CHANGE</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">"No changes need saving"</span><span class="p">)</span>
|
|
<span class="n">_DEFAULT_NO_QUITFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">"Exited editor."</span><span class="p">)</span>
|
|
|
|
<span class="n">_ERROR_QUITFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd">{error}</span>
|
|
|
|
<span class="sd">|rQuit function gave an error. Skipping.|n</span>
|
|
<span class="sd">"""</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">_ERROR_PERSISTENT_SAVING</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd">{error}</span>
|
|
|
|
<span class="sd">|rThe editor state could not be saved for persistent mode. Switching</span>
|
|
<span class="sd">to non-persistent mode (which means the editor session won't survive</span>
|
|
<span class="sd">an eventual server reload - so save often!)|n</span>
|
|
<span class="sd">"""</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">_TRACE_PERSISTENT_SAVING</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
|
|
<span class="s2">"EvEditor persistent-mode error. Commonly, this is because one or "</span>
|
|
<span class="s2">"more of the EvEditor callbacks could not be pickled, for example "</span>
|
|
<span class="s2">"because it's a class method or is defined inside another function."</span>
|
|
<span class="p">)</span>
|
|
|
|
|
|
<span class="n">_MSG_NO_UNDO</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">"Nothing to undo."</span><span class="p">)</span>
|
|
<span class="n">_MSG_NO_REDO</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">"Nothing to redo."</span><span class="p">)</span>
|
|
<span class="n">_MSG_UNDO</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">"Undid one step."</span><span class="p">)</span>
|
|
<span class="n">_MSG_REDO</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">"Redid one step."</span><span class="p">)</span>
|
|
|
|
<span class="c1"># -------------------------------------------------------------</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># Handle yes/no quit question</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># -------------------------------------------------------------</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdSaveYesNo"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.CmdSaveYesNo">[docs]</a><span class="k">class</span> <span class="nc">CmdSaveYesNo</span><span class="p">(</span><span class="n">_COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Save the editor state on quit. This catches</span>
|
|
<span class="sd"> nomatches (defaults to Yes), and avoid saves only if</span>
|
|
<span class="sd"> command was given specifically as "no" or "n".</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">_CMD_NOMATCH</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="n">_CMD_NOINPUT</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:all()"</span>
|
|
<span class="n">help_cateogory</span> <span class="o">=</span> <span class="s2">"LineEditor"</span>
|
|
|
|
<div class="viewcode-block" id="CmdSaveYesNo.func"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.CmdSaveYesNo.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Implement the yes/no choice.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># this is only called from inside the lineeditor</span>
|
|
<span class="c1"># so caller.ndb._lineditor must be set.</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">SaveYesNoCmdSet</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"no"</span><span class="p">,</span> <span class="s2">"n"</span><span class="p">):</span>
|
|
<span class="c1"># answered no</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_eveditor</span><span class="o">.</span><span class="n">quit</span><span class="p">())</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># answered yes (default)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_eveditor</span><span class="o">.</span><span class="n">save_buffer</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_eveditor</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="SaveYesNoCmdSet"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.SaveYesNoCmdSet">[docs]</a><span class="k">class</span> <span class="nc">SaveYesNoCmdSet</span><span class="p">(</span><span class="n">CmdSet</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Stores the yesno question</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"quitsave_yesno"</span>
|
|
<span class="n">priority</span> <span class="o">=</span> <span class="mi">150</span> <span class="c1"># override other cmdsets.</span>
|
|
<span class="n">mergetype</span> <span class="o">=</span> <span class="s2">"Replace"</span>
|
|
|
|
<div class="viewcode-block" id="SaveYesNoCmdSet.at_cmdset_creation"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.SaveYesNoCmdSet.at_cmdset_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_cmdset_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""at cmdset creation"""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">CmdSaveYesNo</span><span class="p">())</span></div></div>
|
|
|
|
|
|
<span class="c1"># -------------------------------------------------------------</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># Editor commands</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># -------------------------------------------------------------</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdEditorBase"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.CmdEditorBase">[docs]</a><span class="k">class</span> <span class="nc">CmdEditorBase</span><span class="p">(</span><span class="n">_COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Base parent for editor commands</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:all()"</span>
|
|
<span class="n">help_entry</span> <span class="o">=</span> <span class="s2">"LineEditor"</span>
|
|
|
|
<span class="n">editor</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<div class="viewcode-block" id="CmdEditorBase.parse"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.CmdEditorBase.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Handles pre-parsing. Editor commands are on the form</span>
|
|
|
|
<span class="sd"> ::</span>
|
|
|
|
<span class="sd"> :cmd [li] [w] [txt]</span>
|
|
|
|
<span class="sd"> Where all arguments are optional.</span>
|
|
|
|
<span class="sd"> - `li` - line number (int), starting from 1. This could also</span>
|
|
<span class="sd"> be a range given as <l>:<l>.</span>
|
|
<span class="sd"> - `w` - word(s) (string), could be encased in quotes.</span>
|
|
<span class="sd"> - `txt` - extra text (string), could be encased in quotes.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">editor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_eveditor</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">editor</span><span class="p">:</span>
|
|
<span class="c1"># this will completely replace the editor</span>
|
|
<span class="n">_load_editor</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span>
|
|
<span class="n">editor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_eveditor</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">editor</span> <span class="o">=</span> <span class="n">editor</span>
|
|
|
|
<span class="n">linebuffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">editor</span><span class="o">.</span><span class="n">get_buffer</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
|
|
<span class="n">nlines</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">linebuffer</span><span class="p">)</span>
|
|
|
|
<span class="c1"># The regular expression will split the line by whitespaces,</span>
|
|
<span class="c1"># stripping extra whitespaces, except if the text is</span>
|
|
<span class="c1"># surrounded by single- or double quotes, in which case they</span>
|
|
<span class="c1"># will be kept together and extra whitespace preserved. You</span>
|
|
<span class="c1"># can input quotes on the line by alternating single and</span>
|
|
<span class="c1"># double quotes.</span>
|
|
<span class="n">arglist</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">_RE_GROUP</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span> <span class="k">if</span> <span class="n">part</span><span class="p">]</span>
|
|
<span class="n">temp</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">arglist</span><span class="p">:</span>
|
|
<span class="c1"># we want to clean the quotes, but only one type,</span>
|
|
<span class="c1"># in case we are nesting.</span>
|
|
<span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'"'</span><span class="p">):</span>
|
|
<span class="n">arg</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">'"'</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">arg</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"'"</span><span class="p">):</span>
|
|
<span class="n">arg</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">"'"</span><span class="p">)</span>
|
|
<span class="n">temp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
|
|
<span class="n">arglist</span> <span class="o">=</span> <span class="n">temp</span>
|
|
|
|
<span class="c1"># A dumb split, without grouping quotes</span>
|
|
<span class="n">words</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
|
|
|
|
<span class="c1"># current line number</span>
|
|
<span class="n">cline</span> <span class="o">=</span> <span class="n">nlines</span> <span class="o">-</span> <span class="mi">1</span>
|
|
|
|
<span class="c1"># the first argument could also be a range of line numbers, on the</span>
|
|
<span class="c1"># form <lstart>:<lend>. Either of the ends could be missing, to</span>
|
|
<span class="c1"># mean start/end of buffer respectively.</span>
|
|
|
|
<span class="n">lstart</span><span class="p">,</span> <span class="n">lend</span> <span class="o">=</span> <span class="n">cline</span><span class="p">,</span> <span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">linerange</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">if</span> <span class="n">arglist</span> <span class="ow">and</span> <span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s2">":"</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">part1</span><span class="p">,</span> <span class="n">part2</span> <span class="o">=</span> <span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">":"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">part1</span> <span class="ow">and</span> <span class="n">part1</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
|
|
<span class="n">lstart</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">part1</span><span class="p">))</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">nlines</span><span class="p">)</span>
|
|
<span class="n">linerange</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">if</span> <span class="n">part2</span> <span class="ow">and</span> <span class="n">part2</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
|
|
<span class="n">lend</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">part2</span><span class="p">))</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">linerange</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">elif</span> <span class="n">arglist</span> <span class="ow">and</span> <span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
|
|
<span class="n">lstart</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span> <span class="n">nlines</span><span class="p">)</span>
|
|
<span class="n">lend</span> <span class="o">=</span> <span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">linerange</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">if</span> <span class="n">linerange</span><span class="p">:</span>
|
|
<span class="n">arglist</span> <span class="o">=</span> <span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
|
|
|
<span class="c1"># nicer output formatting of the line range.</span>
|
|
<span class="n">lstr</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"line </span><span class="si">%i</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">linerange</span> <span class="ow">or</span> <span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">==</span> <span class="n">lend</span>
|
|
<span class="k">else</span> <span class="s2">"lines </span><span class="si">%i</span><span class="s2">-</span><span class="si">%i</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">lend</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># arg1 and arg2 is whatever arguments. Line numbers or -ranges are</span>
|
|
<span class="c1"># never included here.</span>
|
|
<span class="n">args</span> <span class="o">=</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arglist</span><span class="p">)</span>
|
|
<span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">arglist</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span> <span class="o">=</span> <span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">arg1</span> <span class="o">=</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arglist</span><span class="p">)</span>
|
|
|
|
<span class="c1"># store for use in func()</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">linebuffer</span> <span class="o">=</span> <span class="n">linebuffer</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">nlines</span> <span class="o">=</span> <span class="n">nlines</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">arglist</span> <span class="o">=</span> <span class="n">arglist</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">=</span> <span class="n">cline</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">lstart</span> <span class="o">=</span> <span class="n">lstart</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">lend</span> <span class="o">=</span> <span class="n">lend</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">linerange</span> <span class="o">=</span> <span class="n">linerange</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">lstr</span> <span class="o">=</span> <span class="n">lstr</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">words</span> <span class="o">=</span> <span class="n">words</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">args</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">arg1</span> <span class="o">=</span> <span class="n">arg1</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">arg2</span> <span class="o">=</span> <span class="n">arg2</span></div></div>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_load_editor</span><span class="p">(</span><span class="n">caller</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Load persistent editor from storage.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">saved_options</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"_eveditor_saved"</span><span class="p">)</span>
|
|
<span class="n">saved_buffer</span><span class="p">,</span> <span class="n">saved_undo</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"_eveditor_buffer_temp"</span><span class="p">,</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
|
|
<span class="n">unsaved</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"_eveditor_unsaved"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"_eveditor_indent"</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">saved_options</span><span class="p">:</span>
|
|
<span class="n">eveditor</span> <span class="o">=</span> <span class="n">EvEditor</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="o">**</span><span class="n">saved_options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="k">if</span> <span class="n">saved_buffer</span><span class="p">:</span>
|
|
<span class="c1"># we have to re-save the buffer data so we can handle subsequent restarts</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_buffer_temp"</span><span class="p">,</span> <span class="p">(</span><span class="n">saved_buffer</span><span class="p">,</span> <span class="n">saved_undo</span><span class="p">))</span>
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">eveditor</span><span class="p">,</span> <span class="s2">"_buffer"</span><span class="p">,</span> <span class="n">saved_buffer</span><span class="p">)</span>
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">eveditor</span><span class="p">,</span> <span class="s2">"_undo_buffer"</span><span class="p">,</span> <span class="n">saved_undo</span><span class="p">)</span>
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">eveditor</span><span class="p">,</span> <span class="s2">"_undo_pos"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">saved_undo</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">eveditor</span><span class="p">,</span> <span class="s2">"_unsaved"</span><span class="p">,</span> <span class="n">unsaved</span><span class="p">)</span>
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">eveditor</span><span class="p">,</span> <span class="s2">"_indent"</span><span class="p">,</span> <span class="n">indent</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">saved_options</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">eveditor</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># something went wrong. Cleanup.</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">EvEditorCmdSet</span><span class="p">)</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdLineInput"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.CmdLineInput">[docs]</a><span class="k">class</span> <span class="nc">CmdLineInput</span><span class="p">(</span><span class="n">CmdEditorBase</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> No command match - Inputs line of text into buffer.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">_CMD_NOMATCH</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="n">_CMD_NOINPUT</span>
|
|
|
|
<div class="viewcode-block" id="CmdLineInput.func"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.CmdLineInput.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Adds the line without any formatting changes.</span>
|
|
|
|
<span class="sd"> If the editor handles code, it might add automatic</span>
|
|
<span class="sd"> indentation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
<span class="n">editor</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_eveditor</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">editor</span><span class="o">.</span><span class="n">get_buffer</span><span class="p">()</span>
|
|
|
|
<span class="c1"># add a line of text to buffer</span>
|
|
<span class="n">line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">"</span><span class="se">\r\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">editor</span><span class="o">.</span><span class="n">_codefunc</span> <span class="ow">and</span> <span class="n">editor</span><span class="o">.</span><span class="n">_indent</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="c1"># if automatic indentation is active, add spaces</span>
|
|
<span class="n">line</span> <span class="o">=</span> <span class="n">editor</span><span class="o">.</span><span class="n">deduce_indent</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="n">buf</span><span class="p">)</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">line</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">buf</span> <span class="k">else</span> <span class="n">buf</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">line</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">editor</span><span class="o">.</span><span class="n">_echo_mode</span><span class="p">:</span>
|
|
<span class="c1"># need to do it here or we will be off one line</span>
|
|
<span class="n">cline</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">editor</span><span class="o">.</span><span class="n">get_buffer</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">editor</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">:</span>
|
|
<span class="c1"># display the current level of identation</span>
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="n">editor</span><span class="o">.</span><span class="n">_indent</span>
|
|
<span class="k">if</span> <span class="n">indent</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="s2">"off"</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|b</span><span class="si">%02i</span><span class="s2">|||n (|g</span><span class="si">%s</span><span class="s2">|n) </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">cline</span><span class="p">,</span> <span class="n">indent</span><span class="p">,</span> <span class="n">raw</span><span class="p">(</span><span class="n">line</span><span class="p">)))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|b</span><span class="si">%02i</span><span class="s2">|||n </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">cline</span><span class="p">,</span> <span class="n">raw</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)))</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdEditorGroup"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.CmdEditorGroup">[docs]</a><span class="k">class</span> <span class="nc">CmdEditorGroup</span><span class="p">(</span><span class="n">CmdEditorBase</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Commands for the editor</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">":editor_command_group"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="s2">":"</span><span class="p">,</span>
|
|
<span class="s2">"::"</span><span class="p">,</span>
|
|
<span class="s2">":::"</span><span class="p">,</span>
|
|
<span class="s2">":h"</span><span class="p">,</span>
|
|
<span class="s2">":w"</span><span class="p">,</span>
|
|
<span class="s2">":wq"</span><span class="p">,</span>
|
|
<span class="s2">":q"</span><span class="p">,</span>
|
|
<span class="s2">":q!"</span><span class="p">,</span>
|
|
<span class="s2">":u"</span><span class="p">,</span>
|
|
<span class="s2">":uu"</span><span class="p">,</span>
|
|
<span class="s2">":UU"</span><span class="p">,</span>
|
|
<span class="s2">":dd"</span><span class="p">,</span>
|
|
<span class="s2">":dw"</span><span class="p">,</span>
|
|
<span class="s2">":DD"</span><span class="p">,</span>
|
|
<span class="s2">":y"</span><span class="p">,</span>
|
|
<span class="s2">":x"</span><span class="p">,</span>
|
|
<span class="s2">":p"</span><span class="p">,</span>
|
|
<span class="s2">":i"</span><span class="p">,</span>
|
|
<span class="s2">":j"</span><span class="p">,</span>
|
|
<span class="s2">":r"</span><span class="p">,</span>
|
|
<span class="s2">":I"</span><span class="p">,</span>
|
|
<span class="s2">":A"</span><span class="p">,</span>
|
|
<span class="s2">":s"</span><span class="p">,</span>
|
|
<span class="s2">":S"</span><span class="p">,</span>
|
|
<span class="s2">":f"</span><span class="p">,</span>
|
|
<span class="s2">":fi"</span><span class="p">,</span>
|
|
<span class="s2">":fd"</span><span class="p">,</span>
|
|
<span class="s2">":echo"</span><span class="p">,</span>
|
|
<span class="s2">":!"</span><span class="p">,</span>
|
|
<span class="s2">":<"</span><span class="p">,</span>
|
|
<span class="s2">":>"</span><span class="p">,</span>
|
|
<span class="s2">":="</span><span class="p">,</span>
|
|
<span class="p">]</span>
|
|
<span class="n">arg_regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\s.*?|$"</span>
|
|
|
|
<div class="viewcode-block" id="CmdEditorGroup.func"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.CmdEditorGroup.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This command handles all the in-editor :-style commands. Since</span>
|
|
<span class="sd"> each command is small and very limited, this makes for a more</span>
|
|
<span class="sd"> efficient presentation.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
<span class="n">editor</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_eveditor</span>
|
|
|
|
<span class="n">linebuffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">linebuffer</span>
|
|
<span class="n">lstart</span><span class="p">,</span> <span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lstart</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lend</span>
|
|
<span class="n">cmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdstring</span>
|
|
<span class="n">echo_mode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">editor</span><span class="o">.</span><span class="n">_echo_mode</span>
|
|
|
|
<span class="k">if</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":"</span><span class="p">:</span>
|
|
<span class="c1"># Echo buffer</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">display_buffer</span><span class="p">(</span><span class="n">buf</span><span class="o">=</span><span class="n">buf</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">lstart</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">display_buffer</span><span class="p">()</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">"::"</span><span class="p">:</span>
|
|
<span class="c1"># Echo buffer without the line numbers and syntax parsing</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">display_buffer</span><span class="p">(</span><span class="n">buf</span><span class="o">=</span><span class="n">buf</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">lstart</span><span class="p">,</span> <span class="n">linenums</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="p">{</span><span class="s2">"raw"</span><span class="p">:</span> <span class="kc">True</span><span class="p">})</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">display_buffer</span><span class="p">(</span><span class="n">linenums</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="p">{</span><span class="s2">"raw"</span><span class="p">:</span> <span class="kc">True</span><span class="p">})</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":::"</span><span class="p">:</span>
|
|
<span class="c1"># Insert single colon alone on a line</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">([</span><span class="s2">":"</span><span class="p">]</span> <span class="k">if</span> <span class="n">lstart</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">linebuffer</span> <span class="o">+</span> <span class="p">[</span><span class="s2">":"</span><span class="p">])</span>
|
|
<span class="k">if</span> <span class="n">echo_mode</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Single ':' added to buffer."</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":h"</span><span class="p">:</span>
|
|
<span class="c1"># help entry</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">display_help</span><span class="p">()</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":w"</span><span class="p">:</span>
|
|
<span class="c1"># save without quitting</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">save_buffer</span><span class="p">()</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":wq"</span><span class="p">:</span>
|
|
<span class="c1"># save and quit</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">save_buffer</span><span class="p">()</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":q"</span><span class="p">:</span>
|
|
<span class="c1"># quit. If not saved, will ask</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">editor</span><span class="o">.</span><span class="n">_unsaved</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">SaveYesNoCmdSet</span><span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Save before quitting?"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">" |lcyes|lt[Y]|le/|lcno|ltN|le"</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":q!"</span><span class="p">:</span>
|
|
<span class="c1"># force quit, not checking saving</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":u"</span><span class="p">:</span>
|
|
<span class="c1"># undo</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_undo</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":uu"</span><span class="p">:</span>
|
|
<span class="c1"># redo</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_undo</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":UU"</span><span class="p">:</span>
|
|
<span class="c1"># reset buffer</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">editor</span><span class="o">.</span><span class="n">_pristine_buffer</span><span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Reverted all changes to the buffer back to original state."</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":dd"</span><span class="p">:</span>
|
|
<span class="c1"># :dd <l> - delete line <l></span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Deleted </span><span class="si">{string}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">string</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":dw"</span><span class="p">:</span>
|
|
<span class="c1"># :dw <w> - delete word in entire buffer</span>
|
|
<span class="c1"># :dw <l> <w> delete word only on line(s) <l></span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"You must give a search word to delete."</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
|
|
<span class="n">lstart</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"Removed </span><span class="si">{arg1}</span><span class="s2"> for lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"Removed </span><span class="si">{arg1}</span><span class="s2"> for </span><span class="si">{line}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">sarea</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">])</span>
|
|
<span class="n">sarea</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">"'"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">'"'</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">sarea</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span><span class="p">)</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">sarea</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":DD"</span><span class="p">:</span>
|
|
<span class="c1"># clear buffer</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Reset indentation level to 0</span>
|
|
<span class="k">if</span> <span class="n">editor</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">editor</span><span class="o">.</span><span class="n">_indent</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">if</span> <span class="n">editor</span><span class="o">.</span><span class="n">_persistent</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_indent"</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Cleared </span><span class="si">{nlines}</span><span class="s2"> lines from buffer."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">nlines</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">nlines</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":y"</span><span class="p">:</span>
|
|
<span class="c1"># :y <l> - yank line(s) to copy buffer</span>
|
|
<span class="n">cbuf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">_copy_buffer</span> <span class="o">=</span> <span class="n">cbuf</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"</span><span class="si">{line}</span><span class="s2">, </span><span class="si">{cbuf}</span><span class="s2"> yanked."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="o">.</span><span class="n">capitalize</span><span class="p">(),</span> <span class="n">cbuf</span><span class="o">=</span><span class="n">cbuf</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":x"</span><span class="p">:</span>
|
|
<span class="c1"># :x <l> - cut line to copy buffer</span>
|
|
<span class="n">cbuf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">_copy_buffer</span> <span class="o">=</span> <span class="n">cbuf</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"</span><span class="si">{line}</span><span class="s2">, </span><span class="si">{cbuf}</span><span class="s2"> cut."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="o">.</span><span class="n">capitalize</span><span class="p">(),</span> <span class="n">cbuf</span><span class="o">=</span><span class="n">cbuf</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":p"</span><span class="p">:</span>
|
|
<span class="c1"># :p <l> paste line(s) from copy buffer</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">editor</span><span class="o">.</span><span class="n">_copy_buffer</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Copy buffer is empty."</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">editor</span><span class="o">.</span><span class="n">_copy_buffer</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"Pasted buffer </span><span class="si">{cbuf}</span><span class="s2"> to </span><span class="si">{line}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">cbuf</span><span class="o">=</span><span class="n">editor</span><span class="o">.</span><span class="n">_copy_buffer</span><span class="p">,</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":i"</span><span class="p">:</span>
|
|
<span class="c1"># :i <l> <txt> - insert new line</span>
|
|
<span class="n">new_lines</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_lines</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"You need to enter a new line and where to insert it."</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">new_lines</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"Inserted </span><span class="si">{num}</span><span class="s2"> new line(s) at </span><span class="si">{line}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">num</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">new_lines</span><span class="p">),</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":r"</span><span class="p">:</span>
|
|
<span class="c1"># :r <l> <txt> - replace lines</span>
|
|
<span class="n">new_lines</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_lines</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"You need to enter a replacement string."</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">new_lines</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"Replaced </span><span class="si">{num}</span><span class="s2"> line(s) at </span><span class="si">{line}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">num</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">new_lines</span><span class="p">),</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":I"</span><span class="p">:</span>
|
|
<span class="c1"># :I <l> <txt> - insert text at beginning of line(s) <l></span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">editor</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"You need to enter text to insert."</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span>
|
|
<span class="o">+</span> <span class="p">[</span><span class="s2">"</span><span class="si">%s%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="n">line</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">]]</span>
|
|
<span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
|
|
<span class="p">)</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Inserted text at beginning of </span><span class="si">{line}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":A"</span><span class="p">:</span>
|
|
<span class="c1"># :A <l> <txt> - append text after end of line(s)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"You need to enter text to append."</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span>
|
|
<span class="o">+</span> <span class="p">[</span><span class="s2">"</span><span class="si">%s%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">]]</span>
|
|
<span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
|
|
<span class="p">)</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Appended text to end of </span><span class="si">{line}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":s"</span><span class="p">:</span>
|
|
<span class="c1"># :s <li> <w> <txt> - search and replace words</span>
|
|
<span class="c1"># in entire buffer or on certain lines</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg1</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg2</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"You must give a search word and something to replace it with."</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
|
|
<span class="n">lstart</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"Search-replaced </span><span class="si">{arg1}</span><span class="s2"> -> </span><span class="si">{arg2}</span><span class="s2"> for lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg2</span><span class="p">,</span> <span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"Search-replaced </span><span class="si">{arg1}</span><span class="s2"> -> </span><span class="si">{arg2}</span><span class="s2"> for </span><span class="si">{line}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg2</span><span class="p">,</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">sarea</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">])</span>
|
|
|
|
<span class="n">regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"</span><span class="si">%s</span><span class="s2">|^</span><span class="si">%s</span><span class="s2">(?=\s)|(?<=\s)</span><span class="si">%s</span><span class="s2">(?=\s)|^</span><span class="si">%s</span><span class="s2">$|(?<=\s)</span><span class="si">%s</span><span class="s2">$"</span>
|
|
<span class="n">regarg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">"'"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">'"'</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="s2">" "</span> <span class="ow">in</span> <span class="n">regarg</span><span class="p">:</span>
|
|
<span class="n">regarg</span> <span class="o">=</span> <span class="n">regarg</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="s2">" +"</span><span class="p">)</span>
|
|
<span class="n">sarea</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span>
|
|
<span class="n">regex</span> <span class="o">%</span> <span class="p">(</span><span class="n">regarg</span><span class="p">,</span> <span class="n">regarg</span><span class="p">,</span> <span class="n">regarg</span><span class="p">,</span> <span class="n">regarg</span><span class="p">,</span> <span class="n">regarg</span><span class="p">),</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">arg2</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">"'"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">'"'</span><span class="p">),</span>
|
|
<span class="n">sarea</span><span class="p">,</span>
|
|
<span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">sarea</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":f"</span><span class="p">:</span>
|
|
<span class="c1"># :f <l> flood-fill buffer or <l> lines of buffer.</span>
|
|
<span class="n">width</span> <span class="o">=</span> <span class="n">_DEFAULT_WIDTH</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
|
|
<span class="n">lstart</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Flood filled lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Flood filled </span><span class="si">{line}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
|
|
<span class="n">fbuf</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">])</span>
|
|
<span class="n">fbuf</span> <span class="o">=</span> <span class="n">fill</span><span class="p">(</span><span class="n">fbuf</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">)</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">fbuf</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":j"</span><span class="p">:</span>
|
|
<span class="c1"># :f <l> <w> justify buffer of <l> with <w> as align (one of</span>
|
|
<span class="c1"># f(ull), c(enter), r(ight) or l(left). Default is full.</span>
|
|
<span class="n">align_map</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"full"</span><span class="p">:</span> <span class="s2">"f"</span><span class="p">,</span>
|
|
<span class="s2">"f"</span><span class="p">:</span> <span class="s2">"f"</span><span class="p">,</span>
|
|
<span class="s2">"center"</span><span class="p">:</span> <span class="s2">"c"</span><span class="p">,</span>
|
|
<span class="s2">"c"</span><span class="p">:</span> <span class="s2">"c"</span><span class="p">,</span>
|
|
<span class="s2">"right"</span><span class="p">:</span> <span class="s2">"r"</span><span class="p">,</span>
|
|
<span class="s2">"r"</span><span class="p">:</span> <span class="s2">"r"</span><span class="p">,</span>
|
|
<span class="s2">"left"</span><span class="p">:</span> <span class="s2">"l"</span><span class="p">,</span>
|
|
<span class="s2">"l"</span><span class="p">:</span> <span class="s2">"l"</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
<span class="n">align_name</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"f"</span><span class="p">:</span> <span class="s2">"Full"</span><span class="p">,</span> <span class="s2">"c"</span><span class="p">:</span> <span class="s2">"Center"</span><span class="p">,</span> <span class="s2">"l"</span><span class="p">:</span> <span class="s2">"Left"</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">:</span> <span class="s2">"Right"</span><span class="p">}</span>
|
|
<span class="n">width</span> <span class="o">=</span> <span class="n">_DEFAULT_WIDTH</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">align_map</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"Valid justifications are"</span><span class="p">)</span>
|
|
<span class="o">+</span> <span class="s2">" [f]ull (default), [c]enter, [r]right or [l]eft"</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">align</span> <span class="o">=</span> <span class="n">align_map</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg1</span> <span class="k">else</span> <span class="s2">"f"</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
|
|
<span class="n">lstart</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"</span><span class="si">{align}</span><span class="s2">-justified lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">align</span><span class="o">=</span><span class="n">align_name</span><span class="p">[</span><span class="n">align</span><span class="p">],</span> <span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"</span><span class="si">{align}</span><span class="s2">-justified </span><span class="si">{line}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">align</span><span class="o">=</span><span class="n">align_name</span><span class="p">[</span><span class="n">align</span><span class="p">],</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">jbuf</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">])</span>
|
|
<span class="n">jbuf</span> <span class="o">=</span> <span class="n">justify</span><span class="p">(</span><span class="n">jbuf</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">align</span><span class="o">=</span><span class="n">align</span><span class="p">)</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">jbuf</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":fi"</span><span class="p">:</span>
|
|
<span class="c1"># :fi <l> indent buffer or lines <l> of buffer.</span>
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="s2">" "</span> <span class="o">*</span> <span class="mi">4</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
|
|
<span class="n">lstart</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Indented lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Indented </span><span class="si">{line}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
|
|
<span class="n">fbuf</span> <span class="o">=</span> <span class="p">[</span><span class="n">indent</span> <span class="o">+</span> <span class="n">line</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">]]</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">fbuf</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":fd"</span><span class="p">:</span>
|
|
<span class="c1"># :fi <l> indent buffer or lines <l> of buffer.</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
|
|
<span class="n">lstart</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"Removed left margin (dedented) lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Removed left margin (dedented) </span><span class="si">{line}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
|
|
<span class="n">fbuf</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">])</span>
|
|
<span class="n">fbuf</span> <span class="o">=</span> <span class="n">dedent</span><span class="p">(</span><span class="n">fbuf</span><span class="p">)</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">fbuf</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":echo"</span><span class="p">:</span>
|
|
<span class="c1"># set echoing on/off</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">_echo_mode</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">editor</span><span class="o">.</span><span class="n">_echo_mode</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Echo mode set to </span><span class="si">{mode}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="n">editor</span><span class="o">.</span><span class="n">_echo_mode</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":!"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">editor</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">:</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">editor</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"This command is only available in code editor mode."</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":<"</span><span class="p">:</span>
|
|
<span class="c1"># :<</span>
|
|
<span class="k">if</span> <span class="n">editor</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">:</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">decrease_indent</span><span class="p">()</span>
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="n">editor</span><span class="o">.</span><span class="n">_indent</span>
|
|
<span class="k">if</span> <span class="n">indent</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"Decreased indentation: new indentation is </span><span class="si">{indent}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">indent</span><span class="o">=</span><span class="n">indent</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"|rManual indentation is OFF.|n Use := to turn it on."</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"This command is only available in code editor mode."</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":>"</span><span class="p">:</span>
|
|
<span class="c1"># :></span>
|
|
<span class="k">if</span> <span class="n">editor</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">:</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">increase_indent</span><span class="p">()</span>
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="n">editor</span><span class="o">.</span><span class="n">_indent</span>
|
|
<span class="k">if</span> <span class="n">indent</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="n">_</span><span class="p">(</span><span class="s2">"Increased indentation: new indentation is </span><span class="si">{indent}</span><span class="s2">."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">indent</span><span class="o">=</span><span class="n">indent</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"|rManual indentation is OFF.|n Use := to turn it on."</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"This command is only available in code editor mode."</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">":="</span><span class="p">:</span>
|
|
<span class="c1"># :=</span>
|
|
<span class="k">if</span> <span class="n">editor</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">:</span>
|
|
<span class="n">editor</span><span class="o">.</span><span class="n">swap_autoindent</span><span class="p">()</span>
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="n">editor</span><span class="o">.</span><span class="n">_indent</span>
|
|
<span class="k">if</span> <span class="n">indent</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Auto-indentation turned on."</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"Auto-indentation turned off."</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"This command is only available in code editor mode."</span><span class="p">))</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="EvEditorCmdSet"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditorCmdSet">[docs]</a><span class="k">class</span> <span class="nc">EvEditorCmdSet</span><span class="p">(</span><span class="n">CmdSet</span><span class="p">):</span>
|
|
<span class="sd">"""CmdSet for the editor commands"""</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"editorcmdset"</span>
|
|
<span class="n">mergetype</span> <span class="o">=</span> <span class="s2">"Replace"</span>
|
|
|
|
<div class="viewcode-block" id="EvEditorCmdSet.at_cmdset_creation"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditorCmdSet.at_cmdset_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_cmdset_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">CmdLineInput</span><span class="p">())</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">CmdEditorGroup</span><span class="p">())</span></div></div>
|
|
|
|
|
|
<span class="c1"># -------------------------------------------------------------</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># Main Editor object</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># -------------------------------------------------------------</span>
|
|
|
|
|
|
<div class="viewcode-block" id="EvEditor"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor">[docs]</a><span class="k">class</span> <span class="nc">EvEditor</span><span class="p">:</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This defines a line editor object. It creates all relevant commands</span>
|
|
<span class="sd"> and tracks the current state of the buffer. It also cleans up after</span>
|
|
<span class="sd"> itself.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<div class="viewcode-block" id="EvEditor.__init__"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="p">,</span>
|
|
<span class="n">caller</span><span class="p">,</span>
|
|
<span class="n">loadfunc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">savefunc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">quitfunc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">key</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span>
|
|
<span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
<span class="n">codefunc</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
<span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Launches a full in-game line editor, mimicking the functionality of VIM.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> caller (Object): Who is using the editor.</span>
|
|
<span class="sd"> loadfunc (callable, optional): This will be called as</span>
|
|
<span class="sd"> `loadfunc(caller)` when the editor is first started. Its</span>
|
|
<span class="sd"> return will be used as the editor's starting buffer.</span>
|
|
<span class="sd"> savefunc (callable, optional): This will be called as</span>
|
|
<span class="sd"> `savefunc(caller, buffer)` when the save-command is given and</span>
|
|
<span class="sd"> is used to actually determine where/how result is saved.</span>
|
|
<span class="sd"> It should return `True` if save was successful and also</span>
|
|
<span class="sd"> handle any feedback to the user.</span>
|
|
<span class="sd"> quitfunc (callable, optional): This will optionally be</span>
|
|
<span class="sd"> called as `quitfunc(caller)` when the editor is</span>
|
|
<span class="sd"> exited. If defined, it should handle all wanted feedback</span>
|
|
<span class="sd"> to the user.</span>
|
|
<span class="sd"> quitfunc_args (tuple, optional): Optional tuple of arguments to</span>
|
|
<span class="sd"> supply to `quitfunc`.</span>
|
|
<span class="sd"> key (str, optional): An optional key for naming this</span>
|
|
<span class="sd"> session and make it unique from other editing sessions.</span>
|
|
<span class="sd"> persistent (bool, optional): Make the editor survive a reboot. Note</span>
|
|
<span class="sd"> that if this is set, all callables must be possible to pickle</span>
|
|
<span class="sd"> codefunc (bool, optional): If given, will run the editor in code mode.</span>
|
|
<span class="sd"> This will be called as `codefunc(caller, buf)`.</span>
|
|
|
|
<span class="sd"> Notes:</span>
|
|
<span class="sd"> In persistent mode, all the input callables (savefunc etc)</span>
|
|
<span class="sd"> must be possible to be *pickled*, this excludes e.g.</span>
|
|
<span class="sd"> callables that are class methods or functions defined</span>
|
|
<span class="sd"> dynamically or as part of another function. In</span>
|
|
<span class="sd"> non-persistent mode no such restrictions exist.</span>
|
|
|
|
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_key</span> <span class="o">=</span> <span class="n">key</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span> <span class="o">=</span> <span class="n">caller</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_eveditor</span> <span class="o">=</span> <span class="bp">self</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_unsaved</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_persistent</span> <span class="o">=</span> <span class="n">persistent</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="mi">0</span>
|
|
|
|
<span class="k">if</span> <span class="n">loadfunc</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_loadfunc</span> <span class="o">=</span> <span class="n">loadfunc</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_loadfunc</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">caller</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">load_buffer</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">savefunc</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_savefunc</span> <span class="o">=</span> <span class="n">savefunc</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_savefunc</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">caller</span><span class="p">,</span> <span class="n">buffer</span><span class="p">:</span> <span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_ERROR_NO_SAVEFUNC</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">quitfunc</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_quitfunc</span> <span class="o">=</span> <span class="n">quitfunc</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_quitfunc</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">caller</span><span class="p">:</span> <span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_DEFAULT_NO_QUITFUNC</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_codefunc</span> <span class="o">=</span> <span class="n">codefunc</span>
|
|
|
|
<span class="c1"># store the original version</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_pristine_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_sep</span> <span class="o">=</span> <span class="s2">"-"</span>
|
|
|
|
<span class="c1"># undo operation buffer</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_undo_max</span> <span class="o">=</span> <span class="mi">20</span>
|
|
|
|
<span class="c1"># copy buffer</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_copy_buffer</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<span class="k">if</span> <span class="n">persistent</span><span class="p">:</span>
|
|
<span class="c1"># save in tuple {kwargs, other options}</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
|
|
<span class="s2">"_eveditor_saved"</span><span class="p">,</span>
|
|
<span class="p">(</span>
|
|
<span class="nb">dict</span><span class="p">(</span>
|
|
<span class="n">loadfunc</span><span class="o">=</span><span class="n">loadfunc</span><span class="p">,</span>
|
|
<span class="n">savefunc</span><span class="o">=</span><span class="n">savefunc</span><span class="p">,</span>
|
|
<span class="n">quitfunc</span><span class="o">=</span><span class="n">quitfunc</span><span class="p">,</span>
|
|
<span class="n">codefunc</span><span class="o">=</span><span class="n">codefunc</span><span class="p">,</span>
|
|
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
|
|
<span class="n">persistent</span><span class="o">=</span><span class="n">persistent</span><span class="p">,</span>
|
|
<span class="p">),</span>
|
|
<span class="nb">dict</span><span class="p">(</span><span class="n">_pristine_buffer</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_pristine_buffer</span><span class="p">,</span> <span class="n">_sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_sep</span><span class="p">),</span>
|
|
<span class="p">),</span>
|
|
<span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_buffer_temp"</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span><span class="p">))</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_unsaved"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_indent"</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_ERROR_PERSISTENT_SAVING</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="n">err</span><span class="p">))</span>
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">(</span><span class="n">_TRACE_PERSISTENT_SAVING</span><span class="p">)</span>
|
|
<span class="n">persistent</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="c1"># Create the commands we need</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">EvEditorCmdSet</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="n">persistent</span><span class="p">)</span>
|
|
|
|
<span class="c1"># echo inserted text back to caller</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_echo_mode</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<span class="c1"># show the buffer ui</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">display_buffer</span><span class="p">()</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.load_buffer"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.load_buffer">[docs]</a> <span class="k">def</span> <span class="nf">load_buffer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Load the buffer using the load function hook.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_loadfunc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="sa">f</span><span class="s2">"|rBuffer is of type |w</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span><span class="si">}</span><span class="s2">)|r. "</span>
|
|
<span class="s2">"Continuing, it is converted to a string "</span>
|
|
<span class="s2">"(and will be saved as such)!|n"</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="n">to_str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
|
|
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_ERROR_LOADFUNC</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="n">e</span><span class="p">))</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.get_buffer"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.get_buffer">[docs]</a> <span class="k">def</span> <span class="nf">get_buffer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Return:</span>
|
|
<span class="sd"> buffer (str): The current buffer.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.update_buffer"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.update_buffer">[docs]</a> <span class="k">def</span> <span class="nf">update_buffer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">buf</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This should be called when the buffer has been changed</span>
|
|
<span class="sd"> somehow. It will handle unsaved flag and undo updating.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> buf (str): The text to update the buffer with.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">buf</span><span class="p">):</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">buf</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="n">buf</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update_undo</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_unsaved</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_persistent</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
|
|
<span class="s2">"_eveditor_buffer_temp"</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_unsaved"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_indent"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.quit"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.quit">[docs]</a> <span class="k">def</span> <span class="nf">quit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Cleanly exit the editor.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_quitfunc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_ERROR_QUITFUNC</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="n">e</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">nattributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">"_eveditor"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">"_eveditor_buffer_temp"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">"_eveditor_saved"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">"_eveditor_unsaved"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">"_eveditor_indent"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">EvEditorCmdSet</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.save_buffer"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.save_buffer">[docs]</a> <span class="k">def</span> <span class="nf">save_buffer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Saves the content of the buffer.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unsaved</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">:</span>
|
|
<span class="c1"># always save code - this allows us to tie execution to</span>
|
|
<span class="c1"># saving if we want.</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_savefunc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">):</span>
|
|
<span class="c1"># Save codes should return a true value to indicate</span>
|
|
<span class="c1"># save worked. The saving function is responsible for</span>
|
|
<span class="c1"># any status messages.</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_unsaved</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_ERROR_SAVEFUNC</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="n">e</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_MSG_SAVE_NO_CHANGE</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.update_undo"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.update_undo">[docs]</a> <span class="k">def</span> <span class="nf">update_undo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">step</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This updates the undo position.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> step (int, optional): The amount of steps</span>
|
|
<span class="sd"> to progress the undo position to. This</span>
|
|
<span class="sd"> may be a negative value for undo and</span>
|
|
<span class="sd"> a positive value for redo.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">step</span> <span class="ow">and</span> <span class="n">step</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="c1"># undo</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_MSG_NO_UNDO</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span> <span class="o">+</span> <span class="n">step</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_MSG_UNDO</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">step</span> <span class="ow">and</span> <span class="n">step</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="c1"># redo</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span> <span class="o">>=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">>=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_max</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_MSG_NO_REDO</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span> <span class="o">+</span> <span class="n">step</span><span class="p">,</span> <span class="nb">min</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_max</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_MSG_REDO</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span> <span class="ow">or</span> <span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span><span class="p">]</span>
|
|
<span class="p">):</span>
|
|
<span class="c1"># save undo state</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span><span class="p">[:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_undo_pos</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_undo_buffer</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.display_buffer"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.display_buffer">[docs]</a> <span class="k">def</span> <span class="nf">display_buffer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">buf</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">linenums</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="p">{</span><span class="s2">"raw"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This displays the line editor buffer, or selected parts of it.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> buf (str, optional): The buffer or part of buffer to display.</span>
|
|
<span class="sd"> offset (int, optional): If `buf` is set and is not the full buffer,</span>
|
|
<span class="sd"> `offset` should define the actual starting line number, to</span>
|
|
<span class="sd"> get the linenum display right.</span>
|
|
<span class="sd"> linenums (bool, optional): Show line numbers in buffer.</span>
|
|
<span class="sd"> options: raw (bool, optional): Tell protocol to not parse</span>
|
|
<span class="sd"> formatting information.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">buf</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span>
|
|
<span class="k">if</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">buf</span><span class="p">):</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
|
|
<span class="n">lines</span> <span class="o">=</span> <span class="n">buf</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">nlines</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
|
|
<span class="n">nwords</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">buf</span><span class="o">.</span><span class="n">split</span><span class="p">())</span>
|
|
<span class="n">nchars</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
|
|
|
<span class="n">sep</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sep</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"|n"</span>
|
|
<span class="o">+</span> <span class="n">sep</span> <span class="o">*</span> <span class="mi">10</span>
|
|
<span class="o">+</span> <span class="n">_</span><span class="p">(</span><span class="s2">"Line Editor [</span><span class="si">{name}</span><span class="s2">]"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">)</span>
|
|
<span class="o">+</span> <span class="n">sep</span> <span class="o">*</span> <span class="p">(</span><span class="n">_DEFAULT_WIDTH</span> <span class="o">-</span> <span class="mi">24</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">))</span>
|
|
<span class="p">)</span>
|
|
<span class="n">footer</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"|n"</span>
|
|
<span class="o">+</span> <span class="n">sep</span> <span class="o">*</span> <span class="mi">10</span>
|
|
<span class="o">+</span> <span class="s2">"[l:</span><span class="si">%02i</span><span class="s2"> w:</span><span class="si">%03i</span><span class="s2"> c:</span><span class="si">%04i</span><span class="s2">]"</span> <span class="o">%</span> <span class="p">(</span><span class="n">nlines</span><span class="p">,</span> <span class="n">nwords</span><span class="p">,</span> <span class="n">nchars</span><span class="p">)</span>
|
|
<span class="o">+</span> <span class="n">sep</span> <span class="o">*</span> <span class="mi">12</span>
|
|
<span class="o">+</span> <span class="n">_</span><span class="p">(</span><span class="s2">"(:h for help)"</span><span class="p">)</span>
|
|
<span class="o">+</span> <span class="n">sep</span> <span class="o">*</span> <span class="p">(</span><span class="n">_DEFAULT_WIDTH</span> <span class="o">-</span> <span class="mi">54</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">linenums</span><span class="p">:</span>
|
|
<span class="n">main</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="s2">"|b</span><span class="si">%02i</span><span class="s2">|||n </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">iline</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">offset</span><span class="p">,</span> <span class="n">raw</span><span class="p">(</span><span class="n">line</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">iline</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">main</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">raw</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">])</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">main</span><span class="p">,</span> <span class="n">footer</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.display_help"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.display_help">[docs]</a> <span class="k">def</span> <span class="nf">display_help</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Shows the help entry for the editor.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sep</span> <span class="o">*</span> <span class="n">_DEFAULT_WIDTH</span> <span class="o">+</span> <span class="n">_HELP_TEXT</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="n">_HELP_CODE</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="n">_HELP_LEGEND</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sep</span> <span class="o">*</span> <span class="n">_DEFAULT_WIDTH</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.deduce_indent"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.deduce_indent">[docs]</a> <span class="k">def</span> <span class="nf">deduce_indent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">buffer</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Try to deduce the level of indentation of the given line.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">keywords</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"elif "</span><span class="p">:</span> <span class="p">[</span><span class="s2">"if "</span><span class="p">],</span>
|
|
<span class="s2">"else:"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"if "</span><span class="p">,</span> <span class="s2">"try"</span><span class="p">],</span>
|
|
<span class="s2">"except"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"try:"</span><span class="p">],</span>
|
|
<span class="s2">"finally:"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"try:"</span><span class="p">],</span>
|
|
<span class="p">}</span>
|
|
<span class="n">opening_tags</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"if "</span><span class="p">,</span> <span class="s2">"try:"</span><span class="p">,</span> <span class="s2">"for "</span><span class="p">,</span> <span class="s2">"while "</span><span class="p">)</span>
|
|
|
|
<span class="c1"># If the line begins by one of the given keywords</span>
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span>
|
|
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span> <span class="k">for</span> <span class="n">kw</span> <span class="ow">in</span> <span class="n">keywords</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
|
|
<span class="c1"># Get the keyword and matching begin tags</span>
|
|
<span class="n">keyword</span> <span class="o">=</span> <span class="p">[</span><span class="n">kw</span> <span class="k">for</span> <span class="n">kw</span> <span class="ow">in</span> <span class="n">keywords</span> <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">kw</span><span class="p">)][</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">begin_tags</span> <span class="o">=</span> <span class="n">keywords</span><span class="p">[</span><span class="n">keyword</span><span class="p">]</span>
|
|
<span class="k">for</span> <span class="n">oline</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">buffer</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()):</span>
|
|
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">oline</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">" "</span><span class="p">)</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span> <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">begin_tags</span><span class="p">):</span>
|
|
<span class="c1"># This line begins with a begin tag, takes the identation</span>
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">oline</span><span class="p">)</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">oline</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">" "</span><span class="p">)))</span> <span class="o">/</span> <span class="mi">4</span>
|
|
<span class="k">break</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_persistent</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_indent"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">any</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span> <span class="k">for</span> <span class="n">kw</span> <span class="ow">in</span> <span class="n">opening_tags</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_persistent</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_indent"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="p">)</span>
|
|
|
|
<span class="n">line</span> <span class="o">=</span> <span class="s2">" "</span> <span class="o">*</span> <span class="mi">4</span> <span class="o">*</span> <span class="n">indent</span> <span class="o">+</span> <span class="n">line</span>
|
|
<span class="k">return</span> <span class="n">line</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.decrease_indent"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.decrease_indent">[docs]</a> <span class="k">def</span> <span class="nf">decrease_indent</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Decrease automatic indentation by 1 level."""</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_codefunc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">-=</span> <span class="mi">1</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_persistent</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_indent"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.increase_indent"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.increase_indent">[docs]</a> <span class="k">def</span> <span class="nf">increase_indent</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Increase automatic indentation by 1 level."""</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_codefunc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_persistent</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_indent"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="EvEditor.swap_autoindent"><a class="viewcode-back" href="../../../api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.swap_autoindent">[docs]</a> <span class="k">def</span> <span class="nf">swap_autoindent</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Swap automatic indentation on or off."""</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="mi">0</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_persistent</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_eveditor_indent"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="p">)</span></div></div>
|
|
</pre></div>
|
|
|
|
<div class="clearer"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<p class="logo"><a href="../../../index.html">
|
|
<img class="logo" src="../../../_static/evennia_logo.png" alt="Logo"/>
|
|
</a></p>
|
|
<div id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" />
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>$('#searchbox').show(0);</script><h3>Links</h3>
|
|
<ul>
|
|
<li><a href="https://www.evennia.com">Home page</a> </li>
|
|
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
|
|
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
|
<li>
|
|
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
|
|
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
|
|
<a href="https://evennia.blogspot.com/">Blog</a>
|
|
</li>
|
|
</ul>
|
|
<h3>Versions</h3>
|
|
<ul>
|
|
<li><a href="eveditor.html">1.0-dev (develop branch)</a></li>
|
|
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.utils.eveditor</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2020, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
|
</div>
|
|
</body>
|
|
</html> |