diff options
author | Liam Hupfer <liam@hpfr.net> | 2022-04-28 16:05:13 +0200 |
---|---|---|
committer | Vasilij Schneidermann <mail@vasilij.de> | 2022-04-28 16:07:00 +0200 |
commit | fce7b0b0506231626887f131ca38e968e4c7f9e8 (patch) | |
tree | 995ac9e47e3d0bda1d7d75d1b8d152dbd7f6ff54 /nov.el | |
parent | 12faf16fbbaf09aadec26dfbda5809d886248c02 (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.el | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -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 |