Ah, yes - you’re right. I had been making that assumption. 

Given these considerations, I think I’ll just stick with my current method that 
accidentally works, and file these helpful notes away for the time when it no 
longer works and I need to find a better solution. 

Thank you!

Jason

Sent from my iPhone

> On 15 May 2025, at 17:47, Christiaan Hofman <[email protected]> wrote:
> That makes no sense. I think you are thinking about an alias file. But I am 
> talking about alias data. There is no method to open a file from alias data 
> (except by using system framework methods).
> 
> Christiaan
> 
>> On 15 May 2025, at 16:47, Alexander,J <[email protected]> wrote:
>> 
>> If the bookmark is an alias, isn't it possible to open the file directly via 
>> the alias, without needing to recover/construct the path?  That might not be 
>> possible, though, with the functions available in emacs.
>> 
>>> On 15 May 2025, at 15:37, Christiaan Hofman <[email protected]> wrote:
>>> There is no documentation of this format. It is basically private.I can 
>>> give you some partial information. Basically, it is base64 encoded plist 
>>> data. The plist is a dictionary with 2 keys: relativePath and bookmark. The 
>>> relativePath gives the path relative to the .bib file. The bookmark is 
>>> alias data generated by Apple, and its format is not documented. So when 
>>> you get the(full) path (from this alias data), that is largely by accident. 
>>> The only robust way to get the (full) path is by resolving the alias using 
>>> the system Foundation framework (i.e. using an  Objective-C or Swift 
>>> program). Perhaps the best is to get the relative path, and also pass the 
>>> .bib file path to your function.
>>> For instance, you could get the plist data from the command line using:
>>> echo “BDSKFILEVALUE” | base64 -D | plutil -convert xml1 -o - -
>>> And you can get the relative path using:
>>> echo “BDSKFILEVALUE” | base64 -D | plutil -extract relativePath raw -expect 
>>> string -o - -
>>> Christiaan
>>>> On 15 May 2025, at 11:48, Alexander,J <[email protected]> wrote:
>>>> 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

_______________________________________________
Bibdesk-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-users

Reply via email to