Nicolas Richard <theonewiththeevill...@yahoo.fr> writes:

> Calvin Young <calvinwyo...@gmail.com> writes:
>> How do I need to massage this to give me the beginning of the whole
>> list item? Is there a recommended solution that'd work for both
>> description lists *and* plain lists?
>
> This seems to work for me:
>
> (defun yf/org-beginning-of-item ()
>   (let ((element (org-element-at-point)))
>     ;; 'plain-list is returned when at the beginning of the first item in the 
> list.
>     (when (eq 'plain-list (org-element-type element))
>       (save-excursion
>         (forward-char)
>         (setq element (org-element-at-point))))
>     ;; look ancestors to find an 'item element.
>     (while (and element
>                 (not
>                  (eq 'item
>                      (org-element-type element))))
>       (setq element (org-element-property :parent element)))
>     (if (not element)
>         (error "Not in a list item")
>       (goto-char
>        (+ (length (org-element-property :bullet element))
>           (org-element-property :begin element))))))
>
> Probably one could use the list API directly (from org-list.el) too.

Indeed, I'd definitely go for the org-list stuff. It's a bit confusing
at first, because it isn't like any of the other org code, but it works
well. Try calling `org-list-struct' on a list; that will probably give
you most of what you need.


Reply via email to