On Thu, Jan 20, 2022 at 11:12 AM John Kitchin wrote: > It depends on what the src things look like. You might be able to just > call ffap or some variant of it. Here is an example of the follow part that > works for a file and url for me. > > #+BEGIN_SRC emacs-lisp > (org-link-set-parameters > "rstack" > :follow (lambda (path) > (ffap (or (ffap-url-at-point) > (ffap-file-at-point))))) > #+END_SRC > > #+RESULTS: > | :follow | (lambda (path) (ffap (or (ffap-url-at-point) > (ffap-file-at-point)))) | > > > [[rstack:(("./screenshots/date-20-01-2022-time-10-36-54.png" . fade-out) > (src2 . fade-in) ("https://google.com" . fade-out))]] > > > This is what I have so far. I'm pretty happy with it; it's quite concise, and will fill in default values for the fade in and out instructions. When I asked my question, I left out an optional second parameter that these stacking images can take -- a "fragment-index" number. I'm trying to figure out a way to add that additional info into the link without making it (a) unnecessarily long, esp for the majority of cases where I won't use that index; or (b) impossible to read. I guess I could make each list element a plist instead? Like ((:s ~/image.png :i 4 :f fade-in-then-out))? Anyway, here's my code: (defun r-stack-follow (path) (let* ((srcs (read path )) (completions (-map (lambda (src) (car src)) srcs) ) (chosen (completing-read "Follow link to: " completions))) (if (ffap-url-p chosen) (browse-url chosen) (find-file-ace-window chosen)))) (defun r-stack-export (path desc backend) (cond ((eq 'html backend) (let ((srcs (read path))) (format "
\n%s
\n" (string-join (cl-loop for index from 1 for (src . data-fragment) in srcs collect (format " " (or data-fragment (cond ((eql 1 index) "fade-out") ((eql (length srcs) index) "fade-in") (t "fade-in-then-out"))) src)) "\n")))))) (org-link-set-parameters "r-stack" :follow 'r-stack-follow :export 'r-stack-export :face '(:foreground "red") :help-echo "Click me for a message.") > John > > ----------------------------------- > Professor John Kitchin (he/him/his) > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > http://kitchingroup.cheme.cmu.edu > > > > On Thu, Jan 20, 2022 at 10:21 AM Matt Price wrote: > >> >> >> On Wed, Jan 19, 2022 at 12:18 PM John Kitchin >> wrote: >> >>> I am not sure this is quite what you are looking for. You could use a >>> macro like this. >>> >>> >>> >>> {{{r-stack(((src1 . fade-out) (src2 . fade-in) (src3 . fade-out)))}}} >>> >>> * code :noexport: >>> >>> #+macro: r-stack (eval (r-stack $1)) >>> >>> #+BEGIN_SRC emacs-lisp >>> (defun r-stack (src-alist) >>> "SRC-alist will be a string containing a list of (src . data-fragment) >>> src is a url or filename >>> data-fragment >>> >>> Returns a string for export." >>> (let ((src (read src-alist))) >>> (format "#+BEGIN_EXPORT html >>>
>>> %s >>>
>>> ,#+END_EXPORT" >>> (string-join >>> (cl-loop for (src . data-fragment) in src >>> collect >>> (format " " >>> data-fragment src)) >>> "\n")))) >>> >>> >>> (r-stack "((src1 . fade-out) (src2 . fade-in) (src3 . fade-out))") >>> #+END_SRC >>> >>> #+RESULTS: >>> : #+BEGIN_EXPORT html >>> :
>>> : >>> : >>> : >>> :
>>> : #+END_EXPORT >>> >>> You could also make a link do that. >>> >> >> Huh. This wasn't at all what I was thinking but it may be a much better >> way than I'd htought of. >> >> A link seems like it would be a great solution, especially if I could >> figure out how to get the :follow function to open an individual ~src~ >> path. Would you use "looking-at" to get the right candidate, or can you >> think of a way to get completion candidates for a function that opens the >> file? I'm looking at your eamples in >> https://kitchingroup.cheme.cmu.edu/blog/2016/11/04/New-link-features-in-org-9 >> but can't quite follow the code. >> >> Thank so mjch for this really interesting solution. >> >>> >>> John >>> >>> ----------------------------------- >>> Professor John Kitchin (he/him/his) >>> Doherty Hall A207F >>> Department of Chemical Engineering >>> Carnegie Mellon University >>> Pittsburgh, PA 15213 >>> 412-268-7803 >>> @johnkitchin >>> http://kitchingroup.cheme.cmu.edu >>> >>> >>> >>> On Wed, Jan 19, 2022 at 9:42 AM Matt Price wrote: >>> >>>> I am trying ot figure out if I can create a simplified syntax for a >>>> particular special block in a derived HTML exporter. >>>> >>>> I'm trying to produce HTML like this: >>>> >>>>
>>>> >>>> The derived backend (org-re-reveal) already has an >>>> >>>> #+ATTR_REVEAL that an make the data-fragment attributes, so it's not hard to produce >>>> the desired outpu: >>>> >>>> #+begin_r-stack >>>> #+ATTR_REVEAL: :frag appear[[imglink1]] >>>> #+ATTR_REVEAL: :frag appear[[imglink2]]#+end_r-stack >>>> >>>> However, I'd really like to add a less verbose syntax, like this: >>>> >>>> #+begin_r-stack :frag (appear appear)[[imglink1]][[imglink2]]#+end_r-stack >>>> >>>> My question is: will the exporter preserve information from these header-like arguments, and is >>>> there a mechanism I can use in a custom ~special-block-function~ to make use of htem? >>>> >>>> Thanks for your help as always! >>>> >>>> Matt >>>> >>>>