Spaces:
No application file
No application file
Metadata-Version: 2.1 | |
Name: blessed | |
Version: 1.20.0 | |
Summary: Easy, practical library for making terminal apps, by providing an elegant, well-documented interface to Colors, Keyboard input, and screen Positioning capabilities. | |
Home-page: https://github.com/jquast/blessed | |
Author: Jeff Quast, Erik Rose, Avram Lubkin | |
Author-email: contact@jeffquast.com | |
License: MIT | |
Project-URL: Documentation, https://blessed.readthedocs.io | |
Keywords: terminal,sequences,tty,curses,ncurses,formatting,style,color,console,keyboard,ansi,xterm | |
Classifier: Intended Audience :: Developers | |
Classifier: Natural Language :: English | |
Classifier: Development Status :: 5 - Production/Stable | |
Classifier: Environment :: Console | |
Classifier: Environment :: Console :: Curses | |
Classifier: License :: OSI Approved :: MIT License | |
Classifier: Operating System :: POSIX | |
Classifier: Operating System :: Microsoft :: Windows | |
Classifier: Programming Language :: Python :: 2 | |
Classifier: Programming Language :: Python :: 2.7 | |
Classifier: Programming Language :: Python :: 3 | |
Classifier: Programming Language :: Python :: 3.4 | |
Classifier: Programming Language :: Python :: 3.5 | |
Classifier: Programming Language :: Python :: 3.6 | |
Classifier: Programming Language :: Python :: 3.7 | |
Classifier: Programming Language :: Python :: 3.8 | |
Classifier: Programming Language :: Python :: 3.9 | |
Classifier: Programming Language :: Python :: 3.10 | |
Classifier: Programming Language :: Python :: 3.11 | |
Classifier: Topic :: Software Development :: Libraries | |
Classifier: Topic :: Software Development :: User Interfaces | |
Classifier: Topic :: Terminals | |
Classifier: Typing :: Typed | |
Requires-Python: >=2.7 | |
License-File: LICENSE | |
Requires-Dist: wcwidth (>=0.1.4) | |
Requires-Dist: six (>=1.9.0) | |
Requires-Dist: jinxed (>=1.1.0) ; platform_system == "Windows" | |
Requires-Dist: ordereddict (==1.1) ; python_version < "2.7" | |
Requires-Dist: backports.functools-lru-cache (>=1.2.1) ; python_version < "3.2" | |
| |pypi_downloads| |codecov| |windows| |linux| |mac| |bsd| | |
Introduction | |
============ | |
Blessed is an easy, practical *library* for making *terminal* apps, by providing an elegant, | |
well-documented interface to Colors_, Keyboard_ input, and screen position and Location_ | |
capabilities. | |
.. code-block:: python | |
from blessed import Terminal | |
term = Terminal() | |
print(term.home + term.clear + term.move_y(term.height // 2)) | |
print(term.black_on_darkkhaki(term.center('press any key to continue.'))) | |
with term.cbreak(), term.hidden_cursor(): | |
inp = term.inkey() | |
print(term.move_down(2) + 'You pressed ' + term.bold(repr(inp))) | |
.. figure:: https://dxtz6bzwq9sxx.cloudfront.net/demo_basic_intro.gif | |
:alt: Animation of running the code example | |
It's meant to be *fun* and *easy*, to do basic terminal graphics and styling with Python using | |
*blessed*. Terminal_ is the only class you need to import and the only object you should need for | |
Terminal capabilities. | |
Whether you want to improve CLI apps with colors, or make fullscreen applications or games, | |
*blessed* should help get you started quickly. Your users will love it because it works on Windows, | |
Mac, and Linux, and you will love it because it has plenty of documentation and examples! | |
Full documentation at https://blessed.readthedocs.io/en/latest/ | |
Examples | |
-------- | |
.. figure:: https://dxtz6bzwq9sxx.cloudfront.net/blessed_demo_intro.gif | |
:alt: Animations of x11-colorpicker.py, bounce.py, worms.py, and plasma.py | |
x11-colorpicker.py_, bounce.py_, worms.py_, and plasma.py_, from our repository. | |
Exemplary 3rd-party examples which use *blessed*, | |
.. figure:: https://dxtz6bzwq9sxx.cloudfront.net/demo_3rdparty_voltron.png | |
:alt: Screenshot of 'Voltron' (By the author of Voltron, from their README). | |
Voltron_ is an extensible debugger UI toolkit written in Python | |
.. figure:: https://dxtz6bzwq9sxx.cloudfront.net/demo_3rdparty_cursewords.gif | |
:alt: Animation of 'cursewords' (By the author of cursewords, from their README). | |
cursewords_ is "graphical" command line program for solving crossword puzzles in the terminal. | |
.. figure:: https://dxtz6bzwq9sxx.cloudfront.net/demo_3rdparty_githeat.gif | |
:alt: Animation of 'githeat.interactive', using blessed repository at the time of capture. | |
GitHeat_ builds an interactive heatmap of git history. | |
.. figure:: https://dxtz6bzwq9sxx.cloudfront.net/demo_3rdparty_dashing.gif | |
:alt: Animations from 'Dashing' (By the author of Dashing, from their README) | |
Dashing_ is a library to quickly create terminal-based dashboards. | |
.. figure:: https://dxtz6bzwq9sxx.cloudfront.net/demo_3rdparty_enlighten.gif | |
:alt: Animations from 'Enlighten' (By the author of Enlighten, from their README) | |
Enlighten_ is a console progress bar library that allows simultaneous output without redirection. | |
.. figure:: https://dxtz6bzwq9sxx.cloudfront.net/blessed_3rdparty_macht.gif | |
:alt: Demonstration of 'macht', a 2048 clone | |
macht_ is a clone of the (briefly popular) puzzle game, 2048. | |
Requirements | |
------------ | |
*Blessed* works with Windows, Mac, Linux, and BSD's, on Python 2.7, 3.4, 3.5, 3.6, 3.7, and 3.8. | |
Brief Overview | |
-------------- | |
*Blessed* is more than just a Python wrapper around curses_: | |
* Styles_, Colors_, and maybe a little positioning without necessarily clearing the whole screen | |
first. | |
* Works great with Python's new f-strings_ or any other kind of string formatting. | |
* Provides up-to-the-moment Location_ and terminal height and width, so you can respond to terminal | |
size changes. | |
* Avoids making a mess if the output gets piped to a non-terminal, you can output sequences to any | |
file-like object such as *StringIO*, files, pipes or sockets. | |
* Uses `terminfo(5)`_ so it works with any terminal type and capability: No more C-like calls to | |
tigetstr_ and tparm_. | |
* Non-obtrusive calls to only the capabilities database ensures that you are free to mix and match | |
with calls to any other curses application code or library you like. | |
* Provides context managers `Terminal.fullscreen()`_ and `Terminal.hidden_cursor()`_ to safely | |
express terminal modes, curses development will no longer fudge up your shell. | |
* Act intelligently when somebody redirects your output to a file, omitting all of the special | |
sequences colors, but still containing all of the text. | |
*Blessed* is a fork of `blessings <https://github.com/erikrose/blessings>`_, which does all of | |
the same above with the same API, as well as following **enhancements**: | |
* Windows support, new since Dec. 2019! | |
* Dead-simple keyboard handling: safely decoding unicode input in your system's preferred locale and | |
supports application/arrow keys. | |
* 24-bit color support, using `Terminal.color_rgb()`_ and `Terminal.on_color_rgb()`_ and all X11 | |
Colors_ by name, and not by number. | |
* Determine cursor location using `Terminal.get_location()`_, enter key-at-a-time input mode using | |
`Terminal.cbreak()`_ or `Terminal.raw()`_ context managers, and read timed key presses using | |
`Terminal.inkey()`_. | |
* Allows the *printable length* of strings that contain sequences to be determined by | |
`Terminal.length()`_, supporting additional methods `Terminal.wrap()`_ and `Terminal.center()`_, | |
terminal-aware variants of the built-in function `textwrap.wrap()`_ and method `str.center()`_, | |
respectively. | |
* Allows sequences to be removed from strings that contain them, using `Terminal.strip_seqs()`_ or | |
sequences and whitespace using `Terminal.strip()`_. | |
Before And After | |
---------------- | |
With the built-in curses_ module, this is how you would typically | |
print some underlined text at the bottom of the screen: | |
.. code-block:: python | |
from curses import tigetstr, setupterm, tparm | |
from fcntl import ioctl | |
from os import isatty | |
import struct | |
import sys | |
from termios import TIOCGWINSZ | |
# If we want to tolerate having our output piped to other commands or | |
# files without crashing, we need to do all this branching: | |
if hasattr(sys.stdout, 'fileno') and isatty(sys.stdout.fileno()): | |
setupterm() | |
sc = tigetstr('sc') | |
cup = tigetstr('cup') | |
rc = tigetstr('rc') | |
underline = tigetstr('smul') | |
normal = tigetstr('sgr0') | |
else: | |
sc = cup = rc = underline = normal = '' | |
# Save cursor position. | |
print(sc) | |
if cup: | |
# tigetnum('lines') doesn't always update promptly, hence this: | |
height = struct.unpack('hhhh', ioctl(0, TIOCGWINSZ, '\000' * 8))[0] | |
# Move cursor to bottom. | |
print(tparm(cup, height - 1, 0)) | |
print('This is {under}underlined{normal}!' | |
.format(under=underline, normal=normal)) | |
# Restore cursor position. | |
print(rc) | |
The same program with *Blessed* is simply: | |
.. code-block:: python | |
from blessed import Terminal | |
term = Terminal() | |
with term.location(0, term.height - 1): | |
print('This is ' + term.underline('underlined') + '!', end='') | |
.. _curses: https://docs.python.org/3/library/curses.html | |
.. _tigetstr: http://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man3/tigetstr.3 | |
.. _tparm: http://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man3/tparm.3 | |
.. _`terminfo(5)`: https://invisible-island.net/ncurses/man/terminfo.5.html | |
.. _str.center(): https://docs.python.org/3/library/stdtypes.html#str.center | |
.. _textwrap.wrap(): https://docs.python.org/3/library/textwrap.html#textwrap.wrap | |
.. _Terminal: https://blessed.readthedocs.io/en/stable/terminal.html | |
.. _`Terminal.fullscreen()`: https://blessed.readthedocs.io/en/latest/api/terminal.html#blessed.terminal.Terminal.fullscreen | |
.. _`Terminal.get_location()`: https://blessed.readthedocs.io/en/latest/location.html#finding-the-cursor | |
.. _`Terminal.color_rgb()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.color_rgb | |
.. _`Terminal.hidden_cursor()`: https://blessed.readthedocs.io/en/latest/api/terminal.html#blessed.terminal.Terminal.hidden_cursor | |
.. _`Terminal.on_color_rgb()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.on_color_rgb | |
.. _`Terminal.length()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.length | |
.. _`Terminal.strip()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.strip | |
.. _`Terminal.rstrip()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.rstrip | |
.. _`Terminal.lstrip()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.lstrip | |
.. _`Terminal.strip_seqs()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.strip_seqs | |
.. _`Terminal.wrap()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.wrap | |
.. _`Terminal.center()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.center | |
.. _`Terminal.rjust()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.rjust | |
.. _`Terminal.ljust()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.ljust | |
.. _`Terminal.cbreak()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.cbreak | |
.. _`Terminal.raw()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.raw | |
.. _`Terminal.inkey()`: https://blessed.readthedocs.io/en/stable/api/terminal.html#blessed.terminal.Terminal.inkey | |
.. _Colors: https://blessed.readthedocs.io/en/stable/colors.html | |
.. _Styles: https://blessed.readthedocs.io/en/stable/terminal.html#styles | |
.. _Location: https://blessed.readthedocs.io/en/stable/location.html | |
.. _Keyboard: https://blessed.readthedocs.io/en/stable/keyboard.html | |
.. _Examples: https://blessed.readthedocs.io/en/stable/examples.html | |
.. _x11-colorpicker.py: https://blessed.readthedocs.io/en/stable/examples.html#x11-colorpicker-py | |
.. _bounce.py: https://blessed.readthedocs.io/en/stable/examples.html#bounce-py | |
.. _worms.py: https://blessed.readthedocs.io/en/stable/examples.html#worms-py | |
.. _plasma.py: https://blessed.readthedocs.io/en/stable/examples.html#plasma-py | |
.. _Voltron: https://github.com/snare/voltron | |
.. _cursewords: https://github.com/thisisparker/cursewords | |
.. _GitHeat: https://github.com/AmmsA/Githeat | |
.. _Dashing: https://github.com/FedericoCeratto/dashing | |
.. _Enlighten: https://github.com/Rockhopper-Technologies/enlighten | |
.. _macht: https://github.com/rolfmorel/macht | |
.. _f-strings: https://docs.python.org/3/reference/lexical_analysis.html#f-strings | |
.. |pypi_downloads| image:: https://img.shields.io/pypi/dm/blessed.svg?logo=pypi | |
:alt: Downloads | |
:target: https://pypi.org/project/blessed/ | |
.. |codecov| image:: https://codecov.io/gh/jquast/blessed/branch/master/graph/badge.svg | |
:alt: codecov.io Code Coverage | |
:target: https://codecov.io/gh/jquast/blessed/ | |
.. |linux| image:: https://img.shields.io/badge/Linux-yes-success?logo=linux | |
:alt: Linux supported | |
.. |windows| image:: https://img.shields.io/badge/Windows-NEW-success?logo=windows | |
:alt: Windows supported | |
.. |mac| image:: https://img.shields.io/badge/MacOS-yes-success?logo=apple | |
:alt: MacOS supported | |
.. |bsd| image:: https://img.shields.io/badge/BSD-yes-success?logo=freebsd | |
:alt: BSD supported | |