237 lines
7.2 KiB
Markdown
237 lines
7.2 KiB
Markdown
# dttyper
|
|
|
|
dttyper is a terminal-based typing test built with Rust and tui-rs forked from [ttyper](https://github.com/max-niederman/ttyper), that exports each tests into an influx database.
|
|
|
|
![Recording](./resources/recording.gif)
|
|
|
|
## installation
|
|
|
|
```sh
|
|
cargo build
|
|
cargo install --path .
|
|
```
|
|
|
|
# Develop (using crate2nix)
|
|
|
|
a. Enter dev shell via nix
|
|
|
|
```bash
|
|
nix develop
|
|
```
|
|
|
|
b. modify code and then run with nix
|
|
|
|
```bash
|
|
nix run
|
|
```
|
|
|
|
## usage
|
|
|
|
For usage instructions, you can run `dttyper --help`:
|
|
|
|
```
|
|
dttyper
|
|
Terminal-based typing test.
|
|
|
|
USAGE:
|
|
dttyper [FLAGS] [OPTIONS] [contents]
|
|
|
|
FLAGS:
|
|
-d, --debug
|
|
-h, --help Prints help information
|
|
--list-languages List installed languages
|
|
--no-backtrack Disable backtracking to completed words
|
|
-V, --version Prints version information
|
|
|
|
OPTIONS:
|
|
-c, --config <config> Use config file
|
|
-l, --language <language> Specify test language
|
|
--language-file <language-file> Specify test language in file
|
|
-w, --words <words> Specify word count [default: 50]
|
|
|
|
ARGS:
|
|
<contents>
|
|
```
|
|
|
|
### examples
|
|
|
|
| command | test contents |
|
|
| :------------------------------ | ----------------------------------------: |
|
|
| `dttyper` | 50 of the 200 most common english words |
|
|
| `dttyper -w 100` | 100 of the 200 most common English words |
|
|
| `dttyper -w 100 -l english1000` | 100 of the 1000 most common English words |
|
|
| `dttyper --language-file lang` | 50 random words from the file `lang` |
|
|
| `dttyper 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 |
|
|
| `english5000` | 5000 most common English words |
|
|
| `english10000` | 10000 most common English words |
|
|
| `english-advanced` | Advanced English words |
|
|
| `english-pirate` | 50 pirate speak English words |
|
|
| `german` | 207 most common German words |
|
|
| `german1000` | 1000 most common German words |
|
|
| `german10000` | 10000 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 |
|
|
| `ukrainian` | 100 most common Ukrainian words |
|
|
|
|
Additional languages can be added by creating a file in `DTTYPER_CONFIG_DIR/language` with a word on each line. On Linux, the config directory is `$HOME/.config/dttyper`; on Windows, it's `C:\Users\user\AppData\Roaming\dttyper`; and on macOS it's `$HOME/Library/Application Support/dttyper`.
|
|
|
|
# Statistics review
|
|
|
|
A [grafana panel](./panel.json) can be imported to view your reports!
|
|
![GrafanaStats](./resources/grafana.png)
|
|
|
|
## config
|
|
|
|
Configuration is specified by the `config.toml` file in the config directory (e.g. `$HOME/.config/dttyper/config.toml`).
|
|
|
|
The default values with explanations are below:
|
|
|
|
```toml
|
|
default_language = "english1000"
|
|
server = "http://localhost:8086"
|
|
token = "token"
|
|
bucket = "dttyper"
|
|
org = "dttyper"
|
|
keyboard = "Generic"
|
|
|
|
|
|
[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
|
|
prompt_current_correct = "green;bold"
|
|
# incorrectly typed letters in current word
|
|
prompt_current_incorrect = "red;bold"
|
|
# untyped letters in current word
|
|
prompt_current_untyped = "blue;bold"
|
|
|
|
# cursor character
|
|
prompt_cursor = "none;underlined"
|
|
|
|
## results styles ##
|
|
|
|
# overview text
|
|
results_overview = "cyan;bold"
|
|
# overview border
|
|
results_overview_border = "cyan"
|
|
|
|
# worst keys text
|
|
results_worst_keys = "cyan;bold"
|
|
# worst keys border
|
|
results_worst_keys_border = "cyan"
|
|
|
|
# results chart default (includes plotted data)
|
|
results_chart = "cyan"
|
|
# results chart x-axis label
|
|
results_chart_x = "cyan"
|
|
# results chart y-axis label
|
|
results_chart_y = "gray;italic"
|
|
|
|
# restart/quit prompt in results ui
|
|
results_restart_prompt = "gray;italic"
|
|
```
|
|
|
|
### style format
|
|
|
|
The configuration uses a custom style format which can specify most [ANSI escape styling codes](<https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters>), encoded as a string.
|
|
|
|
Styles begin with the color specification, which can be a single color (the foreground), or two colors separated 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 separated 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).
|
|
|
|
In [extended Backus-Naur form](https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_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"
|
|
| "crossed_out"
|
|
| "dim"
|
|
| "hidden"
|
|
| "italic"
|
|
| "rapid_blink"
|
|
| "slow_blink"
|
|
| "reversed"
|
|
| "underlined" ;
|
|
```
|
|
|
|
If you're familiar with [serde](https://serde.rs), you can also read [the deserialization code](./src/config.rs).
|