A fork of nov.el (Major mode for reading EPUBs in Emacs)
|
2 anni fa | |
---|---|---|
img | 7 anni fa | |
LICENSE | 7 anni fa | |
README.md | 5 anni fa | |
TODO.org | 4 anni fa | |
nov.el | 2 anni fa |
nov.el
provides a major mode for reading EPUB documents.
Features:
Set up the MELPA or MELPA Stable repository if you haven't already
and install with M-x package-install RET nov RET
.
Make sure you have an unzip
executable on PATH
, otherwise the
extraction of EPUB files will fail. If you for some reason have
unzip
in a non-standard location, customize nov-unzip-program
to
its path. You'll also need an Emacs compiled with libxml2
support,
otherwise rendering will fail.
Put the following in your init file:
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
While the defaults make for an acceptable reading experience, it can be improved with any of the following changes:
To change the default font, use M-x customize-face RET
variable-pitch
, pick a different family, save and apply. If you
dislike globally customizing that face, add the following to your init
file:
(defun my-nov-font-setup ()
(face-remap-add-relative 'variable-pitch :family "Liberation Serif"
:height 1.0))
(add-hook 'nov-mode-hook 'my-nov-font-setup)
To completely disable the variable pitch font, customize
nov-variable-pitch
to nil
. Text will be displayed with the
default face instead which should be using a monospace font.
By default text is filled by the window width. You can customize
nov-text-width
to a number of columns to change that:
(setq nov-text-width 80)
It's also possible to set it to t
to inhibit text filling, this can
be used in combination with visual-line-mode
and packages such as
visual-fill-column
to implement more flexible filling:
(setq nov-text-width t)
(setq visual-fill-column-center-text t)
(add-hook 'nov-mode-hook 'visual-line-mode)
(add-hook 'nov-mode-hook 'visual-fill-column-mode)
In case you're not happy with the rendering at all, you can either use
nov-pre-html-render-hook
and nov-post-html-render-hook
to adjust
the HTML before and after rendering or use your own rendering function
by customizing nov-render-html-function
to one that replaces HTML in
a buffer with something nicer than the default output.
Here's an advanced example of text justification with the justify-kp package:
(require 'justify-kp)
(setq nov-text-width t)
(defun my-nov-window-configuration-change-hook ()
(my-nov-post-html-render-hook)
(remove-hook 'window-configuration-change-hook
'my-nov-window-configuration-change-hook
t))
(defun my-nov-post-html-render-hook ()
(if (get-buffer-window)
(let ((max-width (pj-line-width))
buffer-read-only)
(save-excursion
(goto-char (point-min))
(while (not (eobp))
(when (not (looking-at "^[[:space:]]*$"))
(goto-char (line-end-position))
(when (> (shr-pixel-column) max-width)
(goto-char (line-beginning-position))
(pj-justify)))
(forward-line 1))))
(add-hook 'window-configuration-change-hook
'my-nov-window-configuration-change-hook
nil t)))
(add-hook 'nov-post-html-render-hook 'my-nov-post-html-render-hook)
This customization yields the following look:
Open the EPUB file with C-x C-f ~/novels/novel.epub
, scroll with
SPC
and switch chapters with n
and p
. More keybinds can be
looked up with F1 m
.
Invalid EPUB documents are not supported. Please use epubcheck to validate yours when running into an error.
In case the bug is specific to an EPUB document, please send attach it
to your email. I'll try my best to figure out the error, but chances
are you can figure it out as well by using the source view (bound to
v
for the current document and V
for the content file) to spot
the problematic XML.
The first one I've heard of is epubmode.el which is, well, see for yourself. You might find ereader more useful, especially if you're after Org integration and annotation support.