* deleting hidden parts of sparse trees @ 2008-07-07 8:55 Dan Davison 2008-07-07 16:44 ` Carsten Dominik 0 siblings, 1 reply; 5+ messages in thread From: Dan Davison @ 2008-07-07 8:55 UTC (permalink / raw) To: emacs org-mode mailing list I'd like to be able to create a 'pruned' tree -- I am thinking of an operation that is similar to sparse tree creation, but which results in the deletion (not just folding) of all subtrees that contain no matching entries. I don't think this currently exists as such (?), but it is possible to do what I want by (1) creating a sparse tree, and (2) org-export-visible, selecting the 'keep-buffer' option. So that's good. However, I don't know how to do it programmatically, because org-export-visible has interactive keyboard input. (Or am I just exposing my ignorance here??) I've looked at the code, and what occurs to me is to hack out the middle bit of org-export-visible as a separate function, say org-prune-invisible or something. I sort of tried. It, err, didn't work. Anyone think this would be worth doing? (The functionality, if not via my suggested route) Dan ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: deleting hidden parts of sparse trees 2008-07-07 8:55 deleting hidden parts of sparse trees Dan Davison @ 2008-07-07 16:44 ` Carsten Dominik 2008-07-07 16:48 ` Carsten Dominik 0 siblings, 1 reply; 5+ messages in thread From: Carsten Dominik @ 2008-07-07 16:44 UTC (permalink / raw) To: Dan Davison; +Cc: emacs org-mode mailing list On Jul 7, 2008, at 1:55 AM, Dan Davison wrote: > I'd like to be able to create a 'pruned' tree -- I am thinking of an > operation that is similar to sparse tree creation, but which results > in the deletion (not just folding) of all subtrees that contain no > matching entries. > > I don't think this currently exists as such (?), No, it does not. > but it is possible to do > what I want by (1) creating a sparse tree, and (2) org-export-visible, > selecting the 'keep-buffer' option. That is a possibility, but for your task a much more direct way would be to iterate directly over the overlays in the buffer and to delete text accordingly. (defun outline-delete-invisible () "Delete all text covert by overlays with `invisible' property `outline'." (interactive) (let ((ovls (overlays-in (point-min) (point-max))) o) (while (setq o (pop ovls)) (and (eq (overlay-get o 'invisible) 'outline)) (delete-region (overlay-start o) (overlay-end o))))) Do I need to mention that this will be a dangerous operation, deleting lots of invisible text? You might find out only ater it is too late to recover. HTH - Carsten ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: deleting hidden parts of sparse trees 2008-07-07 16:44 ` Carsten Dominik @ 2008-07-07 16:48 ` Carsten Dominik 2008-07-08 17:20 ` Dan Davison 0 siblings, 1 reply; 5+ messages in thread From: Carsten Dominik @ 2008-07-07 16:48 UTC (permalink / raw) To: Carsten Dominik; +Cc: emacs org-mode mailing list On Jul 7, 2008, at 9:44 AM, Carsten Dominik wrote: > > (defun outline-delete-invisible () > "Delete all text covert by overlays with `invisible' property > `outline'." > (interactive) > (let ((ovls (overlays-in (point-min) (point-max))) o) > (while (setq o (pop ovls)) > (and (eq (overlay-get o 'invisible) 'outline)) > (delete-region (overlay-start o) (overlay-end o))))) > > > Do I need to mention that this will be a dangerous operation, deleting > lots of invisible text? You might find out only ater it is too late > to recover. Even much more dangerous then I thought, the command shown above actually deletes anything covered by overlays, not only outline overlays. Just one misplaced parenthesis...... Here is the corrected version. (defun outline-delete-invisible () "Delete all text covered by overlays with `invisible' property `outline'." (interactive) (let ((ovls (overlays-in (point-min) (point-max))) o) (while (setq o (pop ovls)) (and (eq (overlay-get o 'invisible) 'outline) (delete-region (overlay-start o) (overlay-end o)))))) ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: deleting hidden parts of sparse trees 2008-07-07 16:48 ` Carsten Dominik @ 2008-07-08 17:20 ` Dan Davison [not found] ` <2E800125-C30C-477E-AB79-01571C4C0D4D@uva.nl> 0 siblings, 1 reply; 5+ messages in thread From: Dan Davison @ 2008-07-08 17:20 UTC (permalink / raw) To: Carsten Dominik; +Cc: emacs org-mode mailing list On Mon, Jul 07, 2008 at 09:48:37AM -0700, Carsten Dominik wrote: > > On Jul 7, 2008, at 9:44 AM, Carsten Dominik wrote: >> <...> >> >> Do I need to mention that this will be a dangerous operation, deleting >> lots of invisible text? You might find out only ater it is too late >> to recover. > > > Even much more dangerous then I thought, the command shown above > actually deletes anything covered by overlays, not only outline > overlays. Just one misplaced parenthesis...... > > Here is the corrected version. > > (defun outline-delete-invisible () > "Delete all text covered by overlays with `invisible' property > `outline'." > (interactive) > (let ((ovls (overlays-in (point-min) (point-max))) o) > (while (setq o (pop ovls)) > (and (eq (overlay-get o 'invisible) 'outline) > (delete-region (overlay-start o) (overlay-end o)))))) > Excellent! Thanks for the lesson. My motivation for the request is as follows. I have a 'master' org file (a database of plant photos arranged in a taxonomic hierarchy), and I want to publish it as html, together with html versions of various sparse trees derived from that master file according to tag matching criteria etc. One option would be to write my own publishing function, that creates each sparse tree and calls org-export-visible on it. But I'd be recoding a load of stuff that has already been addressed by org-publish. However, with the new function, I can create the org-files corresponding to the sparse trees, and then let org-publish-org-to-html deal with the master and the derived org files in one go, which is a much better solution IMO. DAn p.s. warning heeded: I copy to a temp buffer, create sparse tree and delete invisible in there. ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <2E800125-C30C-477E-AB79-01571C4C0D4D@uva.nl>]
* Re: deleting hidden parts of sparse trees [not found] ` <2E800125-C30C-477E-AB79-01571C4C0D4D@uva.nl> @ 2008-07-08 19:04 ` Dan Davison 0 siblings, 0 replies; 5+ messages in thread From: Dan Davison @ 2008-07-08 19:04 UTC (permalink / raw) To: emacs org-mode mailing list On Tue, Jul 08, 2008 at 10:28:04AM -0700, Carsten Dominik wrote: > Hi Dan, this is very interesting. > > Maybe you would like to write a little document how you use Org for this > purpose, what your setup is, why you chose Org to do this etc and put it Yep, I'd be happy to. (It was somewhat pretentious of me to call my personal collection of random photos of flowers a 'database', but still happy to.) Dan > up on the web? I'd happily link to it from the Org webpages - we need > more of these examples. > > - Carsten > > On Jul 8, 2008, at 10:20 AM, Dan Davison wrote: > >> On Mon, Jul 07, 2008 at 09:48:37AM -0700, Carsten Dominik wrote: >>> >>> On Jul 7, 2008, at 9:44 AM, Carsten Dominik wrote: >>>> >> <...> >>>> >>>> Do I need to mention that this will be a dangerous operation, >>>> deleting >>>> lots of invisible text? You might find out only ater it is too late >>>> to recover. >>> >>> >>> Even much more dangerous then I thought, the command shown above >>> actually deletes anything covered by overlays, not only outline >>> overlays. Just one misplaced parenthesis...... >>> >>> Here is the corrected version. >>> >>> (defun outline-delete-invisible () >>> "Delete all text covered by overlays with `invisible' property >>> `outline'." >>> (interactive) >>> (let ((ovls (overlays-in (point-min) (point-max))) o) >>> (while (setq o (pop ovls)) >>> (and (eq (overlay-get o 'invisible) 'outline) >>> (delete-region (overlay-start o) (overlay-end o)))))) >>> >> >> Excellent! Thanks for the lesson. >> >> My motivation for the request is as follows. I have a 'master' org >> file (a database of plant photos arranged in a taxonomic hierarchy), >> and I want to publish it as html, together with html versions of >> various sparse trees derived from that master file according to tag >> matching criteria etc. One option would be to write my own publishing >> function, that creates each sparse tree and calls org-export-visible >> on it. But I'd be recoding a load of stuff that has already been >> addressed by org-publish. However, with the new function, I can create >> the org-files corresponding to the sparse trees, and then let >> org-publish-org-to-html deal with the master and the derived org files >> in one go, which is a much better solution IMO. >> >> DAn >> >> p.s. warning heeded: I copy to a temp buffer, create sparse tree >> and delete invisible in there. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-07-08 19:05 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-07-07 8:55 deleting hidden parts of sparse trees Dan Davison 2008-07-07 16:44 ` Carsten Dominik 2008-07-07 16:48 ` Carsten Dominik 2008-07-08 17:20 ` Dan Davison [not found] ` <2E800125-C30C-477E-AB79-01571C4C0D4D@uva.nl> 2008-07-08 19:04 ` Dan Davison
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).