On 2018-01-01, at 00:37, Adam Porter <a...@alphapapa.net> wrote: > Marcin Borkowski <mb...@mbork.pl> writes: > >> Thanks again. I played around with this for some time, but there is one >> problem. The agenda has a lot of settings, and replicating them with >> org-map-entries turned out to be no fun. >> >> Is there a way to plug into the agenda generating functions somehow to >> get a Lisp list of agenda items? I'm pretty sure that can be done - >> org-super-agenda does something similar, after all - but I have no idea >> why. I could delve into agenda source myself, but is is quite hairy, so >> maybe someone knows that already? > > Hi Marcin, > > As you said, the agenda code is quite hairy--but it does work very well. > My meager attempt to begin reimplementing it in a more functional way > showed very poor performance by comparison; perhaps because I didn't do > it well, but I'm guessing also because of Emacs' function call overhead. > But for your project, perhaps the code would come in useful; feel free > to borrow anything that you like: > > https://github.com/alphapapa/org-agenda-ng > > As you mentioned, org-super-agenda simply uses the raw output of the > org-agenda commands by reading it from the agenda buffer. This works > well because each line in the agenda buffer is an item, and the text on > each line has Emacs text-properties that include most of the relevant > metadata (anything else can be retrieved by using a macro to eval code > at the item's marker--see org-super-agenda--when-with-marker-buffer, > which I should probably rename, haha). So getting a list of agenda > items could be as simple as running this in the agenda buffer: > > (split-string (buffer-substring (point-min) (point-max)) > "\n" 'omit-nulls) > > org-super-agenda does that by using advice to filter the return of > org-agenda-finalize-entries, which you could also do quite easily. > > So while the agenda code is relatively opaque, it's easier to use its > output than you might think. :) Let me know if I can help. (I haven't > been monitoring the list lately, so you might email me directly if > necessary.) Good luck!
Hi Adam, and thanks for your answer. I never thought about analyzing agenda /output/ - that is quite clever! I still think it's a hack, and I really regret that Org does not offer a programmer a better API for agenda (and many other things) - there could be a lot of applications built on top of Org with that. I'll definitely try this solution some day (maybe even within a few days). Thanks and best, -- Marcin Borkowski