これでうまくいきます。エラーチェックは最小限です。
使用するインターフェースは、プログラムによるインターフェースのいずれかです。
(org-table-to-sexp <location-of-beginning-of-table> <location-of-end-of-table>)
その場合、それはあなたが要求したsexpを返します。
インタラクティブな使用法が必要な場合は、次のコマンドを呼び出して、リージョン内のテーブルを操作できます。したがって、表の最初にマークを設定し、最後に移動して、次のように入力します。
M-x insert-org-table-to-sexp
これにより、現在のバッファのテーブルの直後に目的のsexpが挿入されます。
コードは次のとおりです。
(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 (b e)
"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 (h e)
(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 (b e)
"Convert the table specified by the region and insert the sexp after the table"
(interactive "r")
(goto-char (max b e))
(print (org-table-to-sexp b e) (current-buffer)))