Previously called The Emacs Reader.
An all-in-one document reader for GNU Emacs, supporting all major document formats. This package intends to take from doc-view, nov.el, and pdf-tools and make them better. And as such, it is effectively a drop-in replacement for them.
EMuReader (via MuPDF) can open all the formats below.
- EPUB
- MOBI
- FB2
- XPS/OpenXPS
- CBZ
These formats below are not really for document reading, and as such while they are supported by MuPDF and can be opened fine, it’s just not going to be that good of an experience. It should only be used for quickly checking the textual contents of the document, and certainly cannot be edited inside Emacs. (You may use LibreOffice for that.)
- ODT
- ODS
- ODP
- ODG
Using these formats is heavily discouraged, you should always prefer the above formats from LibreOffice (Which can also you help you edit these formats if you need to). But since MuPDF does come with some very minimal support for these proprietary formats as well, they can also be viewed:
- DOCX
- PPTX
- XLSX
You can install it from GNU ELPA via M-x package-install RET emureader
RET.
Or if you use use-package,
(use-package emureader)- Dependencies
mupdf@v1.26.0gccGNU Make
guix install emacs-emureaderThis will get the latest release of emureader. However, if you want to get latest features, bug fixes (and bugs!) to help us with testing emureader, you should use the master branch. You can instruct Guix to get it for you, like so,
guix install emacs-emureader --with-branch=emacs-emureader=masterYou can also upgrade an already installed package with,
guix upgrade emacs-emureader --with-branch=emacs-emureader=masterYou may replace the branch name as you need.
Follow this write up.
Follow the instructions here.
Install MuPDF using Homebrew,
brew install gcc
brew install make
brew install mupdfFind more information here.
- Clone the repository into ~~/.emacs.d/user-lisp/~,
git clone https://codeberg.org/monadicsheep/emureader ~/.emacs.d/user-lisp/emureaderYou may also symlink an existing checkout instead.
- You may now run
M-x prepare-user-lisp RETor restart Emacs to make Emacs automatically prepare and load emureader. - You also need to build the dynamic module, for this we provide the
M-x emureader-build RET. But you can also runmakedirectly yourself.
You can also utilize use-package to do the same, put the following in
your configuration,
(use-package emureader
:vc t
:load-path "/path/to/emureader")To test emureader in a default Emacs config, first generate the auto loads using make autoloads.
emacs -Q -L . -l emureader-autoloads.elThis command adds the current directory to path, and loads emureader-autoloads.el.
nfor going to next pagepfor going to previous pageC-nfor scrolling down.C-pfor scrolling up.C-bfor scrolling left.C-ffor scrolling right.Qfor closing the EMuReader buffer.M-<for going to the first page.M->for going to the last page.M-g gfor going to a particular page.M-vorPage Upfor scrolling to the top of the page.C-vorPage Downfor scrolling to the end of the page.SPC,S-SPC, andDELmake the above two commands keep scrolling the pages.- ===,
+, andC-<wheel-up>for zooming into the page. -andC-<wheel-down>for zooming out of the page.Hto make the page fit the height of the current window.Wto make the page fit the width of the current window.
This package is entirely distinct from DocView and pdf-tools in both its architecture and implementation. It leverages Emacs’ dynamic/native modules which allows it to interoperate with other programming languages outside of its Emacs Lisp environment.
Thus, we rely on the efficient MuPDF library as a shared object with which our dynamic modules work. All the tasks that require manual memory management, efficiently dealing with the rendered pages, and so on are delegated to the C backend, and Emacs takes care of exclusively what it’s good at: displaying produced pages, buffer management, and all round integration with the rest of Emacs.
For understanding how dynamic modules work within Emacs, please consult the following article I wrote:
https://www.phimulambda.org/blog/emacs-dynamic-module.html
I have been streaming the development of this package on my PeerTube channel: (phi (mu (lambda))).
The streams happen on Sundays, biweekly at around 2:30 PM UTC. Follow the channel on Peertube or my Mastodon to be notified when I stream. You can also find some stream notes here.
If you wish to join the discussion for the package, you should join the IRC channel #phi-mu-lambda on Libera.
Unless another license is listed, all files in emureader are licensed under the GNU General Public License version 3 (or at your option, any later version). See COPYING and CONTRIBUTORS for further details.
The logo of the project was made by Divya Ranjan Pattanaik and is shared under CC-BY-SA-4.0. The logo uses the following artworks from GNU:
The interesting history of different Emacs logos is outlined by Luis Fernandes, in his article on The Design of the Emacs Logo.
