Org-Mode table for s-expressions

I would like to export from Org-Mode tables to s-expressions.

| first | second | thrid | |--------+--------+--------| | value1 | value2 | value3 | | value4 | value5 | value6 | 

Would turn:

 ((:FIRST "value1" :SECOND "value2" :THIRD "value3") (:FIRST "value4" :SECOND "value5" :THIRD "value6")) 

I plan to write such a setup if it does not already exist, but suggested that I would click on stackoverflow before I start reinventing the wheel.

+4
source share
1 answer

This is a trick. It has minimal error checking.

The interface to use is the software interface:

 (org-table-to-sexp <location-of-beginning-of-table> <location-of-end-of-table>) 

In this case, he will return sexp to you.

If you want to use interactive use, you can call the following command to work on a table in a region . So, set the label at the beginning of the table, go to the end and enter:

 Mx insert-org-table-to-sexp 

This will insert the desired sexp immediately after the table in the current buffer.

Here is the code:

 (defun org-table-to-sexp-parse-line () "Helper, returns the current line as a list of strings" (save-excursion (save-match-data (let ((result nil) (end-of-line (save-excursion (end-of-line) (point)))) (beginning-of-line) (while (re-search-forward "\\([^|]*\\)|" end-of-line t) (let ((match (mapconcat 'identity (split-string (match-string-no-properties 1)) " "))) (if (< 0 (length match)) ;; really want to strip spaces from front and back (push match result)))) (reverse result))))) (require 'cl) (defun org-table-to-sexp (be) "Parse an org-mode table to sexp" (save-excursion (save-match-data (goto-char b) (let ((headers (mapcar (lambda (str) (make-symbol (concat ":" (upcase str)))) (org-table-to-sexp-parse-line))) (sexp nil)) (forward-line 1) ;skip |--+--+--| line (while (< (point) e) (forward-line 1) (let ((line-result nil)) (mapcar* (lambda (he) (push h line-result) (push e line-result)) headers (org-table-to-sexp-parse-line)) (if line-result (push (reverse line-result) sexp)))) sexp)))) (defun insert-org-table-to-sexp (be) "Convert the table specified by the region and insert the sexp after the table" (interactive "r") (goto-char (max be)) (print (org-table-to-sexp be) (current-buffer))) 
+6
source

All Articles