When I execute a source block, I'd like to get a timestamp on the +RESULTS
block so that I can remember when it was last executed. Is there a built-in option for this or do I need to go in and add a hook or a advise a function somewhere?
1 Answer
I came here wanting the same thing, but finding no answers, I wrote my own defadvice wrapper:
NOT BATTLE TESTED:
#+BEGIN_SRC emacs-lisp
(defadvice org-babel-execute-src-block (after org-babel-record-execute-timestamp)
(let ((code-block-params (nth 2 (org-babel-get-src-block-info)))
(code-block-name (nth 4 (org-babel-get-src-block-info))))
(let ((timestamp (cdr (assoc :timestamp code-block-params)))
(result-params (assoc :result-params code-block-params)))
(if (and (equal timestamp "t") (> (length code-block-name) 0))
(save-excursion
(search-forward-regexp (concat "#\\+RESULTS\\(\\[.*\\]\\)?: "
code-block-name))
(beginning-of-line)
(search-forward "RESULTS")
(kill-line)
(insert (concat (format-time-string "[%F %r]: ") code-block-name)))
(if (equal timestamp "t")
(message (concat "Result timestamping requires a #+NAME: "
"and a ':results output' argument.")))))))
(ad-activate 'org-babel-execute-src-block)
#+END_SRC
#+NAME: test-no-timestamp
#+BEGIN_SRC shell :results output
echo "This ones doesn't have the right args for timestamping"
#+END_SRC
#+RESULTS: test-no-timestamp
: This ones doesn't have the right args for timestamping
#+NAME: test-timestamp
#+BEGIN_SRC shell :results output :timestamp t
echo "This one should have a timestamp. Run me again, I update."
#+END_SRC
#+RESULTS[2017-10-03 05:19:09 AM]: test-timestamp
: This one should have a timestamp. Run me again, I update.
-
This is nice. Have you found a better way to implement this, in the last two years? Sep 1, 2019 at 8:47