From 618fe180a68331ddf58b2a9679f2f6a088d9fecd Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sun, 2 Feb 2025 13:36:38 +1100 Subject: [emacs] Add commands to belf to display book info and open a book --- emacs/.emacs.d/lisp/my/belf.el | 27 +++++++++++++++++++++++---- emacs/.emacs.d/lisp/my/infobox.el | 4 ++-- 2 files changed, 25 insertions(+), 6 deletions(-) (limited to 'emacs/.emacs.d/lisp') diff --git a/emacs/.emacs.d/lisp/my/belf.el b/emacs/.emacs.d/lisp/my/belf.el index a8b6401..d9392c9 100644 --- a/emacs/.emacs.d/lisp/my/belf.el +++ b/emacs/.emacs.d/lisp/my/belf.el @@ -27,6 +27,13 @@ ;;; Code: (require 'tabulated-list) +(require 'infobox) + +(defvar-keymap belf-mode-map + :parent tabulated-list-mode-map + "i" #'belf-book-infobox + "RET" #'belf-open-book + "o" #'belf-open-book-other-window) (define-derived-mode belf-mode tabulated-list-mode "Bookshelf" "Major mode for browsing a list of books." @@ -56,12 +63,12 @@ (defun belf-parse-all-file-names () (seq-filter #'identity - (seq-map-indexed - (lambda (f i) + (seq-map + (lambda (f) (when-let ((parsed (belf-parse-file-name f))) (let-alist parsed - (list i (vector .authors .title .year))))) - (directory-files belf-dir)))) + (list f (vector .authors .title .year))))) + (directory-files belf-dir t)))) (defun belf-parse-file-name (file-name) (let ((base (file-name-base file-name))) @@ -70,4 +77,16 @@ (title . ,(match-string 2 base)) (year . ,(match-string 3 base)))))) +(defun belf-book-infobox () + (interactive) + (infobox-exiftool (tabulated-list-get-id))) + +(defun belf-open-book () + (interactive) + (find-file (tabulated-list-get-id))) + +(defun belf-open-book-other-window () + (interactive) + (find-file-other-window (tabulated-list-get-id))) + (provide 'belf) diff --git a/emacs/.emacs.d/lisp/my/infobox.el b/emacs/.emacs.d/lisp/my/infobox.el index 5698042..9c5c7b1 100644 --- a/emacs/.emacs.d/lisp/my/infobox.el +++ b/emacs/.emacs.d/lisp/my/infobox.el @@ -113,8 +113,8 @@ something like (end-of-line) (insert " -- " (buttonize "xdg-open" - (lambda (_) - (call-process "xdg-open" nil 0 nil filename)))) + (lambda (_) (call-process "xdg-open" nil 0 nil filename))) + " " (buttonize "find-file" (lambda (_) (find-file filename)))) (buffer-string)) `(infobox-exiftool ,filename) (called-interactively-p 'interactive) -- cgit v1.2.3