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 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.one@utoronto.edu > > :MAIL_CC: matt.price@utoronto.ca > > :MAIL_REPLY: matt.price@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.two@utoronto.edu > > :MAIL_CC: matt.price@utoronto.ca > > :MAIL_REPLY: matt.price@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.three@utoronto.edu > > :MAIL_CC: matt.price@utoronto.ca > > :MAIL_REPLY: matt.price@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.one@utoronto.edu > > :MAIL_CC: matt.price@utoronto.ca > > :MAIL_REPLY: matt.price@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.two@utoronto.edu > > :MAIL_CC: matt.price@utoronto.ca > > :MAIL_REPLY: matt.price@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.three@utoronto.edu > > :MAIL_CC: matt.price@utoronto.ca > > :MAIL_REPLY: matt.price@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 >