emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] How to add content from a file to a table automatically


From: Eric Schulte
Subject: Re: [O] How to add content from a file to a table automatically
Date: Thu, 10 Jan 2013 11:27:34 -0700
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

Darlan Cavalcante Moreira <address@hidden> 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]