Re: [Orgmode] Iterate over list with `org-next-item'
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'
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'
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'
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