[-- Attachment #1: Type: text/plain, Size: 359 bytes --] Currently, this function goes to a lot of trouble to concatenate a complicated regexp to find metadata and drawers, and then doesn't use it. As it stands, if you put point in a headline that has a property drawer and then call =(org-end-of-meta-data-and-drawers)=, point moves to the *beginning* of the property drawer -- obviously not what you want. Eric [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: orgmetadatafix.diff --] [-- Type: text/x-diff, Size: 465 bytes --] diff --git a/lisp/org.el b/lisp/org.el index 777850a..e7f9f89 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -19992,7 +19992,7 @@ clocking lines, and drawers." "\\|" "\\([ \t]*\\(" org-keyword-time-regexp "\\)\\)"))) (forward-line 1) - (while (looking-at (concat "[ \t]*\\(" org-keyword-time-regexp "\\)")) + (while (looking-at (concat "[ \t]*\\(" re "\\)")) (if (not (match-end 1)) ;; empty or planning line (forward-line 1)
Eric Abrahamsen <eric@ericabrahamsen.net> writes:
> Currently, this function goes to a lot of trouble to concatenate a
> complicated regexp to find metadata and drawers, and then doesn't use
> it. As it stands, if you put point in a headline that has a property
> drawer and then call =(org-end-of-meta-data-and-drawers)=, point moves
> to the *beginning* of the property drawer -- obviously not what you
> want.
Dammit this is still not right, hang on a second…
Eric
[-- Attachment #1: Type: text/plain, Size: 578 bytes --] Eric Abrahamsen <eric@ericabrahamsen.net> writes: > Eric Abrahamsen <eric@ericabrahamsen.net> writes: > >> Currently, this function goes to a lot of trouble to concatenate a >> complicated regexp to find metadata and drawers, and then doesn't use >> it. As it stands, if you put point in a headline that has a property >> drawer and then call =(org-end-of-meta-data-and-drawers)=, point moves >> to the *beginning* of the property drawer -- obviously not what you >> want. > > Dammit this is still not right, hang on a second… Okay, this should be right, sorry about that. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: orgmetadatafix.diff --] [-- Type: text/x-diff, Size: 438 bytes --] diff --git a/lisp/org.el b/lisp/org.el index 777850a..ee0b88c 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -19992,7 +19992,7 @@ clocking lines, and drawers." "\\|" "\\([ \t]*\\(" org-keyword-time-regexp "\\)\\)"))) (forward-line 1) - (while (looking-at (concat "[ \t]*\\(" org-keyword-time-regexp "\\)")) + (while (looking-at re) (if (not (match-end 1)) ;; empty or planning line (forward-line 1)
It looks like patch-acceptance has picked up again recently -- may I
humbly bump the fix below? Such a useful helper function, otherwise!
Thanks,
Eric
> diff --git a/lisp/org.el b/lisp/org.el
> index 777850a..ee0b88c 100644
> --- a/lisp/org.el
> +++ b/lisp/org.el
> @@ -19992,7 +19992,7 @@ clocking lines, and drawers."
> "\\|"
> "\\([ \t]*\\(" org-keyword-time-regexp "\\)\\)")))
> (forward-line 1)
> - (while (looking-at (concat "[ \t]*\\(" org-keyword-time-regexp "\\)"))
> + (while (looking-at re)
> (if (not (match-end 1))
> ;; empty or planning line
> (forward-line 1)
Hi Eric,
Eric Abrahamsen <eric@ericabrahamsen.net> writes:
> Currently, this function goes to a lot of trouble to concatenate a
> complicated regexp to find metadata and drawers, and then doesn't use
> it. As it stands, if you put point in a headline that has a property
> drawer and then call =(org-end-of-meta-data-and-drawers)=, point moves
> to the *beginning* of the property drawer -- obviously not what you
> want.
you're right there was something weird in this function.
I just simplified it, inspired by your patch. Thanks
for this!
--
Bastien
Eric Abrahamsen <eric@ericabrahamsen.net> writes:
> It looks like patch-acceptance has picked up again recently -- may I
> humbly bump the fix below? Such a useful helper function, otherwise!
If you are using this helper function in your own defuns, please report
any issue. For example, I see no reason why the function should gives
the value of (point), but maybe you need this.
Thanks,
--
Bastien
On Thu, Jun 30 2011, Bastien wrote:
> Hi Eric,
>
> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>
>> Currently, this function goes to a lot of trouble to concatenate a
>> complicated regexp to find metadata and drawers, and then doesn't use
>> it. As it stands, if you put point in a headline that has a property
>> drawer and then call =(org-end-of-meta-data-and-drawers)=, point moves
>> to the *beginning* of the property drawer -- obviously not what you
>> want.
>
> you're right there was something weird in this function.
>
> I just simplified it, inspired by your patch. Thanks
> for this!
Thanks, but this introduces new problems for me -- the regexp matches on
every line, so it trucks along past both drawers and regular text to the
next heading, and stops there. I think the test for the drawer end is
necessary, which probably means the regexp grouping is also necessary…
E
PS My own use case (another version of org word count) didn't rely on a
return value from the function, but it strikes me that, all else being
equal, a return value of point could be more useful than nothing…
Hi Eric, Eric Abrahamsen <eric@ericabrahamsen.net> writes: > Thanks, but this introduces new problems for me -- the regexp matches on > every line, so it trucks along past both drawers and regular text to the > next heading, and stops there. I think the test for the drawer end is > necessary, which probably means the regexp grouping is also necessary… This should be fixed now. Thanks for the careful testing! > PS My own use case (another version of org word count) didn't rely on a > return value from the function, but it strikes me that, all else being > equal, a return value of point could be more useful than nothing… Yes, I left the (point) call at the end. Best, -- Bastien