Is there documentation describing how to decode the values of the Bdsk-File-*
fields, and extract the path to the file?
I ask because I've written the following Emacs macro which, when invoked while
the cursor is sitting on a citation key, attempts to open the first such file
(if it exists) associated with that entry. At the moment, this seems to work,
but when I inspect the results of the Base64 decoding (by visiting the
"*Bibdesk Info*" buffer), there's a lot of noise in the buffer and the file
path appears in all lower-case... which makes me worry that this macro is
working largely by accident and there is a more robust way of doing this.
Many thanks,
Jason
(defun open-bibdesk-file ()
"Extract the bdsk-file-1 field and open the file."
(interactive)
(save-window-excursion
;; Use existing reftex function to locate the entry
(reftex-view-crossref 2)
;; Now we're in the bib file at the entry
(let (citation-key field-content)
;; Find the citation key
(save-excursion
(when (re-search-backward "^@\\w+{\\([^,]+\\)," nil t)
(setq citation-key (match-string 1))))
;; Find the bdsk-file-1 field in the current entry
(save-excursion
(if (re-search-forward "bdsk-file-1\\s-*=\\s-*{\\([^}]*\\)}" nil t)
(progn
(let*
((Bdsk-File-1 (match-string 1))
(fstr (base64-decode-string Bdsk-File-1))
(info-buffer (get-buffer-create "*Bibdesk Info*"))
path)
(string-match "\\(users/[- ,A-z0-9/_?]*.pdf\\)" fstr)
(setq path (format "/%s" (match-string 0 fstr)))
(with-current-buffer info-buffer
(erase-buffer)
(insert (format "path: %s" path))
(insert (format "\n\n%s" fstr)))
(if (and path (file-exists-p path))
(shell-command (concat "open " (shell-quote-argument path)))
(message "File not found")))))))))
_______________________________________________
Bibdesk-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-users