diff options
Diffstat (limited to 'emacs/.emacs.d/lisp/my/belf.el')
-rw-r--r-- | emacs/.emacs.d/lisp/my/belf.el | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/emacs/.emacs.d/lisp/my/belf.el b/emacs/.emacs.d/lisp/my/belf.el index 0e7a557..9eef0b8 100644 --- a/emacs/.emacs.d/lisp/my/belf.el +++ b/emacs/.emacs.d/lisp/my/belf.el @@ -162,24 +162,40 @@ found (file-exists-p cover-file-name))) (when found cover-file-name))) +(defun belf-pdf-page-one-cover (file-name) + "Extract the first page of a pdf file as cover." + (let ((cover-file (file-name-with-extension file-name "jpg"))) + (with-temp-buffer + (if (eq 0 + (call-process "gs" nil t t + "-dNOPAUSE" "-dBATCH" "-sDEVICE=jpeg" "-r300" + (format "-sOutputFile=%s" cover-file) + "-dFirstPage=1" "-dLastPage=1" file-name)) + cover-file + (message "Failed to extract cover from PDF: %s" (buffer-string)) + nil)))) + (defun belf-book-cover (file-name) "Get book cover. First look for an image file with the same file name. Then for PDF, extract the first page. -For EPUB, looks for a cover image in the file. If not found, extract the first page." - (when-let ((cover-file-name (belf-locate-book-cover file-name))) - (concat "file://" cover-file-name)) - (when (equal "epub" (file-name-extension file-name)) - (when-let* ((content-file-name (belf-epub-content-file-name file-name)) - (cover-file - (belf-epub-cover-file-name file-name content-file-name)) - (cover-file-name (file-name-with-extension - file-name - (file-name-extension cover-file)))) - (call-process "unzip" nil `(:file ,cover-file-name) nil - "-p" file-name cover-file) - (concat "file://" cover-file-name))) +For EPUB, looks for a cover image in the file." + (if-let ((cover-file-name (belf-locate-book-cover file-name))) + (concat "file://" cover-file-name) + (when (equal "epub" (file-name-extension file-name)) + (when-let* ((content-file-name (belf-epub-content-file-name file-name)) + (cover-file + (belf-epub-cover-file-name file-name content-file-name)) + (cover-file-name (file-name-with-extension + file-name + (file-name-extension cover-file)))) + (call-process "unzip" nil `(:file ,cover-file-name) nil + "-p" file-name cover-file) + (format "file://%s" cover-file-name))) + (when (equal "pdf" (file-name-extension file-name)) + (when (setq cover-file-name (belf-pdf-page-one-cover file-name)) + (format "file://%s" cover-file-name)))) ) (defun belf-book-infobox-at-point () |