You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

868 lines
39 KiB

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.9.2" />
<title>TermTk.libbpytop.term API documentation</title>
<meta name="description" content="" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>TermTk.libbpytop.term</code></h1>
</header>
<section id="section-intro">
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">#!/usr/bin/env python3
# Copyright 2021 Eugenio Parodi &lt;ceccopierangiolieugenio AT googlemail DOT com&gt;
# Copyright 2020 Aristocratos (https://github.com/aristocratos/bpytop)
#
# Licensed under the Apache License, Version 2.0 (the &#34;License&#34;);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an &#34;AS IS&#34; BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os, sys, io, threading, signal, re, subprocess, logging, logging.handlers, argparse
import queue
from select import select
from time import time, sleep, strftime, localtime
from typing import List, Set, Dict, Tuple, Optional, Union, Any, Callable, ContextManager, Iterable, Type, NamedTuple
try: import fcntl, termios, tty, pwd
except Exception as e:
print(f&#39;ERROR: {e}&#39;)
exit(1)
class Mv:
&#34;&#34;&#34;Class with collection of cursor movement functions: .t[o](line, column) | .r[ight](columns) | .l[eft](columns) | .u[p](lines) | .d[own](lines) | .save() | .restore()&#34;&#34;&#34;
@staticmethod
def to(line: int, col: int) -&gt; str:
return f&#39;\033[{line};{col}f&#39; #* Move cursor to line, column
@staticmethod
def right(x: int) -&gt; str: #* Move cursor right x columns
return f&#39;\033[{x}C&#39;
@staticmethod
def left(x: int) -&gt; str: #* Move cursor left x columns
return f&#39;\033[{x}D&#39;
@staticmethod
def up(x: int) -&gt; str: #* Move cursor up x lines
return f&#39;\033[{x}A&#39;
@staticmethod
def down(x: int) -&gt; str: #* Move cursor down x lines
return f&#39;\033[{x}B&#39;
save: str = &#34;\033[s&#34; #* Save cursor position
restore: str = &#34;\033[u&#34; #* Restore saved cursor postion
t = to
r = right
l = left
u = up
d = down
class Term:
&#34;&#34;&#34;Terminal info and commands&#34;&#34;&#34;
title: str = &#34;TermTk&#34;
mouse: bool = True
width: int = 0
height: int = 0
fg: str = &#34;&#34; #* Default foreground color
bg: str = &#34;&#34; #* Default background color
hide_cursor = &#34;\033[?25l&#34; #* Hide terminal cursor
show_cursor = &#34;\033[?25h&#34; #* Show terminal cursor
alt_screen = &#34;\033[?1049h&#34; #* Switch to alternate screen
normal_screen = &#34;\033[?1049l&#34; #* Switch to normal screen
clear = &#34;\033[2J\033[0;0f&#34; #* Clear screen and set cursor to position 0,0
mouse_on = &#34;\033[?1002h\033[?1015h\033[?1006h&#34; #* Enable reporting of mouse position on click and release
mouse_off = &#34;\033[?1002l&#34; #* Disable mouse reporting
mouse_direct_on = &#34;\033[?1003h&#34; #* Enable reporting of mouse position at any movement
mouse_direct_off = &#34;\033[?1003l&#34; #* Disable direct mouse reporting
# from:
# https://superuser.com/questions/607478/how-do-you-change-the-xterm-cursor-to-an-i-beam-or-vertical-bar
# echo -e -n &#34;\x1b[\x30 q&#34; # changes to blinking block
# echo -e -n &#34;\x1b[\x31 q&#34; # changes to blinking block also
# echo -e -n &#34;\x1b[\x32 q&#34; # changes to steady block
# echo -e -n &#34;\x1b[\x33 q&#34; # changes to blinking underline
# echo -e -n &#34;\x1b[\x34 q&#34; # changes to steady underline
# echo -e -n &#34;\x1b[\x35 q&#34; # changes to blinking bar
# echo -e -n &#34;\x1b[\x36 q&#34; # changes to steady bar
cursor_blinking_block = &#34;\033[\x30 q&#34;
cursor_blinking_block_also = &#34;\033[\x31 q&#34;
cursor_steady_block = &#34;\033[\x32 q&#34;
cursor_blinking_underline = &#34;\033[\x33 q&#34;
cursor_steady_underline = &#34;\033[\x34 q&#34;
cursor_blinking_bar = &#34;\033[\x35 q&#34;
cursor_steady_bar = &#34;\033[\x36 q&#34;
_sigWinChCb = None
@staticmethod
def showCursor(cursor):
Term.push(cursor)
Term.push(Term.show_cursor)
@staticmethod
def hideCursor():
Term.push(Term.hide_cursor)
@staticmethod
def init(mouse: bool = True, title: str = &#34;TermTk&#34;):
Term.title = title
Term.mouse = mouse
Term.push(Term.alt_screen, Term.clear, Term.hide_cursor, Term.escTitle(Term.title))
if Term.mouse:
Term.push(Term.mouse_on)
Term.echo(False)
@staticmethod
def stop():
Term.push(Term.mouse_off, Term.mouse_direct_off)
Term.push(Term.clear, Term.normal_screen, Term.show_cursor, Term.escTitle())
Term.echo(True)
@staticmethod
def cont():
Term.push(Term.alt_screen, Term.clear, Term.hide_cursor, Term.escTitle(Term.title))
if Term.mouse:
Term.push(Term.mouse_on)
Term.echo(False)
@staticmethod
def exit():
Term.push(Term.mouse_off, Term.mouse_direct_off)
Term.push(Term.clear, Term.normal_screen, Term.show_cursor, Term.escTitle())
Term.echo(True)
@staticmethod
def echo(on: bool):
&#34;&#34;&#34;Toggle input echo&#34;&#34;&#34;
(iflag, oflag, cflag, lflag, ispeed, ospeed, cc) = termios.tcgetattr(sys.stdin.fileno())
if on:
lflag |= termios.ECHO # type: ignore
else:
lflag &amp;= ~termios.ECHO # type: ignore
new_attr = [iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, new_attr)
@staticmethod
def push(*args):
try:
print(*args, sep=&#34;&#34;, end=&#34;&#34;, flush=True)
except BlockingIOError:
pass
print(*args, sep=&#34;&#34;, end=&#34;&#34;, flush=True)
@staticmethod
def escTitle(text: str = &#34;&#34;) -&gt; str:
out: str = f&#39;{os.environ.get(&#34;TERMINAL_TITLE&#34;, &#34;&#34;)}&#39;
if out and text: out += &#34; &#34;
if text: out += f&#39;{text}&#39;
return f&#39;\033]0;{out}\a&#39;
@staticmethod
def _sigWinCh(signum, frame):
Term.width, Term.height = os.get_terminal_size()
if Term._sigWinChCb is not None:
Term._sigWinChCb(Term.width, Term.height)
@staticmethod
def registerResizeCb(callback):
Term._sigWinChCb = callback
# Dummy call to retrieve the terminal size
Term._sigWinCh(signal.SIGWINCH, None)
signal.signal(signal.SIGWINCH, Term._sigWinCh)</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="TermTk.libbpytop.term.Mv"><code class="flex name class">
<span>class <span class="ident">Mv</span></span>
</code></dt>
<dd>
<div class="desc"><p>Class with collection of cursor movement functions: .t<a href="line, column">o</a> | .r<a href="columns">ight</a> | .l<a href="columns">eft</a> | .u<a href="lines">p</a> | .d<a href="lines">own</a> | .save() | .restore()</p></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class Mv:
&#34;&#34;&#34;Class with collection of cursor movement functions: .t[o](line, column) | .r[ight](columns) | .l[eft](columns) | .u[p](lines) | .d[own](lines) | .save() | .restore()&#34;&#34;&#34;
@staticmethod
def to(line: int, col: int) -&gt; str:
return f&#39;\033[{line};{col}f&#39; #* Move cursor to line, column
@staticmethod
def right(x: int) -&gt; str: #* Move cursor right x columns
return f&#39;\033[{x}C&#39;
@staticmethod
def left(x: int) -&gt; str: #* Move cursor left x columns
return f&#39;\033[{x}D&#39;
@staticmethod
def up(x: int) -&gt; str: #* Move cursor up x lines
return f&#39;\033[{x}A&#39;
@staticmethod
def down(x: int) -&gt; str: #* Move cursor down x lines
return f&#39;\033[{x}B&#39;
save: str = &#34;\033[s&#34; #* Save cursor position
restore: str = &#34;\033[u&#34; #* Restore saved cursor postion
t = to
r = right
l = left
u = up
d = down</code></pre>
</details>
<h3>Subclasses</h3>
<ul class="hlist">
<li><a title="TermTk.TTkCore.helper.TTkHelper.Mv" href="../TTkCore/helper.html#TermTk.TTkCore.helper.TTkHelper.Mv">TTkHelper.Mv</a></li>
</ul>
<h3>Class variables</h3>
<dl>
<dt id="TermTk.libbpytop.term.Mv.restore"><code class="name">var <span class="ident">restore</span> : str</code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Mv.save"><code class="name">var <span class="ident">save</span> : str</code></dt>
<dd>
<div class="desc"></div>
</dd>
</dl>
<h3>Static methods</h3>
<dl>
<dt id="TermTk.libbpytop.term.Mv.d"><code class="name flex">
<span>def <span class="ident">d</span></span>(<span>x: int) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def down(x: int) -&gt; str: #* Move cursor down x lines
return f&#39;\033[{x}B&#39;</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Mv.down"><code class="name flex">
<span>def <span class="ident">down</span></span>(<span>x: int) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def down(x: int) -&gt; str: #* Move cursor down x lines
return f&#39;\033[{x}B&#39;</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Mv.l"><code class="name flex">
<span>def <span class="ident">l</span></span>(<span>x: int) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def left(x: int) -&gt; str: #* Move cursor left x columns
return f&#39;\033[{x}D&#39;</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Mv.left"><code class="name flex">
<span>def <span class="ident">left</span></span>(<span>x: int) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def left(x: int) -&gt; str: #* Move cursor left x columns
return f&#39;\033[{x}D&#39;</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Mv.r"><code class="name flex">
<span>def <span class="ident">r</span></span>(<span>x: int) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def right(x: int) -&gt; str: #* Move cursor right x columns
return f&#39;\033[{x}C&#39;</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Mv.right"><code class="name flex">
<span>def <span class="ident">right</span></span>(<span>x: int) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def right(x: int) -&gt; str: #* Move cursor right x columns
return f&#39;\033[{x}C&#39;</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Mv.t"><code class="name flex">
<span>def <span class="ident">t</span></span>(<span>line: int, col: int) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def to(line: int, col: int) -&gt; str:
return f&#39;\033[{line};{col}f&#39; #* Move cursor to line, column</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Mv.to"><code class="name flex">
<span>def <span class="ident">to</span></span>(<span>line: int, col: int) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def to(line: int, col: int) -&gt; str:
return f&#39;\033[{line};{col}f&#39; #* Move cursor to line, column</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Mv.u"><code class="name flex">
<span>def <span class="ident">u</span></span>(<span>x: int) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def up(x: int) -&gt; str: #* Move cursor up x lines
return f&#39;\033[{x}A&#39;</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Mv.up"><code class="name flex">
<span>def <span class="ident">up</span></span>(<span>x: int) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def up(x: int) -&gt; str: #* Move cursor up x lines
return f&#39;\033[{x}A&#39;</code></pre>
</details>
</dd>
</dl>
</dd>
<dt id="TermTk.libbpytop.term.Term"><code class="flex name class">
<span>class <span class="ident">Term</span></span>
</code></dt>
<dd>
<div class="desc"><p>Terminal info and commands</p></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class Term:
&#34;&#34;&#34;Terminal info and commands&#34;&#34;&#34;
title: str = &#34;TermTk&#34;
mouse: bool = True
width: int = 0
height: int = 0
fg: str = &#34;&#34; #* Default foreground color
bg: str = &#34;&#34; #* Default background color
hide_cursor = &#34;\033[?25l&#34; #* Hide terminal cursor
show_cursor = &#34;\033[?25h&#34; #* Show terminal cursor
alt_screen = &#34;\033[?1049h&#34; #* Switch to alternate screen
normal_screen = &#34;\033[?1049l&#34; #* Switch to normal screen
clear = &#34;\033[2J\033[0;0f&#34; #* Clear screen and set cursor to position 0,0
mouse_on = &#34;\033[?1002h\033[?1015h\033[?1006h&#34; #* Enable reporting of mouse position on click and release
mouse_off = &#34;\033[?1002l&#34; #* Disable mouse reporting
mouse_direct_on = &#34;\033[?1003h&#34; #* Enable reporting of mouse position at any movement
mouse_direct_off = &#34;\033[?1003l&#34; #* Disable direct mouse reporting
# from:
# https://superuser.com/questions/607478/how-do-you-change-the-xterm-cursor-to-an-i-beam-or-vertical-bar
# echo -e -n &#34;\x1b[\x30 q&#34; # changes to blinking block
# echo -e -n &#34;\x1b[\x31 q&#34; # changes to blinking block also
# echo -e -n &#34;\x1b[\x32 q&#34; # changes to steady block
# echo -e -n &#34;\x1b[\x33 q&#34; # changes to blinking underline
# echo -e -n &#34;\x1b[\x34 q&#34; # changes to steady underline
# echo -e -n &#34;\x1b[\x35 q&#34; # changes to blinking bar
# echo -e -n &#34;\x1b[\x36 q&#34; # changes to steady bar
cursor_blinking_block = &#34;\033[\x30 q&#34;
cursor_blinking_block_also = &#34;\033[\x31 q&#34;
cursor_steady_block = &#34;\033[\x32 q&#34;
cursor_blinking_underline = &#34;\033[\x33 q&#34;
cursor_steady_underline = &#34;\033[\x34 q&#34;
cursor_blinking_bar = &#34;\033[\x35 q&#34;
cursor_steady_bar = &#34;\033[\x36 q&#34;
_sigWinChCb = None
@staticmethod
def showCursor(cursor):
Term.push(cursor)
Term.push(Term.show_cursor)
@staticmethod
def hideCursor():
Term.push(Term.hide_cursor)
@staticmethod
def init(mouse: bool = True, title: str = &#34;TermTk&#34;):
Term.title = title
Term.mouse = mouse
Term.push(Term.alt_screen, Term.clear, Term.hide_cursor, Term.escTitle(Term.title))
if Term.mouse:
Term.push(Term.mouse_on)
Term.echo(False)
@staticmethod
def stop():
Term.push(Term.mouse_off, Term.mouse_direct_off)
Term.push(Term.clear, Term.normal_screen, Term.show_cursor, Term.escTitle())
Term.echo(True)
@staticmethod
def cont():
Term.push(Term.alt_screen, Term.clear, Term.hide_cursor, Term.escTitle(Term.title))
if Term.mouse:
Term.push(Term.mouse_on)
Term.echo(False)
@staticmethod
def exit():
Term.push(Term.mouse_off, Term.mouse_direct_off)
Term.push(Term.clear, Term.normal_screen, Term.show_cursor, Term.escTitle())
Term.echo(True)
@staticmethod
def echo(on: bool):
&#34;&#34;&#34;Toggle input echo&#34;&#34;&#34;
(iflag, oflag, cflag, lflag, ispeed, ospeed, cc) = termios.tcgetattr(sys.stdin.fileno())
if on:
lflag |= termios.ECHO # type: ignore
else:
lflag &amp;= ~termios.ECHO # type: ignore
new_attr = [iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, new_attr)
@staticmethod
def push(*args):
try:
print(*args, sep=&#34;&#34;, end=&#34;&#34;, flush=True)
except BlockingIOError:
pass
print(*args, sep=&#34;&#34;, end=&#34;&#34;, flush=True)
@staticmethod
def escTitle(text: str = &#34;&#34;) -&gt; str:
out: str = f&#39;{os.environ.get(&#34;TERMINAL_TITLE&#34;, &#34;&#34;)}&#39;
if out and text: out += &#34; &#34;
if text: out += f&#39;{text}&#39;
return f&#39;\033]0;{out}\a&#39;
@staticmethod
def _sigWinCh(signum, frame):
Term.width, Term.height = os.get_terminal_size()
if Term._sigWinChCb is not None:
Term._sigWinChCb(Term.width, Term.height)
@staticmethod
def registerResizeCb(callback):
Term._sigWinChCb = callback
# Dummy call to retrieve the terminal size
Term._sigWinCh(signal.SIGWINCH, None)
signal.signal(signal.SIGWINCH, Term._sigWinCh)</code></pre>
</details>
<h3>Class variables</h3>
<dl>
<dt id="TermTk.libbpytop.term.Term.alt_screen"><code class="name">var <span class="ident">alt_screen</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.bg"><code class="name">var <span class="ident">bg</span> : str</code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.clear"><code class="name">var <span class="ident">clear</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.cursor_blinking_bar"><code class="name">var <span class="ident">cursor_blinking_bar</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.cursor_blinking_block"><code class="name">var <span class="ident">cursor_blinking_block</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.cursor_blinking_block_also"><code class="name">var <span class="ident">cursor_blinking_block_also</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.cursor_blinking_underline"><code class="name">var <span class="ident">cursor_blinking_underline</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.cursor_steady_bar"><code class="name">var <span class="ident">cursor_steady_bar</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.cursor_steady_block"><code class="name">var <span class="ident">cursor_steady_block</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.cursor_steady_underline"><code class="name">var <span class="ident">cursor_steady_underline</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.fg"><code class="name">var <span class="ident">fg</span> : str</code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.height"><code class="name">var <span class="ident">height</span> : int</code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.hide_cursor"><code class="name">var <span class="ident">hide_cursor</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.mouse"><code class="name">var <span class="ident">mouse</span> : bool</code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.mouse_direct_off"><code class="name">var <span class="ident">mouse_direct_off</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.mouse_direct_on"><code class="name">var <span class="ident">mouse_direct_on</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.mouse_off"><code class="name">var <span class="ident">mouse_off</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.mouse_on"><code class="name">var <span class="ident">mouse_on</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.normal_screen"><code class="name">var <span class="ident">normal_screen</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.show_cursor"><code class="name">var <span class="ident">show_cursor</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.title"><code class="name">var <span class="ident">title</span> : str</code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="TermTk.libbpytop.term.Term.width"><code class="name">var <span class="ident">width</span> : int</code></dt>
<dd>
<div class="desc"></div>
</dd>
</dl>
<h3>Static methods</h3>
<dl>
<dt id="TermTk.libbpytop.term.Term.cont"><code class="name flex">
<span>def <span class="ident">cont</span></span>(<span>)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def cont():
Term.push(Term.alt_screen, Term.clear, Term.hide_cursor, Term.escTitle(Term.title))
if Term.mouse:
Term.push(Term.mouse_on)
Term.echo(False)</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Term.echo"><code class="name flex">
<span>def <span class="ident">echo</span></span>(<span>on: bool)</span>
</code></dt>
<dd>
<div class="desc"><p>Toggle input echo</p></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def echo(on: bool):
&#34;&#34;&#34;Toggle input echo&#34;&#34;&#34;
(iflag, oflag, cflag, lflag, ispeed, ospeed, cc) = termios.tcgetattr(sys.stdin.fileno())
if on:
lflag |= termios.ECHO # type: ignore
else:
lflag &amp;= ~termios.ECHO # type: ignore
new_attr = [iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, new_attr)</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Term.escTitle"><code class="name flex">
<span>def <span class="ident">escTitle</span></span>(<span>text: str = '') ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def escTitle(text: str = &#34;&#34;) -&gt; str:
out: str = f&#39;{os.environ.get(&#34;TERMINAL_TITLE&#34;, &#34;&#34;)}&#39;
if out and text: out += &#34; &#34;
if text: out += f&#39;{text}&#39;
return f&#39;\033]0;{out}\a&#39;</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Term.exit"><code class="name flex">
<span>def <span class="ident">exit</span></span>(<span>)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def exit():
Term.push(Term.mouse_off, Term.mouse_direct_off)
Term.push(Term.clear, Term.normal_screen, Term.show_cursor, Term.escTitle())
Term.echo(True)</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Term.hideCursor"><code class="name flex">
<span>def <span class="ident">hideCursor</span></span>(<span>)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def hideCursor():
Term.push(Term.hide_cursor)</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Term.init"><code class="name flex">
<span>def <span class="ident">init</span></span>(<span>mouse: bool = True, title: str = 'TermTk')</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def init(mouse: bool = True, title: str = &#34;TermTk&#34;):
Term.title = title
Term.mouse = mouse
Term.push(Term.alt_screen, Term.clear, Term.hide_cursor, Term.escTitle(Term.title))
if Term.mouse:
Term.push(Term.mouse_on)
Term.echo(False)</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Term.push"><code class="name flex">
<span>def <span class="ident">push</span></span>(<span>*args)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def push(*args):
try:
print(*args, sep=&#34;&#34;, end=&#34;&#34;, flush=True)
except BlockingIOError:
pass
print(*args, sep=&#34;&#34;, end=&#34;&#34;, flush=True)</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Term.registerResizeCb"><code class="name flex">
<span>def <span class="ident">registerResizeCb</span></span>(<span>callback)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def registerResizeCb(callback):
Term._sigWinChCb = callback
# Dummy call to retrieve the terminal size
Term._sigWinCh(signal.SIGWINCH, None)
signal.signal(signal.SIGWINCH, Term._sigWinCh)</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Term.showCursor"><code class="name flex">
<span>def <span class="ident">showCursor</span></span>(<span>cursor)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def showCursor(cursor):
Term.push(cursor)
Term.push(Term.show_cursor)</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.term.Term.stop"><code class="name flex">
<span>def <span class="ident">stop</span></span>(<span>)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def stop():
Term.push(Term.mouse_off, Term.mouse_direct_off)
Term.push(Term.clear, Term.normal_screen, Term.show_cursor, Term.escTitle())
Term.echo(True)</code></pre>
</details>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="TermTk.libbpytop" href="index.html">TermTk.libbpytop</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="TermTk.libbpytop.term.Mv" href="#TermTk.libbpytop.term.Mv">Mv</a></code></h4>
<ul class="two-column">
<li><code><a title="TermTk.libbpytop.term.Mv.d" href="#TermTk.libbpytop.term.Mv.d">d</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Mv.down" href="#TermTk.libbpytop.term.Mv.down">down</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Mv.l" href="#TermTk.libbpytop.term.Mv.l">l</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Mv.left" href="#TermTk.libbpytop.term.Mv.left">left</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Mv.r" href="#TermTk.libbpytop.term.Mv.r">r</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Mv.restore" href="#TermTk.libbpytop.term.Mv.restore">restore</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Mv.right" href="#TermTk.libbpytop.term.Mv.right">right</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Mv.save" href="#TermTk.libbpytop.term.Mv.save">save</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Mv.t" href="#TermTk.libbpytop.term.Mv.t">t</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Mv.to" href="#TermTk.libbpytop.term.Mv.to">to</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Mv.u" href="#TermTk.libbpytop.term.Mv.u">u</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Mv.up" href="#TermTk.libbpytop.term.Mv.up">up</a></code></li>
</ul>
</li>
<li>
<h4><code><a title="TermTk.libbpytop.term.Term" href="#TermTk.libbpytop.term.Term">Term</a></code></h4>
<ul class="">
<li><code><a title="TermTk.libbpytop.term.Term.alt_screen" href="#TermTk.libbpytop.term.Term.alt_screen">alt_screen</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.bg" href="#TermTk.libbpytop.term.Term.bg">bg</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.clear" href="#TermTk.libbpytop.term.Term.clear">clear</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.cont" href="#TermTk.libbpytop.term.Term.cont">cont</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.cursor_blinking_bar" href="#TermTk.libbpytop.term.Term.cursor_blinking_bar">cursor_blinking_bar</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.cursor_blinking_block" href="#TermTk.libbpytop.term.Term.cursor_blinking_block">cursor_blinking_block</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.cursor_blinking_block_also" href="#TermTk.libbpytop.term.Term.cursor_blinking_block_also">cursor_blinking_block_also</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.cursor_blinking_underline" href="#TermTk.libbpytop.term.Term.cursor_blinking_underline">cursor_blinking_underline</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.cursor_steady_bar" href="#TermTk.libbpytop.term.Term.cursor_steady_bar">cursor_steady_bar</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.cursor_steady_block" href="#TermTk.libbpytop.term.Term.cursor_steady_block">cursor_steady_block</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.cursor_steady_underline" href="#TermTk.libbpytop.term.Term.cursor_steady_underline">cursor_steady_underline</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.echo" href="#TermTk.libbpytop.term.Term.echo">echo</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.escTitle" href="#TermTk.libbpytop.term.Term.escTitle">escTitle</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.exit" href="#TermTk.libbpytop.term.Term.exit">exit</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.fg" href="#TermTk.libbpytop.term.Term.fg">fg</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.height" href="#TermTk.libbpytop.term.Term.height">height</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.hideCursor" href="#TermTk.libbpytop.term.Term.hideCursor">hideCursor</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.hide_cursor" href="#TermTk.libbpytop.term.Term.hide_cursor">hide_cursor</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.init" href="#TermTk.libbpytop.term.Term.init">init</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.mouse" href="#TermTk.libbpytop.term.Term.mouse">mouse</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.mouse_direct_off" href="#TermTk.libbpytop.term.Term.mouse_direct_off">mouse_direct_off</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.mouse_direct_on" href="#TermTk.libbpytop.term.Term.mouse_direct_on">mouse_direct_on</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.mouse_off" href="#TermTk.libbpytop.term.Term.mouse_off">mouse_off</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.mouse_on" href="#TermTk.libbpytop.term.Term.mouse_on">mouse_on</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.normal_screen" href="#TermTk.libbpytop.term.Term.normal_screen">normal_screen</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.push" href="#TermTk.libbpytop.term.Term.push">push</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.registerResizeCb" href="#TermTk.libbpytop.term.Term.registerResizeCb">registerResizeCb</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.showCursor" href="#TermTk.libbpytop.term.Term.showCursor">showCursor</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.show_cursor" href="#TermTk.libbpytop.term.Term.show_cursor">show_cursor</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.stop" href="#TermTk.libbpytop.term.Term.stop">stop</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.title" href="#TermTk.libbpytop.term.Term.title">title</a></code></li>
<li><code><a title="TermTk.libbpytop.term.Term.width" href="#TermTk.libbpytop.term.Term.width">width</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
</footer>
</body>
</html>