From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pierre Corry <284a6c54@gmail.com> Subject: Re: [HELP]: How to export top level trees in an org file to corresponding files? Date: Wed, 21 Sep 2016 19:50:24 +0200 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=089e0103ea560aad3b053d082e2c Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:53154) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from <284a6c54@gmail.com>) id 1bmlgB-0001Az-KM for emacs-orgmode@gnu.org; Wed, 21 Sep 2016 13:51:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <284a6c54@gmail.com>) id 1bmlg6-0003Eq-AD for emacs-orgmode@gnu.org; Wed, 21 Sep 2016 13:51:30 -0400 Received: from mail-wm0-f49.google.com ([74.125.82.49]:34869) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <284a6c54@gmail.com>) id 1bmlg5-0003Ek-VB for emacs-orgmode@gnu.org; Wed, 21 Sep 2016 13:51:26 -0400 Received: by mail-wm0-f49.google.com with SMTP id l132so282141458wmf.0 for ; Wed, 21 Sep 2016 10:51:25 -0700 (PDT) In-Reply-To: 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 --089e0103ea560aad3b053d082e2c Content-Type: text/plain; charset=UTF-8 Well, I ended up with my custom function then... So case is closed. Thank for the help anyway! (defun me/org-map-entries (org-file in-tags func) (let* ((tags (if (stringp in-tags) (list in-tags) in-tags))) (with-temp-buffer (org-mode) (insert-file-contents org-file-main) ;; Execute func at each heading that matches tags. (while (< (point) (point-max)) ;; If find a heading... (and (search-forward-regexp "^\* " nil "end") ;; ...that matches the given tags... (seq-reduce (lambda(a b) (and a b)) (mapcar (lambda (tag) (beginning-of-line) (search-forward-regexp (concat ":" tag ":") (line-end-position) "end")) tags) t) ;; ... then execute given function with cursor at beginning of ;; heading. (progn (beginning-of-line) (save-excursion (funcall func)) (end-of-line))))))) 2016-09-21 12:29 GMT+02:00 Pierre Corry <284a6c54@gmail.com>: > Hi! > > Executing the following code should create, for each top level tree in > your file `~/tmp/file.org`, an other file in `~/tmp` named after the tree > heading and containing its content. > > Problem: it does not work. > > The content is not the one expected... > > Is it me or the code that is wrong? Both? > Question on emacs.stackexchange > > > (require 'ox-publish) > > (let () > (with-temp-buffer > (org-mode) > (insert-file-contents "~/tmp/file.org") > (set-mark (point-min)) > (goto-char (point-max)) > > (org-map-entries > (lambda () > (let ((entry_id (replace-regexp-in-string " " "_" (downcase > (nth 4 (org-heading-components)))))) > (org-set-property > "EXPORT_FILE_NAME" > (expand-file-name entry_id "~/tmp"))) > (org-org-export-to-org nil t) > ) > nil > 'region-start-level))) > > Content of `file.org`: > > * Headline 1 > :ready: > > Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent > libero orci, > auctor sed, faucibus vestibulum, gravida vitae, arcu. Nunc posuere. > Suspendisse > potenti. Praesent in arcu ac nisl ultricies ultricies. Fusce eros. > Sed pulvinar > vehicula ante. Maecenas urna dolor, egestas vel, tristique et, porta > eu, > leo. Curabitur vitae sem eget arcu laoreet vulputate. Cras orci > neque, faucibus > et, rhoncus ac, venenatis ac, magna. Aenean eu lacus. Aliquam luctus > facilisis > augue. Nullam fringilla consectetuer sapien. Aenean neque augue, > bibendum a, > feugiat id, lobortis vel, nunc. Suspendisse in nibh quis erat > condimentum > pretium. Vestibulum tempor odio et leo. Sed sodales vestibulum > justo. Cras > convallis pellentesque augue. In eu magna. In pede turpis, feugiat > pulvinar, > sodales eget, bibendum consectetuer, magna. Pellentesque vitae augue. > > [[file:data/fool.jpg][Foo]] > > > > * Headline 2 > :ready: > > Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent > libero orci, > auctor sed, faucibus vestibulum, gravida vitae, arcu. Nunc posuere. > Suspendisse > potenti. Praesent in arcu ac nisl ultricies ultricies. Fusce eros. > Sed pulvinar > vehicula ante. Maecenas urna dolor, egestas vel, tristique et, porta > eu, > leo. Curabitur vitae sem eget arcu laoreet vulputate. Cras orci > neque, faucibus > et, rhoncus ac, venenatis ac, magna. Aenean eu lacus. Aliquam luctus > facilisis > augue. Nullam fringilla consectetuer sapien. Aenean neque augue, > bibendum a, > feugiat id, lobortis vel, nunc. Suspendisse in nibh quis erat > condimentum > pretium. Vestibulum tempor odio et leo. Sed sodales vestibulum > justo. Cras > convallis pellentesque augue. In eu magna. In pede turpis, feugiat > pulvinar, > sodales eget, bibendum consectetuer, magna. Pellentesque vitae augue. > > [[file:data/fool-2.jpg][Foo2]] > > > Expected result: > > `heading_1.org`: > > * Headline 1 > :ready: > > Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent > libero orci, > auctor sed, faucibus vestibulum, gravida vitae, arcu. Nunc posuere. > Suspendisse > potenti. Praesent in arcu ac nisl ultricies ultricies. Fusce eros. > Sed pulvinar > vehicula ante. Maecenas urna dolor, egestas vel, tristique et, porta > eu, > leo. Curabitur vitae sem eget arcu laoreet vulputate. Cras orci > neque, faucibus > et, rhoncus ac, venenatis ac, magna. Aenean eu lacus. Aliquam luctus > facilisis > augue. Nullam fringilla consectetuer sapien. Aenean neque augue, > bibendum a, > feugiat id, lobortis vel, nunc. Suspendisse in nibh quis erat > condimentum > pretium. Vestibulum tempor odio et leo. Sed sodales vestibulum > justo. Cras > convallis pellentesque augue. In eu magna. In pede turpis, feugiat > pulvinar, > sodales eget, bibendum consectetuer, magna. Pellentesque vitae augue. > > [[file:data/fool.jpg][Foo]] > > > `heading_2.org`: > > * Headline 2 > :ready: > > Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent > libero orci, > auctor sed, faucibus vestibulum, gravida vitae, arcu. Nunc posuere. > Suspendisse > potenti. Praesent in arcu ac nisl ultricies ultricies. Fusce eros. > Sed pulvinar > vehicula ante. Maecenas urna dolor, egestas vel, tristique et, porta > eu, > leo. Curabitur vitae sem eget arcu laoreet vulputate. Cras orci > neque, faucibus > et, rhoncus ac, venenatis ac, magna. Aenean eu lacus. Aliquam luctus > facilisis > augue. Nullam fringilla consectetuer sapien. Aenean neque augue, > bibendum a, > feugiat id, lobortis vel, nunc. Suspendisse in nibh quis erat > condimentum > pretium. Vestibulum tempor odio et leo. Sed sodales vestibulum > justo. Cras > convallis pellentesque augue. In eu magna. In pede turpis, feugiat > pulvinar, > sodales eget, bibendum consectetuer, magna. Pellentesque vitae augue. > > [[file:data/fool-2.jpg][Foo]] > > Maybe a duplicate of : [this question][1] but did not help... > > `GNU Emacs 25.1.1 (x86_64-apple-darwin13.4.0, NS appkit-1265.21 Version > 10.9.5 (Build 13F1911)) of 2016-09-17` > > `Org-mode version 8.3.6` > > > > > [1]: http://emacs.stackexchange.com/questions/2259/how-to- > export-top-level-headings-of-org-mode-buffer-to-separate-files "this > question" > --089e0103ea560aad3b053d082e2c Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Well, I ended up with my custom function then...=C2=A0So case is closed.
Thank for the help anyway!

(defun me/org-map-entries (org-file in-tags func)
  (let* ((tags (if (stringp in-tags)
                   (list in-tags)
                 in-tags)))

    (with-temp-buffer
      (org-mode)
      (insert-file-contents org-file-main)

      ;; Execute func at each heading that matches tags.
      (while (< (point) (point-max))

        ;; If find a heading...
        (and (search-forward-regexp "^\* " nil "end")

             ;; ...that matches the given tags...
             (seq-reduce
              (lambda(a b) (and a b))
              (mapcar
               (lambda (tag)
                 (beginning-of-line)
                 (search-forward-regexp
                  (concat ":" tag ":") (line-end-positi=
on) "end"))
               tags)
              t)

             ;; ... then execute given function with cursor at beginning of
             ;; heading.
             (progn
               (beginning-of-line)
               (save-excursion
                 (funcall func))
               (end-of-line)))))))

<= div class=3D"gmail_extra">
2016-09-21 12:29 G= MT+02:00 Pierre Corry <284a6c54@gmail.com>:
Hi!

Execu= ting the following code should create, for each top level tree in your file= `~/tmp/file.org`, an oth= er file in `~/tmp` named after the tree heading and containing its content.=

Problem: it does not work.

The content is not the one expected...

Is it me= or the code that is wrong? Both?

=C2=A0 =C2=A0 (require=C2=A0'ox-publish)

=C2=A0 =C2=A0 (let ()
=C2=A0 =C2=A0 =C2= =A0 (with-temp-buffer
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (org-mode)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (insert-file-contents "~/tmp/file.org")
=C2=A0= =C2=A0 =C2=A0 =C2=A0 (set-mark (point-min))
=C2=A0 =C2=A0 =C2=A0= =C2=A0 (goto-char (point-max))
=C2=A0 =C2=A0=C2=A0
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 (org-map-entries
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0(lambda ()
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= (let ((entry_id (replace-regexp-in-string " " "_" (down= case (nth 4 (org-heading-components))))))
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0(org-set-property
=C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 "EXPORT_FILE_NAME"
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (expand-file-name entry_id "= ~/tmp")))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(org-org-= export-to-org nil t)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0nil
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0'region-start-level)))

Conten= t of `file.org`:

=C2=A0 =C2=A0 * Headline 1 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0:ready:
=C2=A0 =C2=A0=C2=A0
=C2= =A0 =C2=A0 =C2=A0 Lorem ipsum dolor sit amet, consectetuer adipiscing elit.= Praesent libero orci,
=C2=A0 =C2=A0 =C2=A0 auctor sed, faucibus = vestibulum, gravida vitae, arcu. Nunc posuere. Suspendisse
=C2=A0= =C2=A0 =C2=A0 potenti. Praesent in arcu ac nisl ultricies ultricies. Fusce= eros. Sed pulvinar
=C2=A0 =C2=A0 =C2=A0 vehicula ante. Maecenas = urna dolor, egestas vel, tristique et, porta eu,
=C2=A0 =C2=A0 = =C2=A0 leo. Curabitur vitae sem eget arcu laoreet vulputate. Cras orci nequ= e, faucibus
=C2=A0 =C2=A0 =C2=A0 et, rhoncus ac, venenatis ac, ma= gna. Aenean eu lacus. Aliquam luctus facilisis
=C2=A0 =C2=A0 =C2= =A0 augue. Nullam fringilla consectetuer sapien. Aenean neque augue, bibend= um a,
=C2=A0 =C2=A0 =C2=A0 feugiat id, lobortis vel, nunc. Suspen= disse in nibh quis erat condimentum
=C2=A0 =C2=A0 =C2=A0 pretium.= Vestibulum tempor odio et leo. Sed sodales vestibulum justo. Cras
=C2=A0 =C2=A0 =C2=A0 convallis pellentesque augue. In eu magna. In pede t= urpis, feugiat pulvinar,
=C2=A0 =C2=A0 =C2=A0 sodales eget, biben= dum consectetuer, magna. Pellentesque vitae augue.
=C2=A0 =C2=A0= =C2=A0
=C2=A0 =C2=A0 =C2=A0 [[file:data/fool.jpg][Foo]]
=C2=A0 =C2=A0=C2=A0
=C2=A0 =C2=A0=C2=A0
=C2=A0 =C2=A0= =C2=A0
=C2=A0 =C2=A0 * Headline 2 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0:ready:
=C2=A0 =C2=A0=C2=A0
=C2= =A0 =C2=A0 =C2=A0 Lorem ipsum dolor sit amet, consectetuer adipiscing elit.= Praesent libero orci,
=C2=A0 =C2=A0 =C2=A0 auctor sed, faucibus = vestibulum, gravida vitae, arcu. Nunc posuere. Suspendisse
=C2=A0= =C2=A0 =C2=A0 potenti. Praesent in arcu ac nisl ultricies ultricies. Fusce= eros. Sed pulvinar
=C2=A0 =C2=A0 =C2=A0 vehicula ante. Maecenas = urna dolor, egestas vel, tristique et, porta eu,
=C2=A0 =C2=A0 = =C2=A0 leo. Curabitur vitae sem eget arcu laoreet vulputate. Cras orci nequ= e, faucibus
=C2=A0 =C2=A0 =C2=A0 et, rhoncus ac, venenatis ac, ma= gna. Aenean eu lacus. Aliquam luctus facilisis
=C2=A0 =C2=A0 =C2= =A0 augue. Nullam fringilla consectetuer sapien. Aenean neque augue, bibend= um a,
=C2=A0 =C2=A0 =C2=A0 feugiat id, lobortis vel, nunc. Suspen= disse in nibh quis erat condimentum
=C2=A0 =C2=A0 =C2=A0 pretium.= Vestibulum tempor odio et leo. Sed sodales vestibulum justo. Cras
=C2=A0 =C2=A0 =C2=A0 convallis pellentesque augue. In eu magna. In pede t= urpis, feugiat pulvinar,
=C2=A0 =C2=A0 =C2=A0 sodales eget, biben= dum consectetuer, magna. Pellentesque vitae augue.
=C2=A0 =C2=A0= =C2=A0
=C2=A0 =C2=A0 =C2=A0 [[file:data/fool-2.jpg][Foo2]]
<= div>

Expected result:

`heading_1.org`:

=C2=A0 =C2=A0 * Headline 1 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:ready:
=C2=A0 =C2=A0=C2=A0
<= div>=C2=A0 =C2=A0 =C2=A0 Lorem ipsum dolor sit amet, consectetuer adipiscin= g elit. Praesent libero orci,
=C2=A0 =C2=A0 =C2=A0 auctor sed, fa= ucibus vestibulum, gravida vitae, arcu. Nunc posuere. Suspendisse
=C2=A0 =C2=A0 =C2=A0 potenti. Praesent in arcu ac nisl ultricies ultricies= . Fusce eros. Sed pulvinar
=C2=A0 =C2=A0 =C2=A0 vehicula ante. Ma= ecenas urna dolor, egestas vel, tristique et, porta eu,
=C2=A0 = =C2=A0 =C2=A0 leo. Curabitur vitae sem eget arcu laoreet vulputate. Cras or= ci neque, faucibus
=C2=A0 =C2=A0 =C2=A0 et, rhoncus ac, venenatis= ac, magna. Aenean eu lacus. Aliquam luctus facilisis
=C2=A0 =C2= =A0 =C2=A0 augue. Nullam fringilla consectetuer sapien. Aenean neque augue,= bibendum a,
=C2=A0 =C2=A0 =C2=A0 feugiat id, lobortis vel, nunc.= Suspendisse in nibh quis erat condimentum
=C2=A0 =C2=A0 =C2=A0 p= retium. Vestibulum tempor odio et leo. Sed sodales vestibulum justo. Cras
=C2=A0 =C2=A0 =C2=A0 convallis pellentesque augue. In eu magna. In= pede turpis, feugiat pulvinar,
=C2=A0 =C2=A0 =C2=A0 sodales eget= , bibendum consectetuer, magna. Pellentesque vitae augue.
=C2=A0 = =C2=A0=C2=A0
=C2=A0 =C2=A0 =C2=A0 [[file:data/fool.jpg][Foo]]



=C2=A0 =C2=A0 * = Headline 2 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:ready:
=C2=A0 =C2=A0=C2=A0
=C2=A0 =C2=A0 =C2=A0 Lorem ipsum dol= or sit amet, consectetuer adipiscing elit. Praesent libero orci,
= =C2=A0 =C2=A0 =C2=A0 auctor sed, faucibus vestibulum, gravida vitae, arcu. = Nunc posuere. Suspendisse
=C2=A0 =C2=A0 =C2=A0 potenti. Praesent = in arcu ac nisl ultricies ultricies. Fusce eros. Sed pulvinar
=C2= =A0 =C2=A0 =C2=A0 vehicula ante. Maecenas urna dolor, egestas vel, tristiqu= e et, porta eu,
=C2=A0 =C2=A0 =C2=A0 leo. Curabitur vitae sem ege= t arcu laoreet vulputate. Cras orci neque, faucibus
=C2=A0 =C2=A0= =C2=A0 et, rhoncus ac, venenatis ac, magna. Aenean eu lacus. Aliquam luctu= s facilisis
=C2=A0 =C2=A0 =C2=A0 augue. Nullam fringilla consecte= tuer sapien. Aenean neque augue, bibendum a,
=C2=A0 =C2=A0 =C2=A0= feugiat id, lobortis vel, nunc. Suspendisse in nibh quis erat condimentum<= /div>
=C2=A0 =C2=A0 =C2=A0 pretium. Vestibulum tempor odio et leo. Sed = sodales vestibulum justo. Cras
=C2=A0 =C2=A0 =C2=A0 convallis pel= lentesque augue. In eu magna. In pede turpis, feugiat pulvinar,
= =C2=A0 =C2=A0 =C2=A0 sodales eget, bibendum consectetuer, magna. Pellentesq= ue vitae augue.
=C2=A0 =C2=A0=C2=A0
=C2=A0 =C2=A0 =C2= =A0 [[file:data/fool-2.jpg][Foo]]

Maybe a duplicat= e of : [this question][1] but did not help...

`GNU= Emacs 25.1.1 (x86_64-apple-darwin13.4.0, NS appkit-1265.21 Version 10.9.5 = (Build 13F1911)) of 2016-09-17`

`Org-mode version = 8.3.6`
=C2=A0



<= div>=C2=A0 [1]: http://emacs.stackexchange.com/questions/2259/how-to-= export-top-level-headings-of-org-mode-buffer-to-separate-files "this question"

--089e0103ea560aad3b053d082e2c--