aboutsummaryrefslogtreecommitdiff
path: root/nov.el
diff options
context:
space:
mode:
authorLiam Hupfer <liam@hpfr.net>2022-04-28 16:05:13 +0200
committerVasilij Schneidermann <mail@vasilij.de>2022-04-28 16:07:00 +0200
commitfce7b0b0506231626887f131ca38e968e4c7f9e8 (patch)
tree995ac9e47e3d0bda1d7d75d1b8d152dbd7f6ff54 /nov.el
parent12faf16fbbaf09aadec26dfbda5809d886248c02 (diff)
Add support for arbitrary decompression tools
This allows users to use non-unzip decompression tools such as libarchive's `bsdtar`.
Diffstat (limited to 'nov.el')
-rw-r--r--nov.el18
1 files changed, 14 insertions, 4 deletions
diff --git a/nov.el b/nov.el
index 73e8591..d53e5d0 100644
--- a/nov.el
+++ b/nov.el
@@ -69,10 +69,18 @@
:group 'multimedia)
(defcustom nov-unzip-program (executable-find "unzip")
- "Path to `unzip` executable."
+ "Path to decompression executable."
:type '(file :must-match t)
:group 'nov)
+(defcustom nov-unzip-args '("-o" directory filename)
+ "Arguments to decompression executable.
+This variable expects a list of strings, except for `directory'
+and `filename' symbols, which will be replaced accordingly when
+opening an EPUB file."
+ :type 'list
+ :group 'nov)
+
(defcustom nov-variable-pitch t
"Non-nil if a variable pitch face should be used.
Otherwise the default face is used."
@@ -186,9 +194,11 @@ Each element of the stack is a list (NODEINDEX BUFFERPOS).")
(defun nov-unzip-epub (directory filename)
"Extract FILENAME into DIRECTORY.
Unnecessary nesting is removed with `nov-unnest-directory'."
- (let ((status (call-process nov-unzip-program nil "*nov unzip*" t
- "-od" directory filename))
- child)
+ (let* ((status (apply #'call-process nov-unzip-program nil "*nov unzip*" t
+ (mapcar (lambda (e) (cond ((eq e 'directory) directory)
+ ((eq e 'filename) filename)
+ (t e))) nov-unzip-args)))
+ child)
(while (setq child (nov-contains-nested-directory-p directory))
(nov-unnest-directory directory child))
;; HACK: unzip preserves file permissions, no matter how silly they