aboutsummaryrefslogtreecommitdiff

Iterative dictionary

The goal is to provide a frictionless dictionary searching experience: you type and the words show up on your prompt. Not need to wait a http request to go through.

As of right now, dict just provides a thin layer on top of sqlite's fts5^1 virtual table with support of spellfix^2 for word suggestion.

The whole database is loaded in memory for faster search and import process, which means that this application will consume substantial amounts of memory. On DE-EN dictionary, for example, it uses ~300MB, more then dict.cc tab on firefox (but less the most electron application out there)

Compiling

You will need go, gcc and sqlite-dev, then you can just run

make

For development you can run:

make run     # run the ui with default values
make import  # run the importer with default values
make version # run the version command

Installing

To install locally you may run:

PREFIX=$(HOME)/.local make install

Or for a system wide istall:

sudo make install

Usage

To run the importer you will need to download dict.cc dictionary. First go to its request page^3 and select your dictionary of choice. Once you download and unzip run the following command:

dict import --input dict.txt --output main.dict

Once the import process is complete[4] you can run the ui.

dict ui --database main.dict

TODO

  • On disk operation: to reduce memory footprint we can read from the disk. We would need to remove the instance response, since that is not possible reading from the disk.
  • Better coloring on the list.
  • Better default path for sqlite database making use of XDG variables.
  • [optional] Multi dictionary support. Support more than one dict at once.
  • Async response. Even though in memory is fast enough most often it can have some hiccups with 2 letter queries.
  • Finish server
  • Alpine package

[4]: It may take some time depending the size of the dictionary you selected