Ttyper is a terminal-based typing test built with Rust and tui-rs.
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.
bash
cargo install ttyper
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
ARGS:
| 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 |
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
.
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
default_language = "english200"
[theme]
default = "none"
title = "white;bold"
input_border = "cyan"
prompt_border = "green"
prompt_correct = "green"
prompt_incorrect = "red"
prompt_untyped = "gray"
promptcurrentcorrect = "green;bold"
promptcurrentincorrect = "red;bold"
promptcurrentuntyped = "blue;bold"
results_overview = "cyan;bold"
resultsoverviewborder = "cyan"
resultsworstkeys = "cyan;bold"
resultsworstkeys_border = "cyan"
results_chart = "cyan"
resultschartx = "cyan"
resultscharty = "gray;italic"
resultsrestartprompt = "gray;italic" ```
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:
bold
crossed_out
dim
hidden
italic
rapid_blink
slow_blink
reversed
underlined
Some examples:
blue:white;italic
specifies italic blue text on a white background.none;italic;bold;underlined
specifies underlined, italicized, and bolded text with no set color or background.00ff00:000000
specifies text of color #00ff00
(pure green) on a background of #000000
(pure black).```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.