-
Notifications
You must be signed in to change notification settings - Fork 53
Example functions
Bruce D'Arcus edited this page Jan 7, 2022
·
22 revisions
If you run this and select candidates, this will pass the list of any associated PDF files to pdf-tools to search across all of them.
If you run embark-act-all
on a filtered candidate list, it will pass the files associated with all of them.
(defun ex/search-pdf-contents (keys-entries &optional str)
"Search pdfs."
(interactive (list (citar-select-refs)))
(let ((files (citar-file--files-for-multiple-entries
(citar--ensure-entries keys-entries)
citar-library-paths
'("pdf")))
(search-str (or str (read-string "Search string: "))))
(pdf-occur-search files search-str t)))
;; with this, you can exploit embark's multitarget actions, so that you can run `embark-act-all`
(add-to-list 'embark-multitarget-actions #'ex/search-pdf-contents)
This function will use the metadata from the entry and update the PDF file metadata.
(defun ex/update-pdf-metadata (key-entry)
"Add/update metadata of PDF for KEY-ENTRY."
(interactive (list (citar-select-ref)))
(let* ((entry (cdr key-entry))
(key (car key-entry))
(file (car (citar-file--files-for-entry
key
entry
citar-library-paths
'("pdf"))))
(title (citar-clean-string (citar-get-value 'title entry)))
(author (citar-get-value 'author entry)))
(call-process-shell-command
(concat "exiftool -Title='" title "' -Author='" author "' " file))))
(defun citar--add-file-to-library (key)
"Add a file to the library for KEY.
The FILE can be added either from an open buffer, a file, or a
URL."
(let* ((source
(char-to-string
(read-char-choice
"Add file from [b]uffer, [f]ile, or [u]rl? " '(?b ?f ?u))))
(buffer (when (string= source "b")
(read-buffer-to-switch "Add file buffer: ")))
(file (when (string= source "f")
(expand-file-name (read-file-name "Add file: " nil nil t))))
(url (when (string= source "u")
(read-string "Add file URL: ")))
(path citar-library-paths)
(path (if (cdr path)
(completing-read "Add file to: " path nil t)
(car path)))
(extension (file-name-extension path))
(file-path
(expand-file-name
(concat key "." extension))))
(cond
(buffer
(with-current-buffer buffer (write-file file-path t)))
(file (copy-file file file-path 1))
(url (url-copy-file url file-path 1)))))
(defun citar-add-file-to-library (key-entry)
"Add a file to the library for KEY-ENTRY.
The FILE can be added either from an open buffer, a file, or a
URL."
(interactive (list (citar-select-refs
:rebuild-cache current-prefix-arg)))
(citar--add-file-to-library
(citar--extract-keys key-entry)))