/dedoc

terminal based viewer for DevDocs

Primary LanguageRustGNU General Public License v3.0GPL-3.0

dedoc

Search and view DevDocs from your terminal. Offline. Without browser. Without Python, Javascript or other inconveniences. Even without desktop environment.

App directory is ~/.dedoc. Docsets go into ~/.dedoc/docsets. You can also define $DEDOC_HOME environment variable to a directory of your choice.

Pages are displayed as markdown documents, and can be piped to less, glow if you're fancy, or any other pager or markdown reader.

If you have Rust, the preferred way to install dedoc is by running:

$ cargo install dedoc

Alternatively, precompiled x86_64 binaries for Windows and Linux are available in releases.

Usage

Remember that running anything with --help prints a more detailed usage:

$ dedoc [subcommand] --help

To start using dedoc and fetch all latest available docsets, first run:

$ dedoc fetch
Fetching `https://devdocs.io/docs.json`...
Writing `/home/user/.dedoc/docs.json`...
Fetching has successfully finished.

You can use -f flag to overwrite the fetched document if you encounter any issues.

To see available docsets, run:

$ dedoc ls
angular, ansible, apache_http_server, astro, async, ...

Which will list all docsets available to download from file which you previously fetched. If you need version-specific docs, like vue~3/~2, use -a flag, which will list everything.

Using -l flag will show only local docsets, and -n will print each docset on a separate line.

Download the documentation:

$ dedoc download rust
Downloading `rust`...
Received 46313067 bytes, file 1 of 2...
Received 3319078 bytes, file 2 of 2...
Extracting to `/home/user/.dedoc/docsets/rust`...
Unpacked 1899 files...
Install has successfully finished.

This will make the documentation available locally as a bunch of HTML pages.

You can use -f flag here too to forcefully overwrite the documentation.

To search, for instance, for BufReader from rust, run:

$ dedoc search rust bufreader
Searching for `bufreader`...
Exact matches in `rust`:
   1  std/io/struct.bufreader
         2  #method.borrow
         3  #method.borrow_mut
         4  #method.buffer
         5  #method.by_ref
         ...

You will get search results which are pages that match your query.

Results that start with # denote fragments. Opening them will result in the output of only that specific fragment. Likewise, opening a page will show the entire page. If you want to forcefully print the entire page instead of only a fragment, use -f flag.

For a more detailed search, use the -p flag. It makes search behave similarly to the grep command, and will look within all files, find all matches, and display them with some context around the found section.

Use -i to perform case-insensitive search, and -w to search for the whole sentence.

Finally, to see the page, you can run open with the path with optional fragment:

$ dedoc open rust "std/io/struct.bufreader#method.borrow"
...
fn borrow(&self) -> &T
Immutably borrows from an owned value. Read more
source
...

Using -h with open makes dedoc interpret supplied arguments as a path to HTML file and behave like a HTML to markdown transpiler. To make output wider or narrower, you can use -c flag with the number of columns.

Instead of typing out the whole path, you can conveniently append -o flag the your previous search command, which will open n-th matched page or fragment:

$ dedoc search rust bufreader -o 2

This will be as fast as open, due to search caching. -c flag here works the same way as in open.

You would probably like to use ss instead of search, pipe output to a pager or markdown reader, like less and forcefully enable colors for it with -c, turning the final command into:

$ dedoc -c ss rust bufreader -o 2 | less -r

Happy coding!