I doubt it is the org version, I have 9.1.13. The function should return a list of clock elements. On Sun, Aug 5, 2018 at 7:56 PM, Cody Goodman wrote: > Thanks! I think that's going to be what I'm looking for, but I got an > error: > > let: Wrong type argument: integer-or-marker-p, nil > > I traced it down to the =org-element-property :contents-begin= call which > essentially ends up looking like this: > > (org-element-property :contents-begin '((clock (:status closed :value > (timestamp (:type inactive-range :raw-value "[2018-08-05 Sun > 02:35]--[2018-08-05 Sun 03:06]" :year-start 2018 :month-start 8 :day-start > 5 :hour-start 2 :minute-start 35 :year-end 2018 :month-end 8 :day-end 5 > :hour-end 3 :minute-end 6 :begin 28124 :end 28171 :post-blank 1)) :duration > "0:31" :begin 28112 :end 28180 :post-blank 0 :post-affiliated 28112 :parent > (drawer (:begin 28097 :end 28191 :drawer-name "LOGBOOK" :contents-begin > 28112 :contents-end 28180 :post-blank 0 :post-affiliated 28097 :parent > nil)))))) > I would not expect that to work, you have a list of elements, and not an element. > > Then contents-begin isn't being accessed for some reason. I don't know > elisp well enough to know why just by looking at that. The raw output I got > from my point being over a TODO I yanked from the messages buffer was: > > > (clock (:status closed :value (timestamp (:type inactive-range :raw-value > "[2018-08-05 Sun 02:35]--[2018-08-05 Sun 03:06]" :year-start 2018 > :month-start 8 :day-start 5 :hour-start 2 :minute-start 35 :year-end 2018 > :month-end 8 :day-end 5 :hour-end 3 :minute-end 6 :begin 28124 :end 28171 > :post-blank 1)) :duration "0:31" :begin 28112 :end 28180 :post-blank 0 > :post-affiliated 28112 :parent (drawer (:begin 28097 :end 28191 > :drawer-name "LOGBOOK" :contents-begin 28112 :contents-end 28180 > :post-blank 0 :post-affiliated 28097 :parent nil)))) > > > To be able to work with it in org mode I just put a ='= in front of it > like: > I don't think this will work either. > > #+BEGIN_SRC elisp > (org-element-property :contents-begin '((clock (:status closed > :value (timestamp (:type inactive-range :raw-value "[2018-08-05 Sun > 02:35]--[2018-08-05 Sun 03:06]" :year-start 2018 :month-start 8 :day-start > 5 :hour-start 2 :minute-start 35 :year-end 2018 :month-end 8 :day-end 5 > :hour-end 3 :minute-end 6 :begin 28124 :end 28171 :post-blank 1)) :duration > "0:31" :begin 28112 :end 28180 :post-blank 0 :post-affiliated 28112 :parent > (drawer (:begin 28097 :end 28191 :drawer-name "LOGBOOK" :contents-begin > 28112 :contents-end 28180 :post-blank 0 :post-affiliated 28097 :parent > nil)))))) > #+END_SRC > > If that's the correct way to do that translation, then maybe we are using > different org mode versions? I'm using 9.1.9. > You can get to the timestamps in each line like this: #+BEGIN_SRC emacs-lisp (mapcar (lambda (clock) (org-element-property :value clock)) (get-clock-lines)) #+END_SRC #+RESULTS: | timestamp | (:type inactive-range :raw-value [2018-08-04 Sat 21:16]--[2018-08-04 Sat 12:18] :year-start 2018 :month-start 8 :day-start 4 :hour-start 21 :minute-start 16 :year-end 2018 :month-end 8 :day-end 4 :hour-end 12 :minute-end 18 :begin 1502 :end 1549 :post-blank 1) | | timestamp | (:type inactive-range :raw-value [2018-08-04 Sat 21:16]--[2018-08-04 Sat 15:35] :year-start 2018 :month-start 8 :day-start 4 :hour-start 21 :minute-start 16 :year-end 2018 :month-end 8 :day-end 4 :hour-end 15 :minute-end 35 :begin 1569 :end 1616 :post-blank 1) | and then you can get to properties of those. > > > On Sun, Aug 5, 2018 at 5:41 PM John Kitchin > wrote: > >> I think something like this is what you are looking for: >> >> #+BEGIN_SRC emacs-lisp >> (defun get-clock-lines () >> "Return org-element representations of clock lines in a logbook drawer." >> (interactive) >> (save-excursion >> (goto-char (org-log-beginning)) >> (let ((logbook (org-element-at-point)) >> (clock-entries '()) >> (current-element)) >> (goto-char (org-element-property :contents-begin logbook)) >> (setq current-element (org-element-at-point)) >> (while (eq 'clock (car current-element)) >> (push current-element clock-entries) >> (forward-line) >> (setq current-element (org-element-at-point))) >> (reverse clock-entries)))) >> >> (get-clock-lines) >> #+END_SRC >> >> >> Cody Goodman writes: >> >> > Given a TODO that looks like this: >> > >> > *** DONE put into spacemacs file >> > CLOSED: [2018-08-04 Sat 21:18] >> > :LOGBOOK: >> > CLOCK: [2018-08-04 Sat 21:16]--[2018-08-04 Sat 12:18] => 0:02 >> > :END: >> > >> > What function will get me the parts in CLOCK: [2018-08-04 Sat >> > 21:16]--[2018-08-04 Sat 12:18] => 0:02, preferably in plist format like >> > the closed timestamp org-element-at-point gives back of: >> > >> > (timestamp (:type inactive :raw-value "[2018-08-04 Sat 21:18]" >> :year-start >> > 2018 :month-start 8 :day-start 4 :hour-start 21 :minute-start 18 >> :year-end >> > 2018 :month-end 8 :day-end 4 :hour-end 21 :minute-end 18 :begin 46 :end >> 68 >> > :post-blank 0) >> > >> > Note org-element-at-point doesn't give back logbook information: >> > >> > (headline (:raw-value "put into spacemacs file" :begin 1 :end 157 >> > :pre-blank 0 :contents-begin 34 :contents-end 157 :level 3 :priority nil >> > :tags nil :todo-keyword #("DONE" 0 4 (fontified t face org-done)) >> > :todo-type done :post-blank 0 :footnote-section-p nil :archivedp nil >> > :commentedp nil :post-affiliated 1 :closed (timestamp (:type inactive >> > :raw-value "[2018-08-04 Sat 21:18]" :year-start 2018 :month-start 8 >> > :day-start 4 :hour-start 21 :minute-start 18 :year-end 2018 :month-end 8 >> > :day-end 4 :hour-end 21 :minute-end 18 :begin 46 :end 68 :post-blank 0)) >> > :title "put into spacemacs file")) >> > >> > Thanks, >> > >> > Cody >> >> >> -- >> Professor John Kitchin >> Doherty Hall A207F >> Department of Chemical Engineering >> Carnegie Mellon University >> Pittsburgh, PA 15213 >> 412-268-7803 >> @johnkitchin >> http://kitchingroup.cheme.cmu.edu >> >