tess-cli 0.33.0

A less-style terminal pager for files, pipes, and live logs — with structured-log filtering, pretty-printing (JSON/YAML/TOML/XML/HTML/CSV), ANSI passthrough, multi-file navigation, and ctags jumping. Rust, macOS + Linux.
Documentation
#![cfg(feature = "image")]
use tess::image_render::{decode_image, render_image, sniff_image_format, AsciiStyle};

fn png_bytes(w: u32, h: u32, px: [u8; 4]) -> Vec<u8> {
    let img = image::RgbaImage::from_pixel(w, h, image::Rgba(px));
    let mut buf = std::io::Cursor::new(Vec::new());
    image::DynamicImage::ImageRgba8(img)
        .write_to(&mut buf, image::ImageFormat::Png)
        .unwrap();
    buf.into_inner()
}

#[test]
fn detect_decode_render_roundtrip() {
    let bytes = png_bytes(40, 40, [255, 255, 255, 255]);
    assert_eq!(sniff_image_format(&bytes), Some("png"));
    let img = decode_image(&bytes).unwrap();
    let grid = render_image(&img, 20, AsciiStyle::Ramp, true);
    assert!(grid.iter().all(|r| r.len() == 20));
    assert!(matches!(grid[0][0], tess::render::Cell::Char { ch: '@', .. }));
}