emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Carsten Dominik <carsten.dominik@gmail.com>
To: Ilya Shlyakhter <ilya_shl@alum.mit.edu>
Cc: Martin Pohlack <mp26@os.inf.tu-dresden.de>,
	emacs-orgmode Mode <emacs-orgmode@gnu.org>,
	Bastien Guerry <bastien.guerry@wikimedia.fr>
Subject: Re: custom sorting of agenda items
Date: Fri, 20 Aug 2010 08:30:51 +0200	[thread overview]
Message-ID: <434E4A53-2465-4825-9900-58824EF819A8@gmail.com> (raw)
In-Reply-To: <AANLkTik33mBFS=6c+eh28cWosyCD43ZF4GcAtwtKX3Oa@mail.gmail.com>


On Aug 20, 2010, at 1:49 AM, Ilya Shlyakhter wrote:

>> The problem here is that I would have to insert a call to the hook in
>> many different places as there are many different functions that
>> collect entries for the agenda.
>
> in org-finalize-agenda-entries, when you call
> org-agenda-before-sorting-filter-function, could you
> save-excursion and move to the original org entry before each call?

I could.  But some applications of this hook will not need this  
overhead,
so it is better to put this overhead into the function itself.
We can make it easier, like a single macro for going there and back  
again...

Something like (untested):

(defmacro org-agenda-with-point-at-orig-entry (string &rest body)
   "Execute BODY with point at location given by `org-hd-marker'  
property.
If STRING is non-nil, the text property will be fetched from position 0
in that string.  If STRING is nil, it will be fetched from the beginning
of the current line."
   `(let ((marker (get-text-property (if string 0 (point-at-bol))
				    'org-hd-marker string)))
      (with-current-buffer (marker-buffer marker)
        (save-excursion
	 (goto-char marker)
	 ,@body))))

And in your setup you would hen define the filter function like

(defun my-before-sorting-filter (line-string)
    (org-agenda-with-point-at-orig-entry line-string
       ....
       ....
        ))

- Carsten


>
>> It might be, but there is a possibility that updating the line after
>> say a TODO state change will not work exactly like you wanted.
>
> that's ok in my case, the agenda items i'm collecting aren't todo  
> items.
> thanks!  maybe, document this in the docstring of
> org-agenda-before-sorting-filter-function .	
>
> On Wed, Aug 18, 2010 at 3:35 AM, Carsten Dominik
> <carsten.dominik@gmail.com> wrote:
>>
>> On Aug 17, 2010, at 6:40 PM, Ilya Shlyakhter wrote:
>>
>>> Thanks Carsten, org-agenda-before-sorting-filter-function does  
>>> what I
>>> need.
>>>
>>> It would be better if it was called with the point already on the
>>> corresponding headline in the corresponding buffer.
>>> This would also be faster as you could call it for all entries in  
>>> one
>>> buffer at a time, avoiding a separate excursion for each entry.
>>
>> The problem here is that I would have to insert a call to the hook in
>> many different places as there are many different functions that
>> collect entries for the agenda.
>>
>>>
>>> It seems that _appending_ text to the agenda line should be safe.   
>>> Is
>>> that correct?
>>
>> It might be, but there is a possibility that updating the line after
>> say a TODO state change will not work exactly like you wanted.
>>
>> - Carsten
>>
>>>
>>> thanks,
>>>
>>> ilya
>>>
>>> On Mon, Aug 16, 2010 at 9:40 AM, Carsten Dominik
>>> <carsten.dominik@gmail.com> wrote:
>>>>
>>>> On Aug 16, 2010, at 2:59 PM, Ilya Shlyakhter wrote:
>>>>
>>>>> Thanks!   Would things work faster if there was a user-defined  
>>>>> hook
>>>>> that was called at each agenda entry at the same time
>>>>> the 'org-hd-marker property gets stored, so it could store any  
>>>>> other
>>>>> things it needs from the entry as text properties for later
>>>>> use by user-defined entry sorting routine?
>>>>
>>>> Please pull and take a look at the new variable
>>>> `org-agenda-before-sorting-filter-function'.
>>>>
>>>> Martin, I think you could use this variable also for your
>>>> "filtering" application.
>>>>
>>>> - Carsten
>>>>
>>>>>
>>>>> ilya
>>>>>
>>>>> On Mon, Aug 16, 2010 at 8:54 AM, Carsten Dominik
>>>>> <carsten.dominik@gmail.com> wrote:
>>>>>>
>>>>>> On Aug 5, 2010, at 1:01 AM, Ilya Shlyakhter wrote:
>>>>>>
>>>>>>> When giving a user-defined function for org-agenda-cmp-user- 
>>>>>>> defined,
>>>>>>> the function gets two agenda entries.   Is there a way from an  
>>>>>>> agenda
>>>>>>> entry
>>>>>>> to get to the original org entry?
>>>>>>
>>>>>> Yes, the marker that points to the original entry is stored in  
>>>>>> text
>>>>>> properties.
>>>>>> You can take it and then go to the entry, for example with
>>>>>>
>>>>>> (org-with-point-at (org-get-at-bol 'org-hd-marker)
>>>>>>   ;; do here what you need to do at the location of the entry
>>>>>>   )
>>>>>>
>>>>>> You could do this in org-finalize-agenda-hook for all entries,  
>>>>>> for
>>>>>> example.
>>>>>> Might slow things down, of cause.
>>>>>>
>>>>>> HTH
>>>>>>
>>>>>> - Carsten
>>>>>>
>>>>>>>
>>>>>>> Best would be if, besides a user-defined sort function, you  
>>>>>>> could also
>>>>>>> provide
>>>>>>> a function that takes the org entry and the agenda item (i.e.  
>>>>>>> is run
>>>>>>> with
>>>>>>> point
>>>>>>> on the org entry and is passed the agenda item), and can then  
>>>>>>> store
>>>>>>> anything
>>>>>>> it wants about the org entry as text properties on the agenda  
>>>>>>> item.
>>>>>>> The companion user-defined sorting function could then use these
>>>>>>> stored
>>>>>>> text properties for ordering the agenda items.   Could you add  
>>>>>>> such a
>>>>>>> hook?
>>>>>>>
>>>>>>> thanks,
>>>>>>>
>>>>>>> ilya
>>>>>>>
>>>>>>> On Wed, Aug 4, 2010 at 6:51 PM, Bastien <bastien.guerry@wikimedia.fr 
>>>>>>> >
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Hi Ilya,
>>>>>>>>
>>>>>>>> Ilya Shlyakhter <ilya_shl@alum.mit.edu> writes:
>>>>>>>>
>>>>>>>>> I'd like to sort agenda entries in a custom agenda view by  
>>>>>>>>> the value
>>>>>>>>> of a text property that I put on the headlines.
>>>>>>>>> Is there a way to do that?
>>>>>>>>
>>>>>>>> Well, no.
>>>>>>>>
>>>>>>>> Maybe playing around with org-map-entries could yield some  
>>>>>>>> result.
>>>>>>>>
>>>>>>>> --
>>>>>>>>  Bastien
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Emacs-orgmode mailing list
>>>>>>> Please use `Reply All' to send replies to the list.
>>>>>>> Emacs-orgmode@gnu.org
>>>>>>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>>>>>>
>>>>>> - Carsten
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>> - Carsten
>>>>
>>>>
>>>>
>>>>
>>
>> - Carsten
>>
>>
>>
>>

- Carsten

  reply	other threads:[~2010-08-20  7:18 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-04 19:27 custom sorting of agenda items Ilya Shlyakhter
2010-08-04 22:51 ` Bastien
2010-08-04 23:01   ` Ilya Shlyakhter
2010-08-16 12:54     ` Carsten Dominik
2010-08-16 12:59       ` Ilya Shlyakhter
2010-08-16 13:14         ` Carsten Dominik
2010-08-16 13:40         ` Carsten Dominik
2010-08-17 16:40           ` Ilya Shlyakhter
2010-08-18  7:35             ` Carsten Dominik
2010-08-19 23:49               ` Ilya Shlyakhter
2010-08-20  6:30                 ` Carsten Dominik [this message]
2010-08-17 16:51     ` Samuel Wales

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=434E4A53-2465-4825-9900-58824EF819A8@gmail.com \
    --to=carsten.dominik@gmail.com \
    --cc=bastien.guerry@wikimedia.fr \
    --cc=emacs-orgmode@gnu.org \
    --cc=ilya_shl@alum.mit.edu \
    --cc=mp26@os.inf.tu-dresden.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).