I thought about temp files, but that makes the file names cryptic which is inconvenient for communication without people outside org.. also, I tend recompile figures many times which would cause a lot of cluttering files that are hard to delete since you don't know which file is the one currently linked in your org file... Anyway, I made this instead which appears to work as I intended (defun org-babel-about-to-overwrite-file () (let ((info (org-babel-get-src-block-info))) (setq result-file (cdr (assoc :file (nth 2 info)))) (if (save-excursion (goto-char 0) (re-search-forward (concat ":file +" result-file) nil t) (re-search-forward (concat ":file +" result-file) nil t)) (message (concat result-file " defined in more than one source block")) (org-babel-execute-maybe)))) (add-hook 'org-ctrl-c-ctrl-c-hook 'org-babel-about-to-overwrite-file) 2013/10/12 Charles Berry > John Kitchin andrew.cmu.edu> writes: > > > > > > > > > I have a related kind of problem. When preparing notes > > for a class, I may end up with 70 code blocks in an org file, many of > > which create graphics. I am always worried about accidentally using the > > same filename and overwriting a graphic from an earlier block. A unique, > > but reproducible filename would be sufficient for my needs. > > > > Header arg values can be elisp calls. You can use `make-temp-file'. > > So every time this block is executed, a new file is created and the > file link is added to the results. > > #+BEGIN_SRC R :results output append :file (make-temp-file "temp") > cat(date(),"\n") > #+END_SRC > > #+RESULTS: > [[file:/var/folders/kb/2hchpbyj7lb6z76l0q73w_fh0000gn/T/temp302IjV]] > [[file:/var/folders/kb/2hchpbyj7lb6z76l0q73w_fh0000gn/T/temp3028Lu]] > > See `temporary-file-directory', too, if you want to use this, as the > default may not be what you intend. > > > You might want to use this: > > #+BEGIN_SRC emacs-lisp > (defun local-tfile (file) > (let ((temporary-file-directory ".")) > (make-temp-file file))) > #+END_SRC > > Then the files go in the local directory when this is executed: > > #+BEGIN_SRC R :file (local-tfile "tfile") :results output append > cat(date(),"\n") > #+END_SRC > > You might not want `append' in this case. > > > HTH, > > Chuck > > [rest deleted] > > > > >