Skip to content

Python package and CLI tool for creating and interpreting ANSI escape codes

License

Notifications You must be signed in to change notification settings

cariad/ansiscape

Repository files navigation

ansiscape

CircleCI codecov Documentation Status

ansiscape is a Python package and CLI tool for creating and interpreting ANSI escape codes.

  • Support for named, 8-bit and 24-bit colours.
  • Create formatted strings with nested sequences and property reversions.
  • Convert embedded escape codes into explanatory dictionaries.
  • Write sequences as fully resolved strings and explanatory JSON.

Full documentation is published at ansiscape.readthedocs.io.

Installation

ansiscape requires Python 3.8 or later.

pip install ansiscape

Basic CLI usage

ansiscape on the command line will read from stdin and emit a JSON document describing the text and its escape codes.

For example:

ls --color | ansiscape
[{"background": -1, "foreground": 4, "weight": 1},"ansiscape",{"background": -1},"\n",{"foreground": 4, "weight": 1},"ansiscape.egg-info",{"background": -1},"\n",{"foreground": 2, "weight": 1},"build.sh",{"background": -1},"\ncoverage.xml\n",{"foreground": 4, "weight": 1},"dist",{"background": -1},"\n",{"foreground": 4, "weight": 1},"docs",{"background": -1},"\n",{"foreground": 4, "weight": 1},"htmlcov",{"background": -1},"\nLICENSE\n",{"foreground": 2, "weight": 1},"lint.sh",{"background": -1},"\nMANIFEST.in\nmkdocs.yml\nmypy.ini\nPipfile\nPipfile.lock\npyproject.toml\nREADME.md\nsetup.py\n",{"foreground": 2, "weight": 1},"test-cli.sh",{"background": -1},"\n",{"foreground": 4, "weight": 1},"tests",{"background": -1},"\n",{"foreground": 2, "weight": 1},"test.sh",{"background": -1}]

Full documentation is published at ansiscape.readthedocs.io.

Basic Python usage

ansiscape provides a library of functions for formatting text.

For example, to make text bold:

from ansiscape import heavy

print(heavy("Hello, world!"))
�[1mHello, world!�[22m

These functions can be nested to create complex formatted strings. Specific instructions can also be embedded:

from ansiscape import Interpretation, Sequence, heavy
from ansiscape.enums import MetaInterpretation, Weight

sequence = Sequence(
    Interpretation(weight=Weight.HEAVY),
    "Hello, world!",
    Interpretation(weight=MetaInterpretation.REVERT),
)

print(sequence)
�[1mHello, world!�[22m

Full documentation is published at ansiscape.readthedocs.io.

👋 Hello!

Hello! I'm Cariad Eccleston and I'm an independent/freelance software engineer. If my work has value to you, please consider sponsoring.

If you ever raise a bug, request a feature or ask a question then mention that you're a sponsor and I'll respond as a priority. Thank you!