556 lines
64 KiB
HTML
556 lines
64 KiB
HTML
|
|
|
|
<!DOCTYPE html>
|
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
|
<head>
|
|
<meta charset="utf-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<title>terminatorlib.util — terminatorlib 0.98 documentation</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="top" title="terminatorlib 0.98 documentation" href="../../index.html"/>
|
|
<link rel="up" title="Module code" href="../index.html"/>
|
|
|
|
|
|
<script src="_static/js/modernizr.min.js"></script>
|
|
|
|
</head>
|
|
|
|
<body class="wy-body-for-nav" role="document">
|
|
|
|
<div class="wy-grid-for-nav">
|
|
|
|
|
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
<div class="wy-side-nav-search">
|
|
|
|
|
|
|
|
<a href="../../index.html" class="icon icon-home"> terminatorlib
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
<div role="search">
|
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
|
<input type="text" name="q" placeholder="Search docs" />
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
|
|
|
|
|
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="../../terminatorlib.html">terminatorlib package</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#subpackages">Subpackages</a><ul>
|
|
<li class="toctree-l3"><a class="reference internal" href="../../terminatorlib.configobj.html">terminatorlib.configobj package</a><ul>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.configobj.html#submodules">Submodules</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.configobj.html#module-terminatorlib.configobj.configobj">terminatorlib.configobj.configobj module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.configobj.html#module-terminatorlib.configobj.validate">terminatorlib.configobj.validate module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.configobj.html#module-terminatorlib.configobj">Module contents</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l3"><a class="reference internal" href="../../terminatorlib.plugins.html">terminatorlib.plugins package</a><ul>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.plugins.html#submodules">Submodules</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.plugins.html#module-terminatorlib.plugins.activitywatch">terminatorlib.plugins.activitywatch module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.plugins.html#module-terminatorlib.plugins.custom_commands">terminatorlib.plugins.custom_commands module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.plugins.html#module-terminatorlib.plugins.logger">terminatorlib.plugins.logger module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.plugins.html#module-terminatorlib.plugins.maven">terminatorlib.plugins.maven module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.plugins.html#module-terminatorlib.plugins.terminalshot">terminatorlib.plugins.terminalshot module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.plugins.html#module-terminatorlib.plugins.testplugin">terminatorlib.plugins.testplugin module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.plugins.html#module-terminatorlib.plugins.url_handlers">terminatorlib.plugins.url_handlers module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../terminatorlib.plugins.html#module-terminatorlib.plugins">Module contents</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#submodules">Submodules</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.borg">terminatorlib.borg module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.config">terminatorlib.config module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.container">terminatorlib.container module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.cwd">terminatorlib.cwd module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.debugserver">terminatorlib.debugserver module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.editablelabel">terminatorlib.editablelabel module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.encoding">terminatorlib.encoding module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.factory">terminatorlib.factory module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.freebsd">terminatorlib.freebsd module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.ipc">terminatorlib.ipc module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.keybindings">terminatorlib.keybindings module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.layoutlauncher">terminatorlib.layoutlauncher module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.notebook">terminatorlib.notebook module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.optionparse">terminatorlib.optionparse module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.paned">terminatorlib.paned module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.plugin">terminatorlib.plugin module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.prefseditor">terminatorlib.prefseditor module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.searchbar">terminatorlib.searchbar module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.signalman">terminatorlib.signalman module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.terminal">terminatorlib.terminal module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.terminal_popup_menu">terminatorlib.terminal_popup_menu module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.terminator">terminatorlib.terminator module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.titlebar">terminatorlib.titlebar module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.translation">terminatorlib.translation module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.util">terminatorlib.util module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.version">terminatorlib.version module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib.window">terminatorlib.window module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../terminatorlib.html#module-terminatorlib">Module contents</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
|
|
|
|
|
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
<a href="../../index.html">terminatorlib</a>
|
|
</nav>
|
|
|
|
|
|
|
|
<div class="wy-nav-content">
|
|
<div class="rst-content">
|
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
|
<ul class="wy-breadcrumbs">
|
|
<li><a href="../../index.html">Docs</a> »</li>
|
|
|
|
<li><a href="../index.html">Module code</a> »</li>
|
|
|
|
<li>terminatorlib.util</li>
|
|
<li class="wy-breadcrumbs-aside">
|
|
|
|
|
|
|
|
</li>
|
|
</ul>
|
|
<hr/>
|
|
</div>
|
|
<div role="main" class="document">
|
|
|
|
<h1>Source code for terminatorlib.util</h1><div class="highlight"><pre>
|
|
<span class="c">#!/usr/bin/python</span>
|
|
<span class="c"># Terminator.util - misc utility functions</span>
|
|
<span class="c"># Copyright (C) 2006-2010 cmsj@tenshu.net</span>
|
|
<span class="c">#</span>
|
|
<span class="c"># This program is free software; you can redistribute it and/or modify</span>
|
|
<span class="c"># it under the terms of the GNU General Public License as published by</span>
|
|
<span class="c"># the Free Software Foundation, version 2 only.</span>
|
|
<span class="c">#</span>
|
|
<span class="c"># This program is distributed in the hope that it will be useful,</span>
|
|
<span class="c"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
|
<span class="c"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
|
<span class="c"># GNU General Public License for more details.</span>
|
|
<span class="c">#</span>
|
|
<span class="c"># You should have received a copy of the GNU General Public License</span>
|
|
<span class="c"># along with this program; if not, write to the Free Software</span>
|
|
<span class="c"># Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA</span>
|
|
<span class="sd">"""Terminator.util - misc utility functions"""</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">sys</span>
|
|
<span class="kn">import</span> <span class="nn">gtk</span>
|
|
<span class="kn">import</span> <span class="nn">os</span>
|
|
<span class="kn">import</span> <span class="nn">pwd</span>
|
|
<span class="kn">import</span> <span class="nn">inspect</span>
|
|
<span class="kn">import</span> <span class="nn">uuid</span>
|
|
<span class="kn">import</span> <span class="nn">subprocess</span>
|
|
|
|
<span class="c"># set this to true to enable debugging output</span>
|
|
<span class="n">DEBUG</span> <span class="o">=</span> <span class="bp">False</span>
|
|
<span class="c"># set this to true to additionally list filenames in debugging</span>
|
|
<span class="n">DEBUGFILES</span> <span class="o">=</span> <span class="bp">False</span>
|
|
<span class="c"># list of classes to show debugging for. empty list means show all classes</span>
|
|
<span class="n">DEBUGCLASSES</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="c"># list of methods to show debugging for. empty list means show all methods</span>
|
|
<span class="n">DEBUGMETHODS</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<div class="viewcode-block" id="dbg"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.dbg">[docs]</a><span class="k">def</span> <span class="nf">dbg</span><span class="p">(</span><span class="n">log</span> <span class="o">=</span> <span class="s">""</span><span class="p">):</span>
|
|
<span class="sd">"""Print a message if debugging is enabled"""</span>
|
|
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
|
<span class="n">stackitem</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">stack</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="n">parent_frame</span> <span class="o">=</span> <span class="n">stackitem</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">method</span> <span class="o">=</span> <span class="n">parent_frame</span><span class="o">.</span><span class="n">f_code</span><span class="o">.</span><span class="n">co_name</span>
|
|
<span class="n">names</span><span class="p">,</span> <span class="n">varargs</span><span class="p">,</span> <span class="n">keywords</span><span class="p">,</span> <span class="n">local_vars</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getargvalues</span><span class="p">(</span><span class="n">parent_frame</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">self_name</span> <span class="o">=</span> <span class="n">names</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">classname</span> <span class="o">=</span> <span class="n">local_vars</span><span class="p">[</span><span class="n">self_name</span><span class="p">]</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span>
|
|
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
|
<span class="n">classname</span> <span class="o">=</span> <span class="s">"noclass"</span>
|
|
<span class="k">if</span> <span class="n">DEBUGFILES</span><span class="p">:</span>
|
|
<span class="n">line</span> <span class="o">=</span> <span class="n">stackitem</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
|
<span class="n">filename</span> <span class="o">=</span> <span class="n">parent_frame</span><span class="o">.</span><span class="n">f_code</span><span class="o">.</span><span class="n">co_filename</span>
|
|
<span class="n">extra</span> <span class="o">=</span> <span class="s">" (</span><span class="si">%s</span><span class="s">:</span><span class="si">%s</span><span class="s">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">filename</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="n">extra</span> <span class="o">=</span> <span class="s">""</span>
|
|
<span class="k">if</span> <span class="n">DEBUGCLASSES</span> <span class="o">!=</span> <span class="p">[]</span> <span class="ow">and</span> <span class="n">classname</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">DEBUGCLASSES</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="n">DEBUGMETHODS</span> <span class="o">!=</span> <span class="p">[]</span> <span class="ow">and</span> <span class="n">method</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">DEBUGMETHODS</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">print</span> <span class="o">>></span> <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"</span><span class="si">%s</span><span class="s">::</span><span class="si">%s</span><span class="s">: </span><span class="si">%s%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">classname</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">log</span><span class="p">,</span> <span class="n">extra</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
</div>
|
|
<div class="viewcode-block" id="err"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.err">[docs]</a><span class="k">def</span> <span class="nf">err</span><span class="p">(</span><span class="n">log</span> <span class="o">=</span> <span class="s">""</span><span class="p">):</span>
|
|
<span class="sd">"""Print an error message"""</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">print</span> <span class="o">>></span> <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="p">,</span> <span class="n">log</span>
|
|
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
</div>
|
|
<div class="viewcode-block" id="gerr"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.gerr">[docs]</a><span class="k">def</span> <span class="nf">gerr</span><span class="p">(</span><span class="n">message</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""Display a graphical error. This should only be used for serious</span>
|
|
<span class="sd"> errors as it will halt execution"""</span>
|
|
|
|
<span class="n">dialog</span> <span class="o">=</span> <span class="n">gtk</span><span class="o">.</span><span class="n">MessageDialog</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">gtk</span><span class="o">.</span><span class="n">DIALOG_MODAL</span><span class="p">,</span>
|
|
<span class="n">gtk</span><span class="o">.</span><span class="n">MESSAGE_ERROR</span><span class="p">,</span> <span class="n">gtk</span><span class="o">.</span><span class="n">BUTTONS_OK</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
|
|
<span class="n">dialog</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
|
|
<span class="n">dialog</span><span class="o">.</span><span class="n">destroy</span><span class="p">()</span>
|
|
</div>
|
|
<div class="viewcode-block" id="has_ancestor"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.has_ancestor">[docs]</a><span class="k">def</span> <span class="nf">has_ancestor</span><span class="p">(</span><span class="n">widget</span><span class="p">,</span> <span class="n">wtype</span><span class="p">):</span>
|
|
<span class="sd">"""Walk up the family tree of widget to see if any ancestors are of type"""</span>
|
|
<span class="k">while</span> <span class="n">widget</span><span class="p">:</span>
|
|
<span class="n">widget</span> <span class="o">=</span> <span class="n">widget</span><span class="o">.</span><span class="n">get_parent</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">widget</span><span class="p">,</span> <span class="n">wtype</span><span class="p">):</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
|
|
</div>
|
|
<div class="viewcode-block" id="manual_lookup"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.manual_lookup">[docs]</a><span class="k">def</span> <span class="nf">manual_lookup</span><span class="p">():</span>
|
|
<span class="sd">'''Choose the manual to open based on LANGUAGE'''</span>
|
|
<span class="n">prefix</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">sep</span><span class="p">,</span> <span class="s">'usr'</span><span class="p">,</span> <span class="s">'share'</span><span class="p">,</span> <span class="s">'doc'</span><span class="p">,</span> <span class="s">'terminator'</span><span class="p">)</span>
|
|
<span class="n">languages</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">'LANGUAGE'</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">':'</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">language</span> <span class="ow">in</span> <span class="n">languages</span><span class="p">:</span>
|
|
<span class="n">full_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="s">'html_</span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">language</span><span class="p">),</span> <span class="s">'index.html'</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">full_path</span><span class="p">):</span>
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'Found </span><span class="si">%s</span><span class="s"> manual'</span> <span class="o">%</span> <span class="p">(</span><span class="n">language</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="n">full_path</span>
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'Couldn</span><span class="se">\'</span><span class="s">t find manual for </span><span class="si">%s</span><span class="s"> language'</span> <span class="o">%</span> <span class="p">(</span><span class="n">language</span><span class="p">))</span>
|
|
|
|
<span class="n">full_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="s">'html'</span><span class="p">,</span> <span class="s">'index.html'</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">full_path</span><span class="p">):</span>
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'Falling back to the default manual'</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">full_path</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'I can</span><span class="se">\'</span><span class="s">t find any suitable manual'</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">None</span>
|
|
</div>
|
|
<div class="viewcode-block" id="path_lookup"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.path_lookup">[docs]</a><span class="k">def</span> <span class="nf">path_lookup</span><span class="p">(</span><span class="n">command</span><span class="p">):</span>
|
|
<span class="sd">'''Find a command in our path'''</span>
|
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isabs</span><span class="p">(</span><span class="n">command</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">command</span><span class="p">):</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">command</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s">'./'</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">command</span><span class="p">):</span>
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'path_lookup: Relative filename </span><span class="si">%s</span><span class="s"> found in cwd'</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">paths</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">'PATH'</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">':'</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="k">raise</span><span class="p">(</span><span class="ne">ValueError</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">NameError</span><span class="p">):</span>
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'path_lookup: PATH not set in environment, using fallbacks'</span><span class="p">)</span>
|
|
<span class="n">paths</span> <span class="o">=</span> <span class="p">[</span><span class="s">'/usr/local/bin'</span><span class="p">,</span> <span class="s">'/usr/bin'</span><span class="p">,</span> <span class="s">'/bin'</span><span class="p">]</span>
|
|
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'path_lookup: Using </span><span class="si">%d</span><span class="s"> paths: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">paths</span><span class="p">),</span> <span class="n">paths</span><span class="p">))</span>
|
|
|
|
<span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">:</span>
|
|
<span class="n">target</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">command</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">target</span><span class="p">):</span>
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'path_lookup: found </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">target</span><span class="p">)</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
|
|
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'path_lookup: Unable to locate </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
|
|
</div>
|
|
<div class="viewcode-block" id="shell_lookup"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.shell_lookup">[docs]</a><span class="k">def</span> <span class="nf">shell_lookup</span><span class="p">():</span>
|
|
<span class="sd">"""Find an appropriate shell for the user"""</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">usershell</span> <span class="o">=</span> <span class="n">pwd</span><span class="o">.</span><span class="n">getpwuid</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getuid</span><span class="p">())[</span><span class="mi">6</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">usershell</span> <span class="o">=</span> <span class="bp">None</span>
|
|
<span class="n">shells</span> <span class="o">=</span> <span class="p">[</span><span class="n">usershell</span><span class="p">,</span> <span class="s">'bash'</span><span class="p">,</span> <span class="s">'zsh'</span><span class="p">,</span> <span class="s">'tcsh'</span><span class="p">,</span> <span class="s">'ksh'</span><span class="p">,</span> <span class="s">'csh'</span><span class="p">,</span> <span class="s">'sh'</span><span class="p">]</span>
|
|
|
|
<span class="k">for</span> <span class="n">shell</span> <span class="ow">in</span> <span class="n">shells</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">shell</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">elif</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">shell</span><span class="p">):</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">shell</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">rshell</span> <span class="o">=</span> <span class="n">path_lookup</span><span class="p">(</span><span class="n">shell</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">rshell</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'shell_lookup: Found </span><span class="si">%s</span><span class="s"> at </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">shell</span><span class="p">,</span> <span class="n">rshell</span><span class="p">))</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">rshell</span><span class="p">)</span>
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'shell_lookup: Unable to locate a shell'</span><span class="p">)</span>
|
|
</div>
|
|
<div class="viewcode-block" id="widget_pixbuf"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.widget_pixbuf">[docs]</a><span class="k">def</span> <span class="nf">widget_pixbuf</span><span class="p">(</span><span class="n">widget</span><span class="p">,</span> <span class="n">maxsize</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""Generate a pixbuf of a widget"""</span>
|
|
<span class="k">if</span> <span class="n">gtk</span><span class="o">.</span><span class="n">gtk_version</span> <span class="o"><</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">14</span><span class="p">):</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
|
|
|
|
<span class="n">pixmap</span> <span class="o">=</span> <span class="n">widget</span><span class="o">.</span><span class="n">get_snapshot</span><span class="p">()</span>
|
|
<span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">)</span> <span class="o">=</span> <span class="n">pixmap</span><span class="o">.</span><span class="n">get_size</span><span class="p">()</span>
|
|
<span class="n">pixbuf</span> <span class="o">=</span> <span class="n">gtk</span><span class="o">.</span><span class="n">gdk</span><span class="o">.</span><span class="n">Pixbuf</span><span class="p">(</span><span class="n">gtk</span><span class="o">.</span><span class="n">gdk</span><span class="o">.</span><span class="n">COLORSPACE_RGB</span><span class="p">,</span> <span class="bp">False</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">)</span>
|
|
<span class="n">pixbuf</span><span class="o">.</span><span class="n">get_from_drawable</span><span class="p">(</span><span class="n">pixmap</span><span class="p">,</span> <span class="n">pixmap</span><span class="o">.</span><span class="n">get_colormap</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span>
|
|
<span class="n">height</span><span class="p">)</span>
|
|
|
|
<span class="n">longest</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">maxsize</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="n">factor</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">maxsize</span><span class="p">)</span> <span class="o">/</span> <span class="nb">float</span><span class="p">(</span><span class="n">longest</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">maxsize</span> <span class="ow">or</span> <span class="p">(</span><span class="n">width</span> <span class="o">*</span> <span class="n">factor</span><span class="p">)</span> <span class="o">></span> <span class="n">width</span> <span class="ow">or</span> <span class="p">(</span><span class="n">height</span> <span class="o">*</span> <span class="n">factor</span><span class="p">)</span> <span class="o">></span> <span class="n">height</span><span class="p">:</span>
|
|
<span class="n">factor</span> <span class="o">=</span> <span class="mi">1</span>
|
|
|
|
<span class="n">scaledpixbuf</span> <span class="o">=</span> <span class="n">pixbuf</span><span class="o">.</span><span class="n">scale_simple</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">width</span> <span class="o">*</span> <span class="n">factor</span><span class="p">),</span> <span class="nb">int</span><span class="p">(</span><span class="n">height</span> <span class="o">*</span> <span class="n">factor</span><span class="p">),</span> <span class="n">gtk</span><span class="o">.</span><span class="n">gdk</span><span class="o">.</span><span class="n">INTERP_BILINEAR</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span><span class="p">(</span><span class="n">scaledpixbuf</span><span class="p">)</span>
|
|
</div>
|
|
<div class="viewcode-block" id="get_config_dir"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.get_config_dir">[docs]</a><span class="k">def</span> <span class="nf">get_config_dir</span><span class="p">():</span>
|
|
<span class="sd">"""Expand all the messy nonsense for finding where ~/.config/terminator</span>
|
|
<span class="sd"> really is"""</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">configdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">'XDG_CONFIG_HOME'</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">configdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">'~'</span><span class="p">),</span> <span class="s">'.config'</span><span class="p">)</span>
|
|
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'Found config dir: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">configdir</span><span class="p">)</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">configdir</span><span class="p">,</span> <span class="s">'terminator'</span><span class="p">))</span>
|
|
</div>
|
|
<div class="viewcode-block" id="dict_diff"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.dict_diff">[docs]</a><span class="k">def</span> <span class="nf">dict_diff</span><span class="p">(</span><span class="n">reference</span><span class="p">,</span> <span class="n">working</span><span class="p">):</span>
|
|
<span class="sd">"""Examine the values in the supplied working set and return a new dict</span>
|
|
<span class="sd"> that only contains those values which are different from those in the</span>
|
|
<span class="sd"> reference dictionary</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> a = {'foo': 'bar', 'baz': 'bjonk'}</span>
|
|
<span class="sd"> >>> b = {'foo': 'far', 'baz': 'bjonk'}</span>
|
|
<span class="sd"> >>> dict_diff(a, b)</span>
|
|
<span class="sd"> {'foo': 'far'}</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
|
|
|
|
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">reference</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">reference</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">!=</span> <span class="n">working</span><span class="p">[</span><span class="n">key</span><span class="p">]:</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">working</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
|
|
|
|
<span class="k">return</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
|
|
|
<span class="c"># Helper functions for directional navigation</span></div>
|
|
<div class="viewcode-block" id="get_edge"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.get_edge">[docs]</a><span class="k">def</span> <span class="nf">get_edge</span><span class="p">(</span><span class="n">allocation</span><span class="p">,</span> <span class="n">direction</span><span class="p">):</span>
|
|
<span class="sd">"""Return the edge of the supplied allocation that we will care about for</span>
|
|
<span class="sd"> directional navigation"""</span>
|
|
<span class="k">if</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'left'</span><span class="p">:</span>
|
|
<span class="n">edge</span> <span class="o">=</span> <span class="n">allocation</span><span class="o">.</span><span class="n">x</span>
|
|
<span class="n">p1</span><span class="p">,</span> <span class="n">p2</span> <span class="o">=</span> <span class="n">allocation</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">allocation</span><span class="o">.</span><span class="n">y</span> <span class="o">+</span> <span class="n">allocation</span><span class="o">.</span><span class="n">height</span>
|
|
<span class="k">elif</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'up'</span><span class="p">:</span>
|
|
<span class="n">edge</span> <span class="o">=</span> <span class="n">allocation</span><span class="o">.</span><span class="n">y</span>
|
|
<span class="n">p1</span><span class="p">,</span> <span class="n">p2</span> <span class="o">=</span> <span class="n">allocation</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">allocation</span><span class="o">.</span><span class="n">x</span> <span class="o">+</span> <span class="n">allocation</span><span class="o">.</span><span class="n">width</span>
|
|
<span class="k">elif</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'right'</span><span class="p">:</span>
|
|
<span class="n">edge</span> <span class="o">=</span> <span class="n">allocation</span><span class="o">.</span><span class="n">x</span> <span class="o">+</span> <span class="n">allocation</span><span class="o">.</span><span class="n">width</span>
|
|
<span class="n">p1</span><span class="p">,</span> <span class="n">p2</span> <span class="o">=</span> <span class="n">allocation</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">allocation</span><span class="o">.</span><span class="n">y</span> <span class="o">+</span> <span class="n">allocation</span><span class="o">.</span><span class="n">height</span>
|
|
<span class="k">elif</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'down'</span><span class="p">:</span>
|
|
<span class="n">edge</span> <span class="o">=</span> <span class="n">allocation</span><span class="o">.</span><span class="n">y</span> <span class="o">+</span> <span class="n">allocation</span><span class="o">.</span><span class="n">height</span>
|
|
<span class="n">p1</span><span class="p">,</span> <span class="n">p2</span> <span class="o">=</span> <span class="n">allocation</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">allocation</span><span class="o">.</span><span class="n">x</span> <span class="o">+</span> <span class="n">allocation</span><span class="o">.</span><span class="n">width</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'unknown direction </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">direction</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span><span class="p">(</span><span class="n">edge</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
|
|
</div>
|
|
<div class="viewcode-block" id="get_nav_possible"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.get_nav_possible">[docs]</a><span class="k">def</span> <span class="nf">get_nav_possible</span><span class="p">(</span><span class="n">edge</span><span class="p">,</span> <span class="n">allocation</span><span class="p">,</span> <span class="n">direction</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">):</span>
|
|
<span class="sd">"""Check if the supplied allocation is in the right direction of the</span>
|
|
<span class="sd"> supplied edge"""</span>
|
|
<span class="n">x1</span><span class="p">,</span> <span class="n">x2</span> <span class="o">=</span> <span class="n">allocation</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">allocation</span><span class="o">.</span><span class="n">x</span> <span class="o">+</span> <span class="n">allocation</span><span class="o">.</span><span class="n">width</span>
|
|
<span class="n">y1</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="n">allocation</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">allocation</span><span class="o">.</span><span class="n">y</span> <span class="o">+</span> <span class="n">allocation</span><span class="o">.</span><span class="n">height</span>
|
|
<span class="k">if</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'left'</span><span class="p">:</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">x2</span> <span class="o"><=</span> <span class="n">edge</span> <span class="ow">and</span> <span class="n">y1</span> <span class="o"><=</span> <span class="n">p2</span> <span class="ow">and</span> <span class="n">y2</span> <span class="o">>=</span> <span class="n">p1</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'right'</span><span class="p">:</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">x1</span> <span class="o">>=</span> <span class="n">edge</span> <span class="ow">and</span> <span class="n">y1</span> <span class="o"><=</span> <span class="n">p2</span> <span class="ow">and</span> <span class="n">y2</span> <span class="o">>=</span> <span class="n">p1</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'up'</span><span class="p">:</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">y2</span> <span class="o"><=</span> <span class="n">edge</span> <span class="ow">and</span> <span class="n">x1</span> <span class="o"><=</span> <span class="n">p2</span> <span class="ow">and</span> <span class="n">x2</span> <span class="o">>=</span> <span class="n">p1</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'down'</span><span class="p">:</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">y1</span> <span class="o">>=</span> <span class="n">edge</span> <span class="ow">and</span> <span class="n">x1</span> <span class="o"><=</span> <span class="n">p2</span> <span class="ow">and</span> <span class="n">x2</span> <span class="o">>=</span> <span class="n">p1</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'Unknown direction: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">direction</span><span class="p">)</span>
|
|
</div>
|
|
<div class="viewcode-block" id="get_nav_offset"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.get_nav_offset">[docs]</a><span class="k">def</span> <span class="nf">get_nav_offset</span><span class="p">(</span><span class="n">edge</span><span class="p">,</span> <span class="n">allocation</span><span class="p">,</span> <span class="n">direction</span><span class="p">):</span>
|
|
<span class="sd">"""Work out how far edge is from a particular point on the allocation</span>
|
|
<span class="sd"> rectangle, in the given direction"""</span>
|
|
<span class="k">if</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'left'</span><span class="p">:</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">edge</span> <span class="o">-</span> <span class="p">(</span><span class="n">allocation</span><span class="o">.</span><span class="n">x</span> <span class="o">+</span> <span class="n">allocation</span><span class="o">.</span><span class="n">width</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'right'</span><span class="p">:</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">allocation</span><span class="o">.</span><span class="n">x</span> <span class="o">-</span> <span class="n">edge</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'up'</span><span class="p">:</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">edge</span> <span class="o">-</span> <span class="p">(</span><span class="n">allocation</span><span class="o">.</span><span class="n">y</span> <span class="o">+</span> <span class="n">allocation</span><span class="o">.</span><span class="n">height</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">direction</span> <span class="o">==</span> <span class="s">'down'</span><span class="p">:</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">allocation</span><span class="o">.</span><span class="n">y</span> <span class="o">-</span> <span class="n">edge</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'Unknown direction: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">direction</span><span class="p">)</span>
|
|
</div>
|
|
<div class="viewcode-block" id="get_nav_tiebreak"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.get_nav_tiebreak">[docs]</a><span class="k">def</span> <span class="nf">get_nav_tiebreak</span><span class="p">(</span><span class="n">direction</span><span class="p">,</span> <span class="n">cursor_x</span><span class="p">,</span> <span class="n">cursor_y</span><span class="p">,</span> <span class="n">rect</span><span class="p">):</span>
|
|
<span class="sd">"""We have multiple candidate terminals. Pick the closest by cursor</span>
|
|
<span class="sd"> position"""</span>
|
|
<span class="k">if</span> <span class="n">direction</span> <span class="ow">in</span> <span class="p">[</span><span class="s">'left'</span><span class="p">,</span> <span class="s">'right'</span><span class="p">]:</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">cursor_y</span> <span class="o">>=</span> <span class="n">rect</span><span class="o">.</span><span class="n">y</span> <span class="ow">and</span> <span class="n">cursor_y</span> <span class="o"><=</span> <span class="p">(</span><span class="n">rect</span><span class="o">.</span><span class="n">y</span> <span class="o">+</span> <span class="n">rect</span><span class="o">.</span><span class="n">height</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">direction</span> <span class="ow">in</span> <span class="p">[</span><span class="s">'up'</span><span class="p">,</span> <span class="s">'down'</span><span class="p">]:</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">cursor_x</span> <span class="o">>=</span> <span class="n">rect</span><span class="o">.</span><span class="n">x</span> <span class="ow">and</span> <span class="n">cursor_x</span> <span class="o"><=</span> <span class="p">(</span><span class="n">rect</span><span class="o">.</span><span class="n">x</span> <span class="o">+</span> <span class="n">rect</span><span class="o">.</span><span class="n">width</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'Unknown direction: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">direction</span><span class="p">)</span>
|
|
</div>
|
|
<div class="viewcode-block" id="enumerate_descendants"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.enumerate_descendants">[docs]</a><span class="k">def</span> <span class="nf">enumerate_descendants</span><span class="p">(</span><span class="n">parent</span><span class="p">):</span>
|
|
<span class="sd">"""Walk all our children and build up a list of containers and</span>
|
|
<span class="sd"> terminals"""</span>
|
|
<span class="c"># FIXME: Does having to import this here mean we should move this function</span>
|
|
<span class="c"># back to Container?</span>
|
|
<span class="kn">from</span> <span class="nn">factory</span> <span class="kn">import</span> <span class="n">Factory</span>
|
|
|
|
<span class="n">containerstmp</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">containers</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">terminals</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">maker</span> <span class="o">=</span> <span class="n">Factory</span><span class="p">()</span>
|
|
|
|
<span class="k">if</span> <span class="n">parent</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="n">err</span><span class="p">(</span><span class="s">'no parent widget specified'</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">for</span> <span class="n">descendant</span> <span class="ow">in</span> <span class="n">parent</span><span class="o">.</span><span class="n">get_children</span><span class="p">():</span>
|
|
<span class="k">if</span> <span class="n">maker</span><span class="o">.</span><span class="n">isinstance</span><span class="p">(</span><span class="n">descendant</span><span class="p">,</span> <span class="s">'Container'</span><span class="p">):</span>
|
|
<span class="n">containerstmp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">descendant</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">maker</span><span class="o">.</span><span class="n">isinstance</span><span class="p">(</span><span class="n">descendant</span><span class="p">,</span> <span class="s">'Terminal'</span><span class="p">):</span>
|
|
<span class="n">terminals</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">descendant</span><span class="p">)</span>
|
|
|
|
<span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">containerstmp</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">child</span> <span class="o">=</span> <span class="n">containerstmp</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">descendant</span> <span class="ow">in</span> <span class="n">child</span><span class="o">.</span><span class="n">get_children</span><span class="p">():</span>
|
|
<span class="k">if</span> <span class="n">maker</span><span class="o">.</span><span class="n">isinstance</span><span class="p">(</span><span class="n">descendant</span><span class="p">,</span> <span class="s">'Container'</span><span class="p">):</span>
|
|
<span class="n">containerstmp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">descendant</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">maker</span><span class="o">.</span><span class="n">isinstance</span><span class="p">(</span><span class="n">descendant</span><span class="p">,</span> <span class="s">'Terminal'</span><span class="p">):</span>
|
|
<span class="n">terminals</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">descendant</span><span class="p">)</span>
|
|
<span class="n">containers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
|
|
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">'</span><span class="si">%d</span><span class="s"> containers and </span><span class="si">%d</span><span class="s"> terminals fall beneath </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">containers</span><span class="p">),</span>
|
|
<span class="nb">len</span><span class="p">(</span><span class="n">terminals</span><span class="p">),</span> <span class="n">parent</span><span class="p">))</span>
|
|
<span class="k">return</span><span class="p">(</span><span class="n">containers</span><span class="p">,</span> <span class="n">terminals</span><span class="p">)</span>
|
|
</div>
|
|
<div class="viewcode-block" id="make_uuid"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.make_uuid">[docs]</a><span class="k">def</span> <span class="nf">make_uuid</span><span class="p">(</span><span class="n">str_uuid</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""Generate a UUID for an object"""</span>
|
|
<span class="k">if</span> <span class="n">str_uuid</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">uuid</span><span class="o">.</span><span class="n">UUID</span><span class="p">(</span><span class="n">str_uuid</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span>
|
|
</div>
|
|
<div class="viewcode-block" id="inject_uuid"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.inject_uuid">[docs]</a><span class="k">def</span> <span class="nf">inject_uuid</span><span class="p">(</span><span class="n">target</span><span class="p">):</span>
|
|
<span class="sd">"""Inject a UUID into an existing object"""</span>
|
|
<span class="n">uuid</span> <span class="o">=</span> <span class="n">make_uuid</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="s">"uuid"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">target</span><span class="o">.</span><span class="n">uuid</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">"Injecting UUID </span><span class="si">%s</span><span class="s"> into: </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">target</span><span class="p">))</span>
|
|
<span class="n">target</span><span class="o">.</span><span class="n">uuid</span> <span class="o">=</span> <span class="n">uuid</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">"Object already has a UUID: </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="n">target</span><span class="p">)</span>
|
|
</div>
|
|
<div class="viewcode-block" id="spawn_new_terminator"><a class="viewcode-back" href="../../terminatorlib.html#terminatorlib.util.spawn_new_terminator">[docs]</a><span class="k">def</span> <span class="nf">spawn_new_terminator</span><span class="p">(</span><span class="n">cwd</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
|
|
<span class="sd">"""Start a new terminator instance with the given arguments"""</span>
|
|
<span class="n">cmd</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isabs</span><span class="p">(</span><span class="n">cmd</span><span class="p">):</span>
|
|
<span class="c"># Command is not an absolute path. Figure out where we are</span>
|
|
<span class="n">cmd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span> <span class="p">(</span><span class="n">cwd</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">cmd</span><span class="p">):</span>
|
|
<span class="c"># we weren't started as ./terminator in a path. Give up</span>
|
|
<span class="n">err</span><span class="p">(</span><span class="s">'Unable to locate Terminator'</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">False</span>
|
|
|
|
<span class="n">dbg</span><span class="p">(</span><span class="s">"Spawning: </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="n">cmd</span><span class="p">)</span>
|
|
<span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">cmd</span><span class="p">]</span><span class="o">+</span><span class="n">args</span><span class="p">)</span></div>
|
|
</pre></div>
|
|
|
|
</div>
|
|
<footer>
|
|
|
|
|
|
<hr/>
|
|
|
|
<div role="contentinfo">
|
|
<p>
|
|
© Copyright 2015, Stephen Boddy, licensed under the CC-BY-SA..
|
|
</p>
|
|
</div>
|
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
|
|
</footer>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
var DOCUMENTATION_OPTIONS = {
|
|
URL_ROOT:'../../',
|
|
VERSION:'0.98',
|
|
COLLAPSE_INDEX:false,
|
|
FILE_SUFFIX:'.html',
|
|
HAS_SOURCE: true
|
|
};
|
|
</script>
|
|
<script type="text/javascript" src="../../_static/jquery.js"></script>
|
|
<script type="text/javascript" src="../../_static/underscore.js"></script>
|
|
<script type="text/javascript" src="../../_static/doctools.js"></script>
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
jQuery(function () {
|
|
SphinxRtdTheme.StickyNav.enable();
|
|
});
|
|
</script>
|
|
|
|
|
|
</body>
|
|
</html> |