Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dsherret/console_static_text

Logging for text that should stay in the same place in a console.
https://github.com/dsherret/console_static_text

Last synced: about 2 months ago
JSON representation

Logging for text that should stay in the same place in a console.

Awesome Lists containing this project

README

        

# console_static_text

[![](https://img.shields.io/crates/v/console_static_text.svg)](https://crates.io/crates/console_static_text)

Crate for logging text that should stay in the same place in a console. This measures words to handle wrapping and has some console resizing support. Example use might be for displaying progress bars or rendering selections.

Example use with the [console](https://crates.io/crates/console) crate:

```rs
use console_static_text::ConsoleSize;
use console_static_text::ConsoleStaticText;

let mut static_text = ConsoleStaticText::new(|| {
let size = console::Term::stderr().size();
ConsoleSize {
rows: Some(size.0),
cols: Some(size.1),
}
});

static_text.eprint("initial\ntext");
std::thread::sleep_ms(1000);

// will clear the previous text and put this new text
static_text.eprint("new text");
std::thread::sleep_ms(1000);

// or get and output the text manually
if let Some(text) = static_text.render("new text") {
eprint!("{}", text);
std::thread::sleep_ms(1000);
}

// clear out the previous text
static_text.eprint_clear();
```

## Hanging indentation

To get hanging indentation, you can use the lower level "items" api.

```rs
static_text.eprint_items(vec![
TextItem::Text(Cow::Borrowed("Some non-hanging text.")),
TextItem::HangingText {
text: Cow::Borrowed("some long text that will wrap at a certain width"),
indent: 4,
},
].iter());
```

This is useful when implementing something like a selection UI where you want text to wrap with hanging indentation.

## "sized" feature

By default, this crate encourages you to use your own functionality for getting the console size since you'll likely already have a dependency that does that, but if not, then you can use the `sized` Cargo.toml feature.

```toml
[dependencies]
console_static_text = { version = "...", features = ["sized"] }
```

Then you can use the `new_sized` function, which will get the console size automatically:

```rs
let mut static_text = ConsoleStaticText::new_sized();

static_text.eprint("initial\ntext");
std::thread::sleep_ms(1000);

static_text.eprint("next text");
```