From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Kitchin Subject: Re: Showing Property in headline; generating table from properties; exporting table to CSV Date: Thu, 06 Aug 2015 14:14:30 -0400 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:43063) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZNPgj-0005NZ-28 for emacs-orgmode@gnu.org; Thu, 06 Aug 2015 14:14:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZNPga-0000xy-1S for emacs-orgmode@gnu.org; Thu, 06 Aug 2015 14:14:41 -0400 Received: from mail-qg0-x22a.google.com ([2607:f8b0:400d:c04::22a]:33228) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZNPgZ-0000xn-R6 for emacs-orgmode@gnu.org; Thu, 06 Aug 2015 14:14:35 -0400 Received: by qged69 with SMTP id d69so58785971qge.0 for ; Thu, 06 Aug 2015 11:14:35 -0700 (PDT) In-reply-to: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Matt Price Cc: Org Mode Matt Price writes: > 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. > You can limit the scope of org-map-entries to headlines that are tagged or that have properties like this: ;; get assignments (let ((org-use-tag-inheritance nil)) (org-map-entries (lambda () (add-to-list 'assignments (nth 4 (org-heading-components)) t)) "assignment")) ;; get student names as list of cons cells (let ((org-use-property-inheritance nil)) (org-map-entries (lambda () (add-to-list 'students (cons (nth 4 (org-heading-components)) '()) t)) "MAIL_TO={edu}")) here you rely on a headline being tagged an assignment, and a student having a MAIL_TO property that has edu in it, and the level of each headline is irrelevant now. > 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 >> -- 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