aboutsummaryrefslogtreecommitdiff
path: root/emacs/.emacs.d/lisp/my
diff options
context:
space:
mode:
authorYuchen Pei <id@ypei.org>2025-02-09 13:48:35 +1100
committerYuchen Pei <id@ypei.org>2025-02-09 13:48:35 +1100
commit74fa0df00b35ee09cc1b989c4bfc4c2d56a2a49f (patch)
treeef93a4f76581804dc0db4fa76f26d9aa7a3d8d4d /emacs/.emacs.d/lisp/my
parent56543af6ba27360dd43803d7c08cf47cadf00e31 (diff)
[emacs] belf: extract first page of pdf as cover
Diffstat (limited to 'emacs/.emacs.d/lisp/my')
-rw-r--r--emacs/.emacs.d/lisp/my/belf.el42
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 ()