emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Agenda view sorting based on custom property
@ 2022-06-17  9:42 Haakon HR
  2022-06-17 11:50 ` Ihor Radchenko
  0 siblings, 1 reply; 3+ messages in thread
From: Haakon HR @ 2022-06-17  9:42 UTC (permalink / raw)
  To: emacs-orgmode

Hi all,

I'm trying to hack together a custom agenda view where I want to sort
the entries by a custom property, let's call it :CUSTOM:. So the entries
in question would look like this:

* TODO Buy cheese
  :PROPERTIES
  :CUSTOM: 2
  :END:

I have tried a few approaches but I'm a bit stuck. My first approach was
to use the variable `org-agenda-cmp-user-defined' and implement a
comparison function based on the already existing ones like
`org-cmp-alpha' or `org-cmp-effort'. However, I'm not able to extract
the custom property from the kind of entry that is passed into the
comparison function, which seem to rely on `text-properties'. Is it
possible to somehow make custom properties available as a text property,
similar to things like 'todo-state, 'tags and so on?

My second approach was to try to use the org parsing capabilities. I can
get the AST by parsing the buffers of interest containing entries I want
to sort. I'm for example able to get the list of :CUSTOM: with this
snippet:

`(org-element-map (org-element-parse-buffer) '(headline) (lambda (hl)
  (org-element-property :RELEVANCE hl)))'

Then I imagine I can manipulate the AST into the order I want and then
use `org-element-interpret-data' to create a new buffer w/ the desired
sorting. However, I haven't found a way to actually create a buffer
containing all the information from the interpreted AST as some
information seem to get lost. The end goal in this case is also an
agenda view where I can build on top of all the agenda capabilities, but
using this custom sorting. Is there a way to start from an AST and
transform it into an agenda view?

Thanks for any help or tips,
Haakon


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Agenda view sorting based on custom property
  2022-06-17  9:42 Agenda view sorting based on custom property Haakon HR
@ 2022-06-17 11:50 ` Ihor Radchenko
  2022-06-17 20:51   ` Haakon HR
  0 siblings, 1 reply; 3+ messages in thread
From: Ihor Radchenko @ 2022-06-17 11:50 UTC (permalink / raw)
  To: Haakon HR; +Cc: emacs-orgmode

Haakon HR <haakonhr@gmail.com> writes:

> I have tried a few approaches but I'm a bit stuck. My first approach was
> to use the variable `org-agenda-cmp-user-defined' and implement a
> comparison function based on the already existing ones like
> `org-cmp-alpha' or `org-cmp-effort'. However, I'm not able to extract
> the custom property from the kind of entry that is passed into the
> comparison function, which seem to rely on `text-properties'. Is it
> possible to somehow make custom properties available as a text property,
> similar to things like 'todo-state, 'tags and so on?

Yes. What you are looking for is 'org-hd-marker property. It holds
marker to the position of the corresponding headline.

Once you know the marker, you can simply

(org-entry-get marker "CUSTOM")

It does not matter that current buffer is not the Org buffer. Marker
contains buffer information.

Best,
Ihor


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Agenda view sorting based on custom property
  2022-06-17 11:50 ` Ihor Radchenko
@ 2022-06-17 20:51   ` Haakon HR
  0 siblings, 0 replies; 3+ messages in thread
From: Haakon HR @ 2022-06-17 20:51 UTC (permalink / raw)
  To: emacs-orgmode

Thank you! That was exactly what I was looking for.

Sincerely,
Haakon


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-06-17 20:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-17  9:42 Agenda view sorting based on custom property Haakon HR
2022-06-17 11:50 ` Ihor Radchenko
2022-06-17 20:51   ` Haakon HR

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).