ttyper

Crates.io GitHub Stars GitHub Workflow Status GitHub issues License

Ttyper is a terminal-based typing test built with Rust and tui-rs.

Recording

installation

pre-built binaries

Pre-built binaries are available for most architectures on GitHub releases. If your system is not supported or you have another problem, feel free to open an issue.

cargo

bash cargo install ttyper

usage

For usage instructions, you can run ttyper --help:

``` ttyper 1.0.0-pre.1 Terminal-based typing test.

USAGE: ttyper [FLAGS] [OPTIONS] [contents]

FLAGS: -d, --debug
-h, --help Prints help information --list-languages List installed languages -V, --version Prints version information

OPTIONS: -c, --config Use config file -l, --language Specify test language --language-file Specify test language in file -w, --words Specify word count [default: 50]

ARGS: ```

examples

| command | test contents | | :----------------------------- | ----------------------------------------: | | ttyper | 50 of the 200 most common english words | | ttyper -w 100 | 100 of the 200 most common English words | | ttyper -w 100 -l english1000 | 100 of the 1000 most common English words | | ttyper --language-file lang | 50 random words from the file lang | | ttyper text.txt | contents of text.txt split at newlines |

languages

The following languages are available by default:

| name | description | | :----------------- | ----------------------------------: | | c | The C programming language | | csharp | The C# programming language | | english100 | 100 most common English words | | english200 | 200 most common English words | | english1000 | 1000 most common English words | | english-advanced | Advanced English words | | german | 207 most common German words | | go | The Go programming language | | html | HyperText Markup Language | | java | The Java programming language | | javascript | The Javascript programming language | | norwegian | 200 most common Norwegian words | | php | The PHP programming language | | portuguese | 100 most common Portuguese words | | python | The Python programming language | | qt | The QT GUI framework | | ruby | The Ruby programming language | | rust | The Rust programming language | | spanish | 100 most common Spanish words |

Additional languages can be added by creating a file in TTYPER_CONFIG_DIR/language with a word on each line. On Linux, the config directory is $HOME/.config/ttyper; on Windows, it's C:\Users\user\AppData\Roaming\ttyper; and on macOS it's $HOME/Library/Application Support/ttyper.

config

Configuration is specified by the config.toml file in the config directory (e.g. $HOME/.config/ttyper/config.toml).

The default values with explanations are below:

```toml

the language used when one is not manually specified

default_language = "english200"

[theme]

default style (this includes empty cells)

default = "none"

title text styling

title = "white;bold"

test styles

input box border

input_border = "cyan"

prompt box border

prompt_border = "green"

correctly typed words

prompt_correct = "green"

incorrectly typed words

prompt_incorrect = "red"

untyped words

prompt_untyped = "gray"

correctly typed letters in current word

promptcurrentcorrect = "green;bold"

incorrectly typed letters in current word

promptcurrentincorrect = "red;bold"

untyped letters in current word

promptcurrentuntyped = "blue;bold"

results styles

overview text

results_overview = "cyan;bold"

overview border

resultsoverviewborder = "cyan"

worst keys text

resultsworstkeys = "cyan;bold"

worst keys border

resultsworstkeys_border = "cyan"

results chart default (includes plotted data)

results_chart = "cyan"

results chart x-axis label

resultschartx = "cyan"

results chart y-axis label

resultscharty = "gray;italic"

restart/quit prompt in results ui

resultsrestartprompt = "gray;italic" ```

style format

The configuration uses a custom style format which can specify most ANSI escape styling codes, encoded as a string.

Styles begin with the color specification, which can be a single color (the foreground), or two colors seperated by a colon (the foreground and background). Colors can be one of sixteen specified by your terminal, a 24-bit hex color code, none, or reset.

After the colors, you can optionally specify modifiers seperated by a semicolon. A list of modifiers is below:

Some examples:

In extended Backus-Naur form:

```ebnf style = colors, { ";", modifier }, [ ";" ] ;

colors = color, [ ":", color ] ; color = "none" | "reset" | "black" | "white" | "red" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "gray" | "darkgray" | "lightred" | "lightgreen" | "lightyellow" | "lightblue" | "lightmagenta" | "lightcyan" | 6 * hex digit ; hex digit = ? hexadecimal digit; 1-9, a-z, and A-Z ? ;

modifier = "bold" | "crossedout" | "dim" | "hidden" | "italic" | "rapidblink" | "slow_blink" | "reversed" | "underlined" ; ```

If you're familiar with serde, you can also read the deserialization code.