Metadata-Version: 2.5
Name: qansitextviewer
Version: 0.1.1
Summary: A Qt-based viewer for ANSI-encoded text files.
Project-URL: Homepage, https://github.com/tanishq-kumar/QAnsiTextViewer
Project-URL: Documentation, https://tanishq-kumar.github.io/QAnsiTextViewer/
Project-URL: Repository, https://github.com/tanishq-kumar/QAnsiTextViewer
Project-URL: Issues, https://github.com/tanishq-kumar/QAnsiTextViewer/issues
Project-URL: Changelog, https://github.com/tanishq-kumar/QAnsiTextViewer/blob/main/CHANGELOG.md
Project-URL: X, https://x.com/tanishqlife
Author: Tanishq Kumar
License-Expression: GPL-2.0-only
License-File: LICENSE
Keywords: ansi,log-viewer,pyside6,qt,terminal,widget
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Widget Sets
Classifier: Topic :: System :: Logging
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: pyside6>=6.5.0
Description-Content-Type: text/markdown

# QAnsiTextViewer

![CI](https://github.com/tanishq-kumar/QAnsiTextViewer/actions/workflows/ci.yml/badge.svg) [![Docs](https://img.shields.io/badge/docs-live-blue)](https://tanishq-kumar.github.io/QAnsiTextViewer/) [![PyPI](https://img.shields.io/pypi/v/qansitextviewer)](https://pypi.org/project/qansitextviewer/)

ANSI Text Viewer - QT Widget

## Install

```bash
uv add qansitextviewer
# or from GitHub / local build:
uv add git+https://github.com/tanishq-kumar/QAnsiTextViewer
uv build && uv pip install dist/qansitextviewer-*.whl
# or clone + develop:
uv sync --group dev
```

Requires Python `>=3.11`, PySide6 `>=6.5.0`.

## Quick start

```python
from PySide6.QtWidgets import QApplication
from ansi_text_viewer import AnsiTextViewer

app = QApplication([])
viewer = AnsiTextViewer()
viewer.appendAnsiText("\x1b[31mred\x1b[0m plain\n")
viewer.highlight_search("red")  # F3 / Shift+F3 navigates, Esc clears
viewer.setTheme("dark")
viewer.show()
app.exec()
```

Full demo app: `just demo` (or `uv run python demo.py`).

## API cheatsheet

| Task               | Call                                                                                                                                                                                  |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Append / replace   | `appendAnsiText(s)`, `setAnsiText(s)` (`\r` = progress overwrite)                                                                                                                     |
| Non-blocking burst | `appendAnsiTextAsync(s)` + `asyncAppendProgress` / `asyncAppendFinished`, `cancelAsyncAppends()`                                                                                      |
| Search / filter    | `highlight_search(q, use_regex, match_case)`, `next_match()`, `prev_match()`, `filter_search(q, ...)`                                                                                 |
| Limits             | `setMaximumBlocks(10000)`, `setMaxLineLength(10000)` (`0` = off)                                                                                                                      |
| Look               | `setTheme("light"\|"dark"\|"auto")`, `setMonospaceFont()`, `setFontSize()`, `setFontFamily()`, `useSystemFont()`, `setWordWrapEnabled()`, `setCurrentLineHighlightEnabled()`          |
| Appearance         | Theme-following defaults; `setDefaultColors(fg, bg)`, `setColorsFollowTheme(bool)`, `setAnsiPaletteColor()`, `setLogLevelColors()`, `setBookmarkColor()`, `setSearchHighlightColor()` |
| Log helpers        | `setTimestampEnabled()`, `setLogLevelHighlighting()`, `setSyntaxHighlighting()`                                                                                                       |
| Custom highlight   | `add_highlight_rule(rule)` with `spans(text)` (`ansi_text_viewer.highlight`)                                                                                                          |
| Bookmarks          | `toggleBookmark()` (or gutter click), `gotoNextBookmark()`, `bookmarkedLines()`, `bookmarksChanged` signal                                                                            |
| Copy / export      | `copySelectedPlainText()`, `copySelectedWithAnsi()`, `exportToFile(path)` (.txt/.html/.md)                                                                                            |
| Sessions           | `saveSession("s.json")`, `loadSession("s.json")`                                                                                                                                      |
| Shortcuts          | `Ctrl+F` → `findRequested`, `F3`/`Shift+F3`, `Esc` (app-wide)                                                                                                                         |

## Dev Commands

`just test` · `just demo` · `just run` · `just lint` · `just typecheck` · `just docs-build` — see `justfile`.
