emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Thorsten Jolitz <tjolitz@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Re: table export to same buffer
Date: Sat, 03 Aug 2013 10:06:06 +0200	[thread overview]
Message-ID: <87siyr19n5.fsf@gmail.com> (raw)
In-Reply-To: CAJ+TeofdcFug2adN5CTc-gqwya0X1EnOPnDEBYNJioQBw4ezgQ@mail.gmail.com

Rustom Mody <rustompmody@gmail.com> writes:

> Sebastien Vauban wrote
>
>     On Fri, Aug 2, 2013 at 10:53 PM, Rustom Mody <rustompmody@gmail.com>
>     wrote:
>
>     Is it possible to export an orgmode table not to a new file but
>     overwriting the org table in the same buffer?
>
>         Context is editing source code which contains a largeish table
>         of (say) constants. Editing is done with orgtbl minor mode.

>         When done it should become back the table in the natural
>         format of the programming language

>         [For simplicity lets just say csv will do]

> Using an Org Babel code block (which you have to write, of course)
> taking as input your table, and outputting your constants in the
> wished format should do what you're looking for, right?
>
> I dont think so. The context is writing C with C mode (or haskell with
> haskell-mode python with python-mode etc) ie the user is not using
> orgmode.  That is why I mentioned orgtbl, ie org table editing
> facilities are needed but the major mode is something else.
>
> However here some pre and postprocessing is also probably required.
> Something like an automation of the following:
>
> 1. Editing a large struct spec in C -- major mode is C-mode
> 2. Select the region (may even be a rectangle)
> 3. Paste into an org-mode buffer
> 4. Run C-c | on region
> 5. Edit table as required
> 6. org-table-export in desired format to a file F
> 7. Visit F
> 8. Copy/Cut F (if necessary as rectangle)
> 9. Go back to original C-mode buffer and paste

Another possibility is to make your source code file an 'outshine' file
(activate outline-minor-mode with outshine.el extensions and structure
it with outcommented Org-mode headlines), because then you get many of
these steps for free (see
[[http://orgmode.org/worg/org-tutorials/org-outside-org.html][Org-mode
outside Org-mode]] on Worg for more info about outshine.el and
outorg.el).

This way, your source code file really _is_ an Org-mode file too, you
switch between the two views on the same file with 'M-# M-#' and 'M-#'.

I can give you an example without changing buffer while writing this
email, since 'outorg' works with message-mode too, i.e. doing 'M-# M-#'
in a message-mode buffer lets me write my email in full Org-mode.

Lets insert a table with constants:

#+tblname: consts
| constant |   value |
|----------+---------|
| conway   | 1.30357 |
| pi       | 3.14159 |
| e        | 2.71828 |

#+name: tbl2lst
#+header: :var table=consts
#+header: :results value list verbatim :wrap "SRC picolisp"
#+begin_src emacs-lisp
 `(prog (scl 5) (setq lst (car ',table)))
#+end_src

#+results: tbl2lst
#+BEGIN_SRC picolisp
  (prog (scl 5) (setq lst (car (quote (("constant" "value") hline ("conway"
  1.30357) ("pi" 3.14159) ("e" 2.71828))))))
#+END_SRC

So the steps are:

 1. Make your source file an outshine file
 2. Edit it as Org-file (with 'M-# M-#' outorg-edit-as-org)
 3. Go back to the source view  (with 'M-#' outorg-copy-edits-and-exit)

Assume I'm editing a PicoLisp source file and want to introduce
constants the easy way (in an Org-mode table). Then in step (2) I would
add the table 'consts' and the Emacs Lisp source-block 'tbl2lst'. When
going back to the source view, the table and the source block will be
converted to PicoLisp comments.

No so the results block, because outorg recognizes its a PicoLisp block
and will convert it back to source code. Thus in the Emacs Lisp block I
use the table as variable that holds a nested list structure and
transform this nested list into a structure of my target programming
language, let it be PicoLisp or C or whatever. This should be much
easier than parsing the table itself.

Then everytime you want to edit the constants, you simply switch to
Org-mode view, edit the Org table, eval the Emacs Lisp source-block, and
switch back to PicoLisp source view.

--
cheers,
Thorsten

  parent reply	other threads:[~2013-08-03  8:06 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-02 17:23 table export to same buffer Rustom Mody
2013-08-02 19:22 ` Sebastien Vauban
2013-08-03  4:52 ` Rustom Mody
2013-08-03  7:25   ` Nicolas Goaziou
2013-08-03  8:06   ` Thorsten Jolitz [this message]
2013-08-03 23:34   ` William Henney
2013-08-04 11:13     ` Rustom Mody
2013-08-12 18:20       ` William Henney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87siyr19n5.fsf@gmail.com \
    --to=tjolitz@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).