2013-06-18 3 views
1

Je cherche une manière concise de lire un arbre spécifique (y compris les sous-arbres) dans une liste.emacs org-mode arborescence de la liste

Dire que j'ai:

* Branch 
** Small branch 
** Another small branch 
*** Leaves 
* Flowers 

La fonction devrait être en mesure de rechercher par expression régulière et copiez le sous-arbre (par exemple la recherche de la Direction générale) à une liste comme:

'(("Small branch") ("Another small branch" ("Leaves"))) 
+1

Vous devriez développer ce que vous entendez exactement par «liste» - je peux penser à plusieurs façons d'interpréter cela, la plus évidente d'entre elles étant «((« Branche »(« Petite branche ») (« Une autre petite branche "(" Feuilles "))) (" Fleurs "))' –

+0

Yip, c'est ce que je voulais dire. Merci Sean. – cheese

Répondre

1

Le suit semble fonctionner:

(defun org-list-siblings() 
    "List siblings in current buffer starting at point. 
Note, you can always (goto-char (point-min)) to collect all siblings." 
    (interactive) 
    (let (ret) 
    (unless (org-at-heading-p) 
     (org-forward-heading-same-level nil t)) 
    (while (progn 
     (setq ret (cons (append (list (substring-no-properties (org-get-heading))) 
         (save-excursion 
         (when (org-goto-first-child) 
          (org-list-siblings)))) 
       ret)) 
     (org-goto-sibling))) 
     (nreverse ret))) 

Si vous n'avez pas besoin de l'arbre complet, mais un point de sous-arbre sur le th Le premier de ses titres d'enfants. C'est méthodique puisque les en-têtes de niveau supérieur sont interprétés comme les premiers enfants. Il n'y a pas de racine commune.

Questions connexes