Nick Dokos <ndo...@gmail.com> writes: > Ken Mankoff <mank...@gmail.com> writes: > >> Hi Eric, >> >> On 2014-03-17 at 17:05, Eric Schulte wrote: >>> Ken Mankoff <mank...@gmail.com> writes: >>> >>>> Until asynchronous babel exists, it would be nice to at least be >>>> notified when long-running tasks complete. Does anyone have advice >>>> how to set up a hook on babel completion so that growl or some >>>> other system notification alerts, perhaps only if the execution >>>> took more than x seconds? >>> >>> You can use the org-babel-after-execute-hook to run any action after a >>> code block finishes executing. >> >> Yes, and your reply makes me recall that :post works too, so I can >> call a shell command "notifier" (or Growl) like this: >> >> #+BEGIN_SRC python -n :results output :post (shell-command-to-string >> "notifier 'babel done'") >> print "hello, world" >> #+END_SRC >> #+RESULTS: >> > > The :post method does not seem to work for me. With: > > --8<---------------cut here---------------start------------->8--- > #+BEGIN_SRC sh :results output :post (shell-command-to-string "popup.py > babel done") > sleep 10 > echo DONE > #+END_SRC > --8<---------------cut here---------------end--------------->8--- > > (popup.py is my homemade notifier)
Try adding `(lambda () (shell-command-to-string "popup.py babel done"))' to your `org-babel-after-execute-hook'. > > I get the popup immediately and the results after 10 seconds. The > org-babel-after-execute-hook method worked fine. > That is probably because the elisp form in the :post value is executed at header-argument parse time before the code block is executed. If instead your use a code block name as your post header argument it will only be evaluated after the code block finishes. Best, > > Nick > > > > > -- Eric Schulte https://cs.unm.edu/~eschulte PGP: 0x614CA05D