emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Showing Property in headline; generating table from properties;


From: John Kitchin
Subject: Re: [O] Showing Property in headline; generating table from properties; exporting table to CSV
Date: Thu, 06 Aug 2015 14:14:30 -0400

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 <address@hidden>
> 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:  address@hidden
>> > :MAIL_CC:  address@hidden
>> > :MAIL_REPLY: address@hidden
>> > :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:  address@hidden
>> > :MAIL_CC:  address@hidden
>> > :MAIL_REPLY: address@hidden
>> > :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:  address@hidden
>> > :MAIL_CC:  address@hidden
>> > :MAIL_REPLY: address@hidden
>> > :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:  address@hidden
>> > :MAIL_CC:  address@hidden
>> > :MAIL_REPLY: address@hidden
>> > :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:  address@hidden
>> > :MAIL_CC:  address@hidden
>> > :MAIL_REPLY: address@hidden
>> > :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:  address@hidden
>> > :MAIL_CC:  address@hidden
>> > :MAIL_REPLY: address@hidden
>> > :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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]