From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: How to add content from a file to a table automatically Date: Thu, 10 Jan 2013 11:27:34 -0700 Message-ID: <87zk0grizt.fsf@gmail.com> References: <50ee34c8.09fb640a.6b64.0e5a@mx.google.com> <87txqpy65u.fsf@gmail.com> <50ef04af.0839650a.7f7b.ffff9872@mx.google.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([208.118.235.92]:42846) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TtMr2-0007Xa-2B for emacs-orgmode@gnu.org; Thu, 10 Jan 2013 13:27:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TtMqv-0007tJ-Dt for emacs-orgmode@gnu.org; Thu, 10 Jan 2013 13:27:51 -0500 Received: from mail-ia0-f172.google.com ([209.85.210.172]:64435) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TtMqv-0007sl-9E for emacs-orgmode@gnu.org; Thu, 10 Jan 2013 13:27:45 -0500 Received: by mail-ia0-f172.google.com with SMTP id u8so795253iag.31 for ; Thu, 10 Jan 2013 10:27:44 -0800 (PST) In-Reply-To: <50ef04af.0839650a.7f7b.ffff9872@mx.google.com> (Darlan Cavalcante Moreira's message of "Thu, 10 Jan 2013 15:12:57 -0300") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Darlan Cavalcante Moreira Cc: emacs-orgmode Darlan Cavalcante Moreira writes: > Thank you Eric and Jambunathan for your answers. > > If I process the whole table with babel to manually add the lines from the > external file than I would have to take care of updating the formula for > the "Total" value as well as making sure the new content was added before > the "Total" line, right?. The later is simple, but updating the formula > could be complicated. > Alternately, since the table is simply an array you could pass it to another code block in your preferred language, and then perform the total calculation on the array. Then run `continually-run' on this second code block. > > Meanwhile, I'm investigating using org-capture for this. > I'm not familiar with Org-capture myself, but the below sounds like a good plan, I hope it works out. If you do find a natural way to combine org-capture and Babel code blocks I'm sure such a system would be of use to others on the list, so please do share. Best, > > For instance, if I use a template such as > #+begin_src emacs-lisp > ("f" "test" table-line > (file+headline "test.org" "Test table") > (file "path/food.org") > :table-line-pos "II-1" > :immediate-finish t) > #+end_src > where the food.org file has a single line then I can capture with > #+begin_src emacs-lisp > (org-capture nil "f")' > #+end_src > and org-capture will place the content from the "food.org" file in a table > in the "Test Table" headline of the test.org file. > > The advantage of using org-capture instead of pure babel is that it will > already put the content in the correct place and update the > formulas. However, the formulas are updated correctly only if I capture a > single line each time. > > I think a combination of babel with org-capture is my best option. > Once that is working I will use your timer approach for automating this > (while I investigate inotify suggested by Jambunathan). > > -- > Darlan > > > At Wed, 09 Jan 2013 22:10:37 -0700, > Eric Schulte wrote: >> >> #+Title: Periodically Rerun a Code Block >> >> Here's the lisp code to define a function to continually re-run a code >> block. Evaluate the following code block, then =M-x continually-run=, >> press ENTER and then type in the name of the code block to continually >> run (in this case "date"). >> #+begin_src emacs-lisp :results silent >> (defvar continual-runners nil >> "Holds running block timers (so they may be canceled).") >> >> (defun run-block-in-buffer (name buffer) >> (save-match-data >> (with-current-buffer buffer >> (save-excursion >> (org-babel-goto-named-src-block name) >> (with-local-quit >> (undo-boundary) >> (with-temp-message (format "re-running %s" name) >> (org-babel-execute-src-block)) >> (undo-boundary)))))) >> >> (defun continually-run (name) >> "Continually run the supplied code block name. >> The code block is assumed to be in the current buffer." >> (interactive "scode block to continually run: ") >> (let ((run-buffer (current-buffer))) >> (add-to-list 'continual-runners >> (run-at-time nil 5 'run-block-in-buffer name run-buffer)))) >> #+end_src >> >> Here's the code block to be continually re-run. >> #+Name: date >> #+begin_src sh >> date >> #+end_src >> >> And here are the results which will be continually updated. >> #+RESULTS: date >> : Wed Jan 9 22:04:08 MST 2013 >> >> Execute the following to stop all continually updating code blocks. >> #+begin_src emacs-lisp :results silent >> (mapc #'cancel-timer continual-runners) >> #+end_src -- Eric Schulte http://cs.unm.edu/~eschulte