On 12/02/2021 14:16, Kyle Meyer wrote:
#+begin_src elisp
    (setq org-file-apps '(("\\.pdf::\\([0-9]+\\)\\'" . "xpdf %s %1")))
#+end_src

Not relevant for the underlying issue, but doesn't xpdf require a colon
before the page number (i.e. ":%1")?

At least for the application in debian & ubuntu xpdf package, page number should be specified without a colon. It is Xt interface to poppler PDF library, recently its maintainer decided to switch to xpopple project as upstream. UI is derived from old version of xpdf. Latest original xpdf version is based on Qt and might have different convention in respect to page numbers.

I believe format-spec requires the placeholder to be A-z:

   (format-spec "xpdf %s" '((?s . "a")))  => "xpdf a"
   (format-spec "xpdf %s %1" '((?s . "a") (?1 . "b")))  ;; Invalid format string

You are right. I missed that format-spec allows to specify field width, so digits could not be used.

What about flipping the processing, handling the %N placeholders first
and then formatting the file name?  Seems to work on my end, though I
haven't tested it thoroughly.

I could anticipate similar problems if named destinations are involved. I have not checked but I expect that internal links might have "%s" in their names at least for some file types. That is why I would strongly prefer substitutions performed in a single pass. I do not like it, but it seems that simplified variant of format-spec is better. It should allows substitutions with digit. I hope, single digit should be enough.


Reply via email to