In order to prevent bloating the shell with thousands of bash completion specs, bash completions are lazy-loaded as soon as the command is first tab-completed. This only works when the completionsdir contains a filename with the same name as the command being completed; as a result, calibre commands were able to be tab-completed only after 'calibre' was first completed. (This is unlike the zsh completions, which work when installed as a single unified file because zsh builds a cache of all known compdefs, and can load a completion on demand by reading from the file which contains it.) One common solution for programs which install several completions that share common helper functions is to install the completions in one file, and symlink all other command names to ensure the file is loaded by any name. I've opted for the other solution, which is to install each completion separately, since there is no common helper function to load once and use everywhere. As a result, there are some small speedups to be gained from only loading the completions being used. The main change is reindenting a lot of code to no longer be in a global context manager, but instead get written inside o_and_e/o_and_w. It's also necessary to write each individual completion file to the uninstaller, so do that.
calibre

calibre is an e-book manager. It can view, convert, edit and catalog e-books in all of the major e-book formats. It can also talk to e-book reader devices. It can go out to the internet and fetch metadata for your books. It can download newspapers and convert them into e-books for convenient reading. It is cross platform, running on Linux, Windows and macOS.
For more information, see the calibre About page
Screenshots
Usage
See the User Manual
Development
Setting up a development environment for calibre
A tarball of the source code for the current calibre release.
Bugs
Bug reports and feature requests should be made in the calibre bug tracker at launchpad. GitHub is only used for code hosting and pull requests.
Support calibre
calibre is a result of the efforts of many volunteers from all over the world. If you find it useful, please consider contributing to support its development. Donate to support calibre development.
Building calibre binaries
See Build instructions for instructions on how to build the calibre binaries and installers for all the platforms calibre supports.