Skip to main content

A thin, practical wrapper around terminal styling, screen positioning, and keyboard input.

Project description

Travis Continuous Integration Coveralls Code Coverage Latest Version Downloads Join Chat

Introduction

Blessed is a thin, practical wrapper around terminal capabilities in Python.

Coding with Blessed looks like this…

from blessed import Terminal

t = Terminal()

print(t.bold('Hi there!'))
print(t.bold_red_on_bright_green('It hurts my eyes!'))

with t.location(0, t.height - 1):
    print(t.center(t.blink('press any key to continue.')))

with t.cbreak():
    inp = t.inkey()
print('You pressed ' + repr(inp))

Brief Overview

Blessed is a more simplified wrapper around curses, providing :

  • Styles, color, and maybe a little positioning without necessarily clearing the whole screen first.

  • Works great with standard Python string formatting.

  • Provides up-to-the-moment 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: outputs to any file-like object such as StringIO, files, or pipes.

  • Uses the terminfo(5) database so it works with any terminal type and supports any terminal capability: No more C-like calls to tigetstr and tparm.

  • Keeps a minimum of internal state, so you can feel free to mix and match with calls to curses or whatever other terminal libraries you like.

  • Provides plenty of context managers to safely express terminal modes, automatically restoring the terminal to a safe state on exit.

  • Act intelligently when somebody redirects your output to a file, omitting all of the terminal sequences such as styling, colors, or positioning.

  • Dead-simple keyboard handling: safely decoding unicode input in your system’s preferred locale and supports application/arrow keys.

  • Allows the printable length of strings containing sequences to be determined.

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:

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:

from blessed import Terminal

term = Terminal()
with term.location(0, term.height - 1):
    print('This is' + term.underline('underlined') + '!')

Requirements

Blessed is tested with Python 2.7, 3.4, 3.5, 3.6, and 3.7 on Linux, Mac, and FreeBSD. Windows support was just added in October 2019, give it a try, and please report any strange issues!

Further Documentation

More documentation can be found at http://blessed.readthedocs.org/en/latest/

Bugs, Contributing, Support

Bugs or suggestions? Visit the issue tracker and file an issue. We welcome your bug reports and feature suggestions!

Would you like to contribute? That’s awesome! We’ve written a guide to help you.

Are you stuck and need support? Give stackoverflow a try. If you’re still having trouble, we’d like to hear about it! Open an issue in the issue tracker with a well-formed question.

License

Blessed is under the MIT License. See the LICENSE file.

Forked

Blessed is a fork of blessings. Changes since 1.7 have all been proposed but unaccepted upstream.

Furthermore, a project in the node.js language of the same name is not related, or a fork of each other in any way.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

blessed-1.16.1.tar.gz (85.2 kB view details)

Uploaded Source

Built Distribution

blessed-1.16.1-py2.py3-none-any.whl (63.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file blessed-1.16.1.tar.gz.

File metadata

  • Download URL: blessed-1.16.1.tar.gz
  • Upload date:
  • Size: 85.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.0

File hashes

Hashes for blessed-1.16.1.tar.gz
Algorithm Hash digest
SHA256 a222783b09f266cf76f5a01f4dfd9de79650f07cbefe2cbc67ec7bb9577c1dfa
MD5 d3f201098ee5c818b00fc762fcaf7b61
BLAKE2b-256 826781c1953f10e037a593eb06e4a971cc95f8b922989dfcf39f748afe1a3893

See more details on using hashes here.

File details

Details for the file blessed-1.16.1-py2.py3-none-any.whl.

File metadata

  • Download URL: blessed-1.16.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 63.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.0

File hashes

Hashes for blessed-1.16.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 01f3305a2f3c89a11020f2e167fe67b275697b3aead72dd869446aad47dd4707
MD5 a4ed7ed55e1af0ca4128a3db4a909022
BLAKE2b-256 fe31ab33f900a948491470bbd7f204a1887dcd4d7f4dbba6160eab5d55a84875

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page