aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--emacs/.emacs.d/init.el1
-rw-r--r--emacs/.emacs.d/init/ycp-markup.el3
-rw-r--r--emacs/.emacs.d/init/ycp-web.el3
-rw-r--r--emacs/.emacs.d/lisp/my/belf.el102
4 files changed, 97 insertions, 12 deletions
diff --git a/emacs/.emacs.d/init.el b/emacs/.emacs.d/init.el
index 2d229b9..e066568 100644
--- a/emacs/.emacs.d/init.el
+++ b/emacs/.emacs.d/init.el
@@ -53,6 +53,7 @@
(require 'ycp-web)
(require 'ycp-time)
(require 'ycp-markup)
+(require 'ycp-reading)
(require 'ycp-pdf)
(require 'ycp-project)
(require 'ycp-org)
diff --git a/emacs/.emacs.d/init/ycp-markup.el b/emacs/.emacs.d/init/ycp-markup.el
index 0c7bbb2..bee0c2a 100644
--- a/emacs/.emacs.d/init/ycp-markup.el
+++ b/emacs/.emacs.d/init/ycp-markup.el
@@ -107,7 +107,8 @@
(add-hook 'nov-mode-hook 'visual-line-mode)
(add-hook 'nov-mode-hook 'follow-mode)
(add-hook 'nov-mode-hook (lambda ()
- (setq next-screen-context-lines 4)))
+ (setq next-screen-context-lines 4
+ line-spacing .1)))
(add-hook 'nov-post-html-render-hook 'my-nov-set-margins)
(require 'my-nov)
(my-override nov-render-title)
diff --git a/emacs/.emacs.d/init/ycp-web.el b/emacs/.emacs.d/init/ycp-web.el
index 3c033ad..f80aa49 100644
--- a/emacs/.emacs.d/init/ycp-web.el
+++ b/emacs/.emacs.d/init/ycp-web.el
@@ -265,7 +265,8 @@
. ,(lambda (url &rest _) (my-open-newscorp-au url))))
(add-to-list 'browse-url-handlers
`("^https?://www.spectator.com.au\\>" .
- ,(lambda (url &rest _) (my-fetch-browse-as-googlebot url)))) )
+ ,(lambda (url &rest _) (my-fetch-browse-as-googlebot url))))
+ (my-setq-from-local my-firefox-profile-dir))
(my-package my-gitlab
(:delay 60)
diff --git a/emacs/.emacs.d/lisp/my/belf.el b/emacs/.emacs.d/lisp/my/belf.el
index e0d89b0..97bf0b2 100644
--- a/emacs/.emacs.d/lisp/my/belf.el
+++ b/emacs/.emacs.d/lisp/my/belf.el
@@ -41,6 +41,8 @@
"o" #'belf-open-book-other-window
"p" #'belf-previous-line
"e" #'belf-set-field
+ "," #'belf-rename-desort-at-point
+ "E" #'belf-epub-rename-at-point
;; "s" #'tabulated-list-col-sort
)
@@ -63,6 +65,11 @@
(belf-list-refresh-contents))
(pop-to-buffer-same-window buf)))
+(defun belf-library (dir)
+ (interactive (list (read-directory-name "Book directory: " belf-dir nil t)))
+ (setq belf-dir dir)
+ (belf))
+
(defun belf-list-refresh-contents (&rest _)
(setq-local tabulated-list-entries (belf-parse-all-file-names))
(tabulated-list-print))
@@ -79,7 +86,7 @@
(list f (vector .authors .title .year)))))
(directory-files belf-dir t "\\.\\(epub\\|pdf\\|cbr\\|djvu\\)$"))))
-(defun belf-fix-file-name (file-name)
+(defun belf-file-name-desort (file-name new-dir)
"Rename a file.
Change authors-sort to authors. Change title-sort to title.
@@ -114,18 +121,91 @@ foo bar & quux, baf"
((string-suffix-p ", A" title)
(concat "A " (string-remove-suffix ", A" title)))
(t title))))
- (format "%s.%s" (belf-format-base-name parsed) (alist-get 'ext parsed))))
+ (format "%s.%s"
+ (belf-format-base-name parsed new-dir)
+ (alist-get 'ext parsed))))
-(defun belf-fix-rename-file (file-name)
- (when-let ((new-name (belf-fix-file-name file-name)))
+(defun belf-rename-desort (file-name new-dir)
+ (when-let ((new-name (belf-file-name-desort file-name new-dir)))
(unless (equal new-name file-name)
(rename-file file-name new-name))))
-(defun belf-fix-rename-files ()
+(defun belf-rename-desort-at-point ()
+ (interactive)
+ (let ((file-name (tabulated-list-get-id)))
+ (belf-rename-desort file-name (file-name-directory file-name))
+ (revert-buffer)))
+
+(defun belf-rename-desort-files (dir new-dir)
(interactive)
(dolist (file-name
- (directory-files belf-dir t directory-files-no-dot-files-regexp))
- (belf-fix-rename-file file-name)))
+ (directory-files dir t directory-files-no-dot-files-regexp))
+ (belf-rename-desort file-name new-dir)))
+
+(defun belf-epub-rename-files (dir new-dir)
+ (dolist (epub (directory-files dir t "\\.epub$"))
+ (belf-epub-rename epub new-dir)))
+
+(defun belf-epub-rename (file-name new-dir)
+ (when-let ((content-file-name (belf-epub-content-file-name file-name)))
+ (with-temp-buffer
+ (call-process "unzip" nil t nil "-p" file-name content-file-name)
+ (let* ((dom (libxml-parse-xml-region (point-min) (point-max)))
+ (metadata (dom-by-tag dom 'metadata))
+ (title (dom-text (dom-by-tag metadata 'title)))
+ (authors (dom-texts (dom-by-tag metadata 'creator) ", "))
+ (identifier
+ (replace-regexp-in-string
+ "[^0-9,]" ""
+ (dom-texts
+ (seq-filter
+ (lambda (node)
+ (or (equal "ISBN" (dom-attr node 'scheme))
+ (string-match-p "^[0-9]+$" (dom-text node))))
+ (dom-by-tag metadata 'identifier))
+ ",")))
+ (date (replace-regexp-in-string
+ "[^0-9]" ""
+ (dom-text (dom-by-tag metadata 'date))))
+ (year (substring date 0 (min 4 (length date))))
+ (dir (file-name-directory file-name))
+ (new-base-name (belf-format-base-name
+ `((title . ,title)
+ (authors . ,authors)
+ (year . ,year)
+ (identifier . ,identifier))
+ new-dir))
+ new-name)
+ ;; (pp metadata)
+ (dolist (file (directory-files dir t
+ (format "^%s\\.[a-zA-Z0-9]+$"
+ (regexp-quote
+ (file-name-base file-name)))))
+ (setq new-name (format "%s.%s" new-base-name (file-name-extension file)))
+ (unless (equal file-name new-name)
+ (message "%s -> %s" file new-name)
+ (ignore-error 'file-already-exists (rename-file file new-name))
+ )
+ )
+ ))
+ ))
+
+(defun belf-move-invalid-file-names (dir new-dir)
+ "Move files in DIR whose file names do not validate to NEW-DIR."
+ (let (new-name)
+ (dolist (file-name (directory-files dir t directory-files-no-dot-files-regexp))
+ (unless (string-match-p "^.*? +- +.* +([0-9]*) +\\[.*\\]\\.[a-zA-Z0-9]+$" file-name)
+ (message "%s -> %s" file-name
+ (setq new-name (file-name-concat
+ new-dir (file-name-nondirectory file-name))))
+ (rename-file file-name new-name)
+ ))))
+
+(defun belf-epub-rename-at-point ()
+ (interactive)
+ (let ((file-name (tabulated-list-get-id)))
+ (belf-epub-rename file-name (file-name-directory file-name))
+ (revert-buffer)))
(defun belf-parse-file-name (file-name)
(let ((fn (file-name-nondirectory file-name)))
@@ -136,11 +216,13 @@ foo bar & quux, baf"
(identifier . ,(match-string 4 fn))
(ext . ,(match-string 5 fn))))))
-(defun belf-format-base-name (info)
+(defun belf-format-base-name (info &optional dir)
(let-alist info
(file-name-concat
- (expand-file-name belf-dir)
- (format "%s - %s (%s) [%s]" .authors .title .year .identifier))))
+ (expand-file-name (or dir belf-dir))
+ (replace-regexp-in-string
+ "[/:?*\"]" "_"
+ (format "%s - %s (%s) [%s]" .authors .title .year .identifier)))))
(defun belf-book-infobox (file-name)
(interactive)