From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Huchler Subject: Re: Multi-step ledger org-capture template Date: Sun, 26 Aug 2018 23:53:43 +0200 Message-ID: <87wosciyl4.fsf@mail.de> References: <876004kkor.fsf@mail.de> <87sh36j9vt.fsf@mail.de> <87o9dtjov4.fsf@mail.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:45959) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fu2yq-00066U-Jj for emacs-orgmode@gnu.org; Sun, 26 Aug 2018 17:53:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fu2ym-0001so-J8 for emacs-orgmode@gnu.org; Sun, 26 Aug 2018 17:53:56 -0400 Received: from [195.159.176.226] (port=49261 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fu2ym-0001q0-AQ for emacs-orgmode@gnu.org; Sun, 26 Aug 2018 17:53:52 -0400 Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1fu2wd-0003hP-BJ for emacs-orgmode@gnu.org; Sun, 26 Aug 2018 23:51:39 +0200 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" To: emacs-orgmode@gnu.org In case somebody wants something similar, I post my solution I came up with here: %(progn (defun get-table-content (&optional start end) (let* ((start (or start (buffer-end -1))) (end (or end (buffer-end 1))) (lines (s-split "\n" (buffer-substring-no-properties start end)))) (remove nil (mapcar (lambda (line) (mapcar (lambda (elem) (string-trim elem)) (remove "" (split-string line "|")))) lines)))) (with-current-buffer (org-capture-get :original-buffer) (call-interactively 'copy-region-as-kill)) (let* (mapping) (with-temp-buffer "*shop-name-mapping*" (erase-buffer) (insert-file-contents "capture-templates/products-mapping.org") (let* ((start (progn (goto-char (point-min)) (forward-line 1) (point)))) (setq mapping (mapcar (lambda (x) (cons (nth 1 x) (car x))) (get-table-content start))))) (with-temp-buffer "*shop-import-temp*" (erase-buffer) (yank) (org-table-convert-region (buffer-end -1) (buffer-end 1) 2) (let* ((data (get-table-content))) (erase-buffer) (insert (concat " " (org-read-date nil nil) " * Shop-name\n" (mapconcat (lambda (line) (format " %s \t\t%s St {=€%s}" (assoc-default (nth 1 line) mapping) (nth 0 line) (nth 4 line))) data "\n") "\n assets:bank:chequing")) (ledger-mode) (let ((start (progn (goto-char (point-min)) (forward-line 1) (point))) (end (progn (goto-char (point-max)) (forward-line -1) (point)))) (ledger-post-align-postings start end)) (buffer-string))))) products-mapping would like like that: #+NAME: food | expenses:food:spice:Basilikum | Basilikum bio Sonnentor, 15g | | expenses:food:spice:Oregano | Oregano bio Sonnentor, 20g | Of course it asumes that you have some html or email bill with a table selected and you would have to change the (nth x line) depending where in the bill the name, amount and price is listed, and maybe change the currency.