Re: [Orgmode] Iterate over list with `org-next-item'

2010-09-07 Thread Nick Dokos
Nicolas Goaziou n.goaz...@gmail.com wrote:

  * org.el:
... 
 
  * org-mouse.el:
 
...
 
 
  As you can see, the second almost matches what you came up with, but
  the condition is simpler: the code *uses* the error raised to get
  out of the (otherwise infinite) loop, so there is no need to check
  what org-next-item returns.
 
 I strongly advise against using `org-next-item' in a defun. It is, in
 its actual form, meant for interactive use only.
 
 You should have a look at `org-get-next-item' and
 `org-get-previous-item' instead. I left a note about it at line 874 in
 org-list.el (yes, I know...).
 
 There is also `org-apply-on-list' that might be of some help.
 

OK, thanks for the pointer: makes sense. I hadn't pulled your
reimplementation till just now. Of course, these functions didn't exist
before, so there was no choice - but maybe the few places where
org-next-item is used need to be examined and brought up to snuff, using
your new functions? Even if not strictly necessary, then at least as
examples of good practice for others to follow.

Thanks,
Nick

___
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


Re: [Orgmode] Iterate over list with `org-next-item'

2010-09-07 Thread Nicolas Goaziou
Hello,

 Nick Dokos writes:

 Zachary Young zacharysyo...@gmail.com wrote:


 I am trying to iterate over a list with `org-next-item'. I just
 tried:
 
 (ignore-errors (while (equal nil (org-next-item
 
 and it worked.
 
 Is there a better way to do this? I'm not very versed in Elisp, and
 `org-next-item' returning `nil' on success, and throwing an error
 at the end of the list is throwing me a bit.
 

 It's always a good idea to browse the org-mode code itself for
 examples: after all it's been written by (or vetted by) the experts,
 so it should provide a good foundation.

 I found three examples of org-next-item usage, two of which are
 shown here (the third one is a bit subtler):

 * org.el:

 --8---cut here---start-8---
 (defun org-skip-over-state-notes () Skip past the list of State
 notes in an entry. (if (looking-at \n[ \t]*- State) (forward-char
 1)) (while (looking-at [ \t]*- State) (condition-case nil
 (org-next-item) (error (org-end-of-item) --8---cut
 here---end---8---

 * org-mouse.el:

 --8---cut here---start-8---
 (defun org-mouse-for-each-item (function) (save-excursion
 (ignore-errors (while t (org-previous-item))) (ignore-errors (while
 t (funcall function) (org-next-item) --8---cut
 here---end---8---


 As you can see, the second almost matches what you came up with, but
 the condition is simpler: the code *uses* the error raised to get
 out of the (otherwise infinite) loop, so there is no need to check
 what org-next-item returns.

I strongly advise against using `org-next-item' in a defun. It is, in
its actual form, meant for interactive use only.

You should have a look at `org-get-next-item' and
`org-get-previous-item' instead. I left a note about it at line 874 in
org-list.el (yes, I know...).

There is also `org-apply-on-list' that might be of some help.

Regards,

-- Nicolas

___
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


Re: [Orgmode] Iterate over list with `org-next-item'

2010-09-07 Thread Nicolas Goaziou
 Nick Dokos writes:

 OK, thanks for the pointer: makes sense. I hadn't pulled your
 reimplementation till just now. Of course, these functions didn't
 exist before, so there was no choice - but maybe the few places
 where org-next-item is used need to be examined and brought up to
 snuff, using your new functions? Even if not strictly necessary,
 then at least as examples of good practice for others to follow.

You are right: this should be done. Speed issues may happen otherwise.
I'll look into it on Sunday.

As an example,

--8---cut here---start-8---
(defun org-skip-over-state-notes ()
  Skip past the list of State notes in an entry.
  (if (looking-at \n[ \t]*- State) (forward-char 1))
  (while (looking-at [ \t]*- State)
(condition-case nil
(org-next-item)
  (error (org-end-of-item)
--8---cut here---end---8---

would become

--8---cut here---start-8---
(defun org-skip-over-state-notes ()
  Skip past the list of State notes in an entry.
  (if (looking-at \n[ \t]*- State) (forward-char 1))
  (if (looking-at [ \t]*- State) (goto-char (org-list-bottom-point
--8---cut here---end---8---

___
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


Re: [Orgmode] Iterate over list with `org-next-item'

2010-09-02 Thread Nick Dokos
Zachary Young zacharysyo...@gmail.com wrote:


 I am trying to iterate over a list with `org-next-item'. I just tried:
 
 (ignore-errors (while (equal nil (org-next-item
 
 and it worked.
 
 Is there a better way to do this? I'm not very versed in Elisp, and
 `org-next-item' returning `nil' on success, and throwing an error at the end
 of the list is throwing me a bit.
 

It's always a good idea to browse the org-mode code itself for examples: after
all it's been written by (or vetted by) the experts, so it should provide a
good foundation.

I found three examples of org-next-item usage, two of which are shown here
(the third one is a bit subtler):

* org.el:

--8---cut here---start-8---
(defun org-skip-over-state-notes ()
  Skip past the list of State notes in an entry.
  (if (looking-at \n[ \t]*- State) (forward-char 1))
  (while (looking-at [ \t]*- State)
(condition-case nil
(org-next-item)
  (error (org-end-of-item)
--8---cut here---end---8---

* org-mouse.el:

--8---cut here---start-8---
(defun org-mouse-for-each-item (function)
  (save-excursion
(ignore-errors
  (while t (org-previous-item)))
(ignore-errors
  (while t
(funcall function)
(org-next-item)
--8---cut here---end---8---


As you can see, the second almost matches what you came up with, but the
condition is simpler: the code *uses* the error raised to get
out of the (otherwise infinite) loop, so there is no need to check
what org-next-item returns.

HTH
Nick

___
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