1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
# drae
[Español](README.es.md)
The Spanish dictionary of the Real Academia Española (RAE) in your terminal:
definitions, etymology, synonyms and antonyms, and full verb conjugation.
```console
$ drae casa
casa
Del lat. casa 'choza'.
1. f. Edificio para habitar.
Una casa de ocho plantas.
Sin.: vivienda, inmueble, domicilio, hogar, residencia, piso, apartamento…
2. f. Edificio de una o pocas plantas destinado a vivienda unifamiliar, en
oposición a piso.
Quieren vender el piso y comprarse una casa.
Sin.: chalé, chalet
```
Every lookup is stored in a local cache, so the second time it answers
instantly and offline.
The tool is meant for Spanish speakers, so its commands, flags and messages
are in Spanish; the code is in English.
## Install
```sh
git clone https://git.all.ar/pub/drae-cli.git
cd drae-cli
cargo install --path .
```
This puts the `drae` binary in `~/.cargo/bin`.
## Usage
| Command | What it does |
| --- | --- |
| `drae casa` | Defines a word |
| `drae definir sin` | Defines a word that clashes with a command name |
| `drae sin casa` | Synonyms and antonyms, sense by sense |
| `drae conjugar hablar` | Full conjugation, including voseo |
| `drae conjugar ser --modo subjuntivo` | A single mood |
| `drae dia` | The RAE word of the day |
| `drae azar` | A random word |
| `drae buscar edificio` | Searches inside the definitions already cached |
| `drae cache info \| listar \| limpiar` | Manages the cache |
Global options:
| Option | What it does |
| --- | --- |
| `--json` | Prints JSON instead of formatted text |
| `-a`, `--abreviaturas` | Expands the marks: `f. = nombre femenino` |
| `-A`, `--actualizar` | Ignores the cache and downloads again |
| `--sin-cache` | Neither reads nor writes the cache |
| `--ancho N` | Output width in columns |
| `--color auto\|always\|never` | When to use color |
| `--fuente auto\|dle\|rae-api` | Where to read from |
Color turns itself off when the output goes to a pipe or when `NO_COLOR` is set.
### When the word does not exist
The closest words are looked up in the system hunspell dictionary, offline and
ignoring accents:
```console
$ drae arbol
drae: «arbol» no está en el Diccionario
¿quiso decir árbol?
```
## Where the data comes from
| What | Source |
| --- | --- |
| Definitions, etymology, synonyms | [rae-api.com](https://rae-api.com), which serves the content of the *Diccionario de la lengua española* as JSON |
| Conjugation | [Spanish Wiktionary](https://es.wiktionary.org) (CC BY-SA) |
| Suggestions | `/usr/share/hunspell/es_*.dic`, local |
`dle.rae.es` is an optional source (`--fuente dle`). The site answers every
non-browser client with a Cloudflare challenge, so it almost never responds
from a terminal; its HTML reader is kept, and tested against a fixture, in
case it gets through on your network.
Conjugation comes from Wiktionary rather than the RAE for the same reason,
with a bonus: it includes voseo («vos hablás»), which the RAE tables leave out.
```console
$ drae conjugar ser --modo subjuntivo
Modo subjuntivo
Presente
que yo sea · que tú seas · que vos seas, seás · que él/ella/ud. sea ·
que nosotros seamos · que vosotros seáis · que uds./ellos sean
```
rae-api.com allows 10 requests per minute. The cache hides that, but keep it
in mind if you look up many words in a row.
## Configuration
Optional, in `~/.config/drae/config.toml`. Everything has a default and
command-line options always win over the file.
```toml
fuente = "auto" # auto | dle | rae-api
timeout = 15 # seconds per request
ancho = 80 # defaults to the terminal width
# cache = "~/.cache/drae/entries.db"
# diccionario = "/usr/share/hunspell/es_AR.dic"
```
## Development
```sh
cargo test # 70 tests, none of them touch the network
cargo build --release
```
The DLE reader is tested against `tests/fixtures/dle-casa.html`, a real page
trimmed down, so it stays verified even while the live path is blocked.
## License
MIT. The dictionary content belongs to the Real Academia Española; the
conjugation tables come from Wiktionary, under CC BY-SA.
|