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.
 
 
 
 
 

348 lines
18 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.colors 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.colors</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)
from TermTk.libbpytop.term import Term
from TermTk.TTkCore.constant import TTkK
from TermTk.TTkCore.cfg import TTkCfg
from TermTk.TTkCore.log import TTkLog
# Ansi Escape Codes:
# https://conemu.github.io/en/AnsiEscapeCodes.html
class Color:
@staticmethod
def truecolor_to_256(rgb: Tuple[int, int, int], depth: str=&#34;fg&#34;) -&gt; str:
out: str = &#34;&#34;
pre: str = f&#39;\033[{&#34;38&#34; if depth == &#34;fg&#34; else &#34;48&#34;};5;&#39;
greyscale: Tuple[int, int, int] = ( rgb[0] // 11, rgb[1] // 11, rgb[2] // 11 )
if greyscale[0] == greyscale[1] == greyscale[2]:
out = f&#39;{pre}{232 + greyscale[0]}m&#39;
else:
out = f&#39;{pre}{round(rgb[0] / 51) * 36 + round(rgb[1] / 51) * 6 + round(rgb[2] / 51) + 16}m&#39;
return out
@staticmethod
def escape_color(hexa: str = &#34;&#34;, r: int = 0, g: int = 0, b: int = 0, depth: str = &#34;fg&#34;) -&gt; str:
&#34;&#34;&#34;Returns escape sequence to set color
* accepts either 6 digit hexadecimal hexa=&#34;#RRGGBB&#34;, 2 digit hexadecimal: hexa=&#34;#FF&#34;
* or decimal RGB: r=0-255, g=0-255, b=0-255
* depth=&#34;fg&#34; or &#34;bg&#34;
&#34;&#34;&#34;
dint: int = 38 if depth == &#34;fg&#34; else 48
color: str = &#34;&#34;
if hexa:
try:
if len(hexa) == 3:
c = int(hexa[1:], base=16)
if TTkCfg.color_depth is TTkK.DEP_24:
color = f&#39;\033[{dint};2;{c};{c};{c}m&#39;
else:
color = f&#39;{Color.truecolor_to_256(rgb=(c, c, c), depth=depth)}&#39;
elif len(hexa) == 7:
if TTkCfg.color_depth is TTkK.DEP_24:
color = f&#39;\033[{dint};2;{int(hexa[1:3], base=16)};{int(hexa[3:5], base=16)};{int(hexa[5:7], base=16)}m&#39;
else:
color = f&#39;{Color.truecolor_to_256(rgb=(int(hexa[1:3], base=16), int(hexa[3:5], base=16), int(hexa[5:7], base=16)), depth=depth)}&#39;
except ValueError as e:
TTkLog.error(f&#39;{e}&#39;)
else:
if TTkCfg.color_depth is TTkK.DEP_24:
color = f&#39;\033[{dint};2;{r};{g};{b}m&#39;
else:
color = f&#39;{Color.truecolor_to_256(rgb=(r, g, b), depth=depth)}&#39;
return color
@classmethod
def fg(cls, *args) -&gt; str:
if len(args) &gt; 2: return cls.escape_color(r=args[0], g=args[1], b=args[2], depth=&#34;fg&#34;)
else: return cls.escape_color(hexa=args[0], depth=&#34;fg&#34;)
@classmethod
def bg(cls, *args) -&gt; str:
if len(args) &gt; 2: return cls.escape_color(r=args[0], g=args[1], b=args[2], depth=&#34;bg&#34;)
else: return cls.escape_color(hexa=args[0], depth=&#34;bg&#34;)
#class Colors:
# &#39;&#39;&#39;Standard colors for menus and dialogs&#39;&#39;&#39;
# default = Color(&#34;#cc&#34;)
# white = Color(&#34;#ff&#34;)
# red = Color(&#34;#bf3636&#34;)
# green = Color(&#34;#68bf36&#34;)
# blue = Color(&#34;#0fd7ff&#34;)
# yellow = Color(&#34;#db8b00&#34;)
# black_bg = Color(&#34;#00&#34;, depth=&#34;bg&#34;)
# null = Color(&#34;&#34;)</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.colors.Color"><code class="flex name class">
<span>class <span class="ident">Color</span></span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class Color:
@staticmethod
def truecolor_to_256(rgb: Tuple[int, int, int], depth: str=&#34;fg&#34;) -&gt; str:
out: str = &#34;&#34;
pre: str = f&#39;\033[{&#34;38&#34; if depth == &#34;fg&#34; else &#34;48&#34;};5;&#39;
greyscale: Tuple[int, int, int] = ( rgb[0] // 11, rgb[1] // 11, rgb[2] // 11 )
if greyscale[0] == greyscale[1] == greyscale[2]:
out = f&#39;{pre}{232 + greyscale[0]}m&#39;
else:
out = f&#39;{pre}{round(rgb[0] / 51) * 36 + round(rgb[1] / 51) * 6 + round(rgb[2] / 51) + 16}m&#39;
return out
@staticmethod
def escape_color(hexa: str = &#34;&#34;, r: int = 0, g: int = 0, b: int = 0, depth: str = &#34;fg&#34;) -&gt; str:
&#34;&#34;&#34;Returns escape sequence to set color
* accepts either 6 digit hexadecimal hexa=&#34;#RRGGBB&#34;, 2 digit hexadecimal: hexa=&#34;#FF&#34;
* or decimal RGB: r=0-255, g=0-255, b=0-255
* depth=&#34;fg&#34; or &#34;bg&#34;
&#34;&#34;&#34;
dint: int = 38 if depth == &#34;fg&#34; else 48
color: str = &#34;&#34;
if hexa:
try:
if len(hexa) == 3:
c = int(hexa[1:], base=16)
if TTkCfg.color_depth is TTkK.DEP_24:
color = f&#39;\033[{dint};2;{c};{c};{c}m&#39;
else:
color = f&#39;{Color.truecolor_to_256(rgb=(c, c, c), depth=depth)}&#39;
elif len(hexa) == 7:
if TTkCfg.color_depth is TTkK.DEP_24:
color = f&#39;\033[{dint};2;{int(hexa[1:3], base=16)};{int(hexa[3:5], base=16)};{int(hexa[5:7], base=16)}m&#39;
else:
color = f&#39;{Color.truecolor_to_256(rgb=(int(hexa[1:3], base=16), int(hexa[3:5], base=16), int(hexa[5:7], base=16)), depth=depth)}&#39;
except ValueError as e:
TTkLog.error(f&#39;{e}&#39;)
else:
if TTkCfg.color_depth is TTkK.DEP_24:
color = f&#39;\033[{dint};2;{r};{g};{b}m&#39;
else:
color = f&#39;{Color.truecolor_to_256(rgb=(r, g, b), depth=depth)}&#39;
return color
@classmethod
def fg(cls, *args) -&gt; str:
if len(args) &gt; 2: return cls.escape_color(r=args[0], g=args[1], b=args[2], depth=&#34;fg&#34;)
else: return cls.escape_color(hexa=args[0], depth=&#34;fg&#34;)
@classmethod
def bg(cls, *args) -&gt; str:
if len(args) &gt; 2: return cls.escape_color(r=args[0], g=args[1], b=args[2], depth=&#34;bg&#34;)
else: return cls.escape_color(hexa=args[0], depth=&#34;bg&#34;)</code></pre>
</details>
<h3>Subclasses</h3>
<ul class="hlist">
<li><a title="TermTk.TTkCore.helper.TTkHelper.Color" href="../TTkCore/helper.html#TermTk.TTkCore.helper.TTkHelper.Color">TTkHelper.Color</a></li>
</ul>
<h3>Static methods</h3>
<dl>
<dt id="TermTk.libbpytop.colors.Color.bg"><code class="name flex">
<span>def <span class="ident">bg</span></span>(<span>*args) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@classmethod
def bg(cls, *args) -&gt; str:
if len(args) &gt; 2: return cls.escape_color(r=args[0], g=args[1], b=args[2], depth=&#34;bg&#34;)
else: return cls.escape_color(hexa=args[0], depth=&#34;bg&#34;)</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.colors.Color.escape_color"><code class="name flex">
<span>def <span class="ident">escape_color</span></span>(<span>hexa: str = '', r: int = 0, g: int = 0, b: int = 0, depth: str = 'fg') ‑> str</span>
</code></dt>
<dd>
<div class="desc"><p>Returns escape sequence to set color
* accepts either 6 digit hexadecimal hexa="#RRGGBB", 2 digit hexadecimal: hexa="#FF"
* or decimal RGB: r=0-255, g=0-255, b=0-255
* depth="fg" or "bg"</p></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def escape_color(hexa: str = &#34;&#34;, r: int = 0, g: int = 0, b: int = 0, depth: str = &#34;fg&#34;) -&gt; str:
&#34;&#34;&#34;Returns escape sequence to set color
* accepts either 6 digit hexadecimal hexa=&#34;#RRGGBB&#34;, 2 digit hexadecimal: hexa=&#34;#FF&#34;
* or decimal RGB: r=0-255, g=0-255, b=0-255
* depth=&#34;fg&#34; or &#34;bg&#34;
&#34;&#34;&#34;
dint: int = 38 if depth == &#34;fg&#34; else 48
color: str = &#34;&#34;
if hexa:
try:
if len(hexa) == 3:
c = int(hexa[1:], base=16)
if TTkCfg.color_depth is TTkK.DEP_24:
color = f&#39;\033[{dint};2;{c};{c};{c}m&#39;
else:
color = f&#39;{Color.truecolor_to_256(rgb=(c, c, c), depth=depth)}&#39;
elif len(hexa) == 7:
if TTkCfg.color_depth is TTkK.DEP_24:
color = f&#39;\033[{dint};2;{int(hexa[1:3], base=16)};{int(hexa[3:5], base=16)};{int(hexa[5:7], base=16)}m&#39;
else:
color = f&#39;{Color.truecolor_to_256(rgb=(int(hexa[1:3], base=16), int(hexa[3:5], base=16), int(hexa[5:7], base=16)), depth=depth)}&#39;
except ValueError as e:
TTkLog.error(f&#39;{e}&#39;)
else:
if TTkCfg.color_depth is TTkK.DEP_24:
color = f&#39;\033[{dint};2;{r};{g};{b}m&#39;
else:
color = f&#39;{Color.truecolor_to_256(rgb=(r, g, b), depth=depth)}&#39;
return color</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.colors.Color.fg"><code class="name flex">
<span>def <span class="ident">fg</span></span>(<span>*args) ‑> str</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@classmethod
def fg(cls, *args) -&gt; str:
if len(args) &gt; 2: return cls.escape_color(r=args[0], g=args[1], b=args[2], depth=&#34;fg&#34;)
else: return cls.escape_color(hexa=args[0], depth=&#34;fg&#34;)</code></pre>
</details>
</dd>
<dt id="TermTk.libbpytop.colors.Color.truecolor_to_256"><code class="name flex">
<span>def <span class="ident">truecolor_to_256</span></span>(<span>rgb: Tuple[int, int, int], depth: str = 'fg') ‑> 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 truecolor_to_256(rgb: Tuple[int, int, int], depth: str=&#34;fg&#34;) -&gt; str:
out: str = &#34;&#34;
pre: str = f&#39;\033[{&#34;38&#34; if depth == &#34;fg&#34; else &#34;48&#34;};5;&#39;
greyscale: Tuple[int, int, int] = ( rgb[0] // 11, rgb[1] // 11, rgb[2] // 11 )
if greyscale[0] == greyscale[1] == greyscale[2]:
out = f&#39;{pre}{232 + greyscale[0]}m&#39;
else:
out = f&#39;{pre}{round(rgb[0] / 51) * 36 + round(rgb[1] / 51) * 6 + round(rgb[2] / 51) + 16}m&#39;
return out</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.colors.Color" href="#TermTk.libbpytop.colors.Color">Color</a></code></h4>
<ul class="">
<li><code><a title="TermTk.libbpytop.colors.Color.bg" href="#TermTk.libbpytop.colors.Color.bg">bg</a></code></li>
<li><code><a title="TermTk.libbpytop.colors.Color.escape_color" href="#TermTk.libbpytop.colors.Color.escape_color">escape_color</a></code></li>
<li><code><a title="TermTk.libbpytop.colors.Color.fg" href="#TermTk.libbpytop.colors.Color.fg">fg</a></code></li>
<li><code><a title="TermTk.libbpytop.colors.Color.truecolor_to_256" href="#TermTk.libbpytop.colors.Color.truecolor_to_256">truecolor_to_256</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>