Skip to main content

Terminal I/O with a pixel-like abstraction

Project description

termpixels

the terminal as a character-cell matrix

Build Status Code Coverage

Get it

This project is on PyPI.

Alternatively, clone this repository and pip install -e . in the root directory.

Requires Python 3, and no dependencies*!

* Requires pytest to run tests

Purpose

Creating programs that run inside of terminals seems convoluted. The goal of termpixels is to abstract the terminal into a 2D array of "pixels", or character cells, which each contain a single text character, a foreground color, and a background color. termpixels allows you to modify the screen contents anywhere, at any time, and then handles updating the terminal automatically, as well as simplifying complicated terminal input processing.

Ultimately, this project seeks to make the terminal more accessible and more fun.

Limitations

There are lots of great libraries for coloring terminal output. This one is designed for full-screen applications that completely control the contents of the screen. That means that it, e.g., automatically saves and clears the screen, resets the cursor position, and accepts input in cbreak mode.

It's not the best solution for simply printing colored text, though you can do that if you want.

Demo

Demo gif

from termpixels import App, Color
from time import time
from math import sin

class FunTextApp(App):
    def on_frame(self):
        self.screen.clear()                           # remove everything from the screen
        text = "Hello world, from termpixels!"

        for i, c in enumerate(text):
            f = i / len(text)
            color = Color.hsl(f + time(), 1, 0.5)     # create a color from a hue value
            x = self.screen.w // 2 - len(text) // 2   # horizontally center the text
            offset = sin(time() * 3 + f * 5) * 2      # some arbitrary math
            y = round(self.screen.h / 2 + offset)     # vertical center with an offset
            self.screen.print(c, x + i, y, fg=color)  # draw the text to the screen buffer

        self.screen.update()                          # commit the changes to the screen

if __name__ == "__main__":
    FunTextApp().start()

More demos

Features

  • Unix (and Mac) terminal feature detection with terminfo (via Python curses)
  • Windows support through Win32 Console API
  • Terminal (re)size detection
  • Asynchronous input
    • Keyboard input with support for special keys like arrows, function keys, escape, etc.
    • Mouse click, scroll and move input in terminals supporting xterm mouse
  • 16, 256, and true color output (with detection for best supported mode)
  • Display the cursor anywhere (or hide it!)
  • Preserves the state of the user's terminal using alternate screen buffer.
  • Rudimentary support for fullwidth characters.
  • No reliance on ncurses except for terminfo lookup
  • 100% Python
  • and more

Inspiration

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

termpixels-0.0.11.tar.gz (21.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

termpixels-0.0.11-py3-none-any.whl (25.2 kB view details)

Uploaded Python 3

File details

Details for the file termpixels-0.0.11.tar.gz.

File metadata

  • Download URL: termpixels-0.0.11.tar.gz
  • Upload date:
  • Size: 21.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.7.3 requests-toolbelt/0.9.1 tqdm/4.30.0 CPython/3.7.4

File hashes

Hashes for termpixels-0.0.11.tar.gz
Algorithm Hash digest
SHA256 872bfc74f12a9cba4110f708d73afa85d5ee319264b810d44fd7910760804317
MD5 3ffdfc246a82486c1cbf4d2d8cb1b309
BLAKE2b-256 f750c425db5364a9307a430415ead69ad12ba15b2402fc8bf04fe9028f33e97c

See more details on using hashes here.

File details

Details for the file termpixels-0.0.11-py3-none-any.whl.

File metadata

  • Download URL: termpixels-0.0.11-py3-none-any.whl
  • Upload date:
  • Size: 25.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.7.3 requests-toolbelt/0.9.1 tqdm/4.30.0 CPython/3.7.4

File hashes

Hashes for termpixels-0.0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 bcd8cef6ee45539537d50696fad885d0ff1a1dd5047799948b297d4ebfec7c0c
MD5 897eff9087e81c31cad055516808691b
BLAKE2b-256 d69abc2d69e937c918634f1ccf8ae85ef9318535bf2894ed4232d210d276e0d2

See more details on using hashes here.

Supported by

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