#reading #terminal #cli #bionic #rust

bin+lib bio-read

Bionic reading in terminal

4 releases

new 0.2.1 Jan 17, 2025
0.2.0 Jan 15, 2025
0.1.1 Jan 13, 2025
0.1.0 Jan 11, 2025

#93 in Biology

Download history 300/week @ 2025-01-10

300 downloads per month

AGPL-3.0-or-later

22KB
194 lines

bio-read

GitHub License GitHub Workflow Status GitHub Release GitHub Downloads (all assets, all releases) GitHub Downloads (all assets, latest release) Crates.io Version Crates.io Total Downloads

Bionic reading in terminal.

🚀 Installation

If you have cargo-binstall, you can install this tool by running:

cargo binstall bio-read

Otherwise, you can install it from source:

cargo install bio-read

📖 Usage

$ br --help
Usage: br [-i <input>] [-f <fixation-point>] [-e <emphasize>] [-d <de-emphasize>]

Bionic reading in terminal.

Options:
  -i, --input       the file to read from. Read from stdin if not specified.
  -f, --fixation-point
                    the fixation point. Should be in range [1, 5]. Default is 3.
  -e, --emphasize   customize how to emphasize the text. The emphasized text
                    will take the place of "{}". Example: --emphasize
                    "<em>{}</em>". Default to ansi bold.
  -d, --de-emphasize
                    customize how to de-emphasize the text. The de-emphasized
                    text will take the place of "{}". Example: --de-emphasize
                    "<de>{}</de>". Default to ansi dimmed.
  -h, --help        display usage information

For simple usage, run br with the -i flag, which is a shorthand for --input:

$ br -i file.txt

Alternatively, pipe the text you want to read into br:

$ cat file.txt | br

To set fixation points, use the -f flag, which is a shorthand for --fixation-point:

$ cat file.txt | br -f 1

📝 Note

Although this tool aims to be as close to the original bionic reading as possible, it is not exactly the same. Notably, the behavior differs when a word is too long, and it handles special characters differently. However, this tool is open-source, and guarantees linear time complexity and and constant memory usage.

✅ TODO

  • Streaming input and output (bio_read method of bio_read::BioReader)
  • Remove empty de-emphasized tags
  • Auto detection of whether ansi styling is supported (anstream::AutoStream?)
  • Allow overriding auto detection of ansi styling (anstream::ColorChoice?)

Dependencies

~2MB
~21K SLoC