This is fantastic, but it turns out my use case is a little more complex
than I thought & I've now bnaged my head against it for a hwile, might as
well ask you for help!

I have non-assignment level-1 headlines in my comments.org files:

* Introduction
let me explain how this system works... and here is some code to generate
the grading templates

* Assignment 1
** Student 1
** Student 2
* Assignment 2
** Student 1
** Student 2

...etc.

Solution: add a tag to Assignment headlines :ASSIGNMENT and search that
way:

  (setq assignments '())
  (setq students '())

  ;; get assignments
  (org-map-entries
   (lambda ()
     (when  (member "ASSIGNMENT" (org-get-tags-at (point) 'local)) ;; (= 1
(nth 0 (org-heading-components)))
       (add-to-list 'assignments (nth 4 (org-heading-components)) t))))


But there are also level-2 headings that shouldn't be added to the student
list, and I have trouble with that part:

 (org-map-entries
   (lambda ()
     (when (member "ASSIGNMENT" (org-element-property :tags
(org-element-lineage (org-element-at-point) 'headline)))
       (add-to-list 'students (cons  (nth 4 (org-heading-components)) '())
t))))

does not work, for instance; nor does:

(org-map-entries
   (lambda ()
     (when (member "ASSIGNMENT" (org-get-tags-at (save-excursion
(org-up-heading-safe)) 'local))
       (add-to-list 'students (cons  (nth 4 (org-heading-components)) '())
t))))

What's the best way to check the tags of the parents of a headline from
withing org-map-entries?

On Thu, Aug 6, 2015 at 9:52 AM, John Kitchin <jkitc...@andrew.cmu.edu>
wrote:

> This gets you pretty close to what you want. I changed some grades to
> make it easier to see it is doing the right thing.
>
> #+BEGIN_SRC emacs-lisp
> (setq assignments '())
> (setq students '())
>
> ;; get assignments
> (org-map-entries
>  (lambda ()
>    (when (= 1 (nth 0 (org-heading-components)))
>      (add-to-list 'assignments (nth 4 (org-heading-components)) t))))
>
> ;; get student names as list of cons cells
> (org-map-entries
>  (lambda ()
>    (when (= 2 (nth 0 (org-heading-components)))
>      (add-to-list 'students (cons  (nth 4 (org-heading-components)) '())
> t))))
>
>
> ;;loop over entries
> (dolist (assignment assignments)
>   (save-excursion
>     ;; jump to assignment
>     (org-open-link-from-string (format "[[*%s]]" assignment))
>     ;; map over entries
>     (org-map-entries
>      (lambda ()
>        (let* ((student (car (assoc (nth 4 (org-heading-components))
> students))))
>          (when student
>            (setf (cdr (assoc student students))
>                  (append (cdr (assoc student students))
>                          (list (org-entry-get (point) "GRADE")))))))
>      nil 'tree)))
>
> (setq gradebook
>       (append (list  (append '("Student") assignments)
>                      'hline)
>               students))
>
> (orgtbl-to-csv gradebook nil)
> #+END_SRC
>
> #+RESULTS:
> : Student,Definition,Darwin
> : Student One,10,40
> : Student Two,20,50
> : Student Three,30,60
>
>
>
> Matt Price writes:
>
> > Hello eveyrone!
> >
> > I know the big guns are all working on last-minute 8.3 bugs (thank you!).
> >
> > I am hoping to get some guidance before heading off on vacation.  I have
> > switched over to doing all grading for my courses in org.  My workflow:
> >
> > - export a csv file containing student names.
> > - generate grading templates for each student, for each assignment
> > - email comments back to students
> > - enter marks in an official spreadsheet which can be used for final
> grade
> > submission
> >
> > A sample  "Comments.org" is at the bottom of this email (it was a little
> > long).
> >
> > So, here are my questions:
> >
> > - I currently store my grades as properties of level-2 headlines.
> However,
> > I would really like to be able to see the grades when the headline is
> > folded, so I can have a quick visual sense of how many papers I've
> marked,
> > how well the students are doing, and so forth.  THe best would be to be
> > able to see the actual marks in the headlines; but if I could, say,
> adjust
> > the color of the healdine based on the property value, that would be cool
> > too.
> >
> > - It seems silly to record the grades once in org, and then again in a
> > libreoffice spreadsheet.  Better would be to generate a table and/or csv
> > spreadsheet directly from the headlines and property values.  So, the
> > example below would give the table:
> > | Student       | Definition | Darwin |
> > | Student One   |          0 |      0 |
> > | Student Two   |          0 |      0 |
> > | Student Three |          0 | 0      |
> >
> > and from there I guess I could generate a CSV just with org-table-export.
> >
> > Had anyone done either of these tasks before? Any guidance on how to do
> > it?
> >
> > Thanks as always,
> > Matt
> >
> > ------------------------------------------
> > * Definition
> > ** TODO Student One
> > :PROPERTIES:
> > :GRADE:    0
> > :MAIL_TO:  student....@utoronto.edu
> > :MAIL_CC:  matt.pr...@utoronto.ca
> > :MAIL_REPLY: matt.pr...@utoronto.ca
> > :MAIL_SUBJECT: Comments on Definition Assignment (Student One)
> > :END:
> > - Organization ::
> > - Clarity of Thesis ::
> > - Presentation of Evidence ::
> > - Grammar and Spelling ::
> > - Style ::
> > - Citations ::
> > - Further Comments ::
> > - Grade ::
> > ** TODO Student Two
> > :PROPERTIES:
> > :GRADE:    0
> > :MAIL_TO:  student....@utoronto.edu
> > :MAIL_CC:  matt.pr...@utoronto.ca
> > :MAIL_REPLY: matt.pr...@utoronto.ca
> > :MAIL_SUBJECT: Comments on Definition Assignment (Student Two)
> > :END:
> > - Organization ::
> > - Clarity of Thesis ::
> > - Presentation of Evidence ::
> > - Grammar and Spelling ::
> > - Style ::
> > - Citations ::
> > - Further Comments ::
> > - Grade ::
> > ** TODO Student Three
> > :PROPERTIES:
> > :GRADE:    0
> > :MAIL_TO:  student.th...@utoronto.edu
> > :MAIL_CC:  matt.pr...@utoronto.ca
> > :MAIL_REPLY: matt.pr...@utoronto.ca
> > :MAIL_SUBJECT: Comments on Definition Assignment (Student Three)
> > :END:
> > - Organization ::
> > - Clarity of Thesis ::
> > - Presentation of Evidence ::
> > - Grammar and Spelling ::
> > - Style ::
> > - Citations ::
> > - Further Comments ::
> > - Grade ::
> >
> >
> > * Darwin
> > ** TODO Student One
> > :PROPERTIES:
> > :GRADE:    0
> > :MAIL_TO:  student....@utoronto.edu
> > :MAIL_CC:  matt.pr...@utoronto.ca
> > :MAIL_REPLY: matt.pr...@utoronto.ca
> > :MAIL_SUBJECT: Comments on Darwin Assignment (Student One)
> > :END:
> > - Organization ::
> > - Clarity of Thesis ::
> > - Presentation of Evidence ::
> > - Grammar and Spelling ::
> > - Style ::
> > - Citations ::
> > - Further Comments ::
> > - Grade ::
> > ** TODO Student Two
> > :PROPERTIES:
> > :GRADE:    0
> > :MAIL_TO:  student....@utoronto.edu
> > :MAIL_CC:  matt.pr...@utoronto.ca
> > :MAIL_REPLY: matt.pr...@utoronto.ca
> > :MAIL_SUBJECT: Comments on Darwin Assignment (Student Two)
> > :END:
> > - Organization ::
> > - Clarity of Thesis ::
> > - Presentation of Evidence ::
> > - Grammar and Spelling ::
> > - Style ::
> > - Citations ::
> > - Further Comments ::
> > - Grade ::
> > ** TODO Student Three
> > :PROPERTIES:
> > :GRADE:    0
> > :MAIL_TO:  student.th...@utoronto.edu
> > :MAIL_CC:  matt.pr...@utoronto.ca
> > :MAIL_REPLY: matt.pr...@utoronto.ca
> > :MAIL_SUBJECT: Comments on Darwin Assignment (Student Three)
> > :END:
> > - Organization ::
> > - Clarity of Thesis ::
> > - Presentation of Evidence ::
> > - Grammar and Spelling ::
> > - Style ::
> > - Citations ::
> > - Further Comments ::
> > - Grade ::
> > ---------------------------------------------
> >
> > I have three remaining issues
>
> --
> 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
>

Reply via email to