<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     >
  <channel>
    <atom:link href="http://kitchingroup.cheme.cmu.edu/blog/feed/index.xml" rel="self" type="application/rss+xml" />
    <title>The Kitchin Research Group</title>
    <link>https://kitchingroup.cheme.cmu.edu/blog</link>
    <description>Chemical Engineering at Carnegie Mellon University</description>
    <pubDate>Sat, 01 Nov 2025 13:47:46 GMT</pubDate>
    <generator>Blogofile</generator>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    
    <item>
      <title>Commenting in org-files</title>
      <link>https://kitchingroup.cheme.cmu.edu/blog/2015/04/24/Commenting-in-org-files</link>
      <pubDate>Fri, 24 Apr 2015 12:41:39 EDT</pubDate>
      <category><![CDATA[org]]></category>
      <guid isPermaLink="false">xenWQ6jV9IfhXC3QhHsyZY1hm_I=</guid>
      <description>Commenting in org-files</description>
      <content:encoded><![CDATA[


&lt;p&gt;
There was an interesting discussion on the org-mode mail list about putting comments in org files. Eric Fraga suggested using inline tasks, and customizing the export of them so they make a footnote, or use the todonotes package (suggested by Marcin Borkowski). Here is Eric's export. A big advantage of this is integration with the Agenda, so you can see what there is todo in your document.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;  (&lt;span style="color: #0000FF;"&gt;setq&lt;/span&gt; org-inlinetask-export-templates
        '((latex &lt;span style="color: #008000;"&gt;"%s\\footnote{%s\\\\ %s}\\marginpar{\\fbox{\\thefootnote}}"&lt;/span&gt;
                 '((&lt;span style="color: #0000FF;"&gt;unless&lt;/span&gt;
                       (eq todo &lt;span style="color: #008000;"&gt;""&lt;/span&gt;)
                     (format &lt;span style="color: #008000;"&gt;"\\fbox{\\textsc{%s%s}}"&lt;/span&gt; todo priority))
                   heading content))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Eric Abrahamsen suggested an idea to use a link syntax. I like the idea a lot, so here we develop some ideas. A link has two parts, the path, and description. A simple comment would just be a simple link, probably in double square brackets so you can have spaces in your comment. &lt;font color="red"&gt;&lt;abbr title="Why do you think there are only two parts" color="red"&gt;COMMENT&lt;/abbr&gt;&lt;/font&gt;  It might be feasible to use &lt;font color="red"&gt;&lt;abbr title="Why do you quote mark?" color="red"&gt;COMMENT&lt;/abbr&gt;&lt;/font&gt; the description to "mark text" that the comment refers to. The remaining question is what functionality should our link have when you click on it, and how to export it. For functionality, a click will show the comment in the minibuffer and offer to delete it. For export, for now we will make it export with todonotes in LaTeX, and as a red COMMENT with a tooltip in html. To use this, you need to have the LaTeX package todonotes included in your org file.
&lt;/p&gt;
&lt;p&gt;
Here is our comment link.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(org-add-link-type
 &lt;span style="color: #008000;"&gt;"comment"&lt;/span&gt;
 (&lt;span style="color: #0000FF;"&gt;lambda&lt;/span&gt; (linkstring)
   (&lt;span style="color: #0000FF;"&gt;let&lt;/span&gt; ((elm (org-element-context))
         (use-dialog-box nil))
     (&lt;span style="color: #0000FF;"&gt;when&lt;/span&gt; (y-or-n-p &lt;span style="color: #008000;"&gt;"Delete comment? "&lt;/span&gt;)
       (&lt;span style="color: #0000FF;"&gt;setf&lt;/span&gt; (buffer-substring
              (org-element-property &lt;span style="color: #006FE0;"&gt;:begin&lt;/span&gt; elm)
              (org-element-property &lt;span style="color: #006FE0;"&gt;:end&lt;/span&gt; elm))
             (&lt;span style="color: #0000FF;"&gt;cond&lt;/span&gt;
              ((org-element-property &lt;span style="color: #006FE0;"&gt;:contents-begin&lt;/span&gt; elm)
               (buffer-substring
                (org-element-property &lt;span style="color: #006FE0;"&gt;:contents-begin&lt;/span&gt; elm)
                (org-element-property &lt;span style="color: #006FE0;"&gt;:contents-end&lt;/span&gt; elm)))
              (t
               &lt;span style="color: #008000;"&gt;""&lt;/span&gt;))))))
 (&lt;span style="color: #0000FF;"&gt;lambda&lt;/span&gt; (keyword desc format)
   (&lt;span style="color: #0000FF;"&gt;cond&lt;/span&gt;
    ((eq format 'html)
     (format &lt;span style="color: #008000;"&gt;"&amp;lt;font color=\"red\"&amp;gt;&amp;lt;abbr title=\"%s\" color=\"red\"&amp;gt;COMMENT&amp;lt;/abbr&amp;gt;&amp;lt;/font&amp;gt; %s"&lt;/span&gt; keyword (&lt;span style="color: #0000FF;"&gt;or&lt;/span&gt; desc &lt;span style="color: #008000;"&gt;""&lt;/span&gt;)))
    ((eq format 'latex)
     (format &lt;span style="color: #008000;"&gt;"\\todo{%s}{%s}"&lt;/span&gt; keyword (&lt;span style="color: #0000FF;"&gt;or&lt;/span&gt; desc &lt;span style="color: #008000;"&gt;""&lt;/span&gt;))))))
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
It would be convenient to have a quick function for adding a comment to some highlighted text.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(&lt;span style="color: #0000FF;"&gt;defun&lt;/span&gt; &lt;span style="color: #006699;"&gt;add-comment&lt;/span&gt; (begin end)
  (&lt;span style="color: #0000FF;"&gt;interactive&lt;/span&gt; &lt;span style="color: #008000;"&gt;"r"&lt;/span&gt;)
  (&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt; (region-active-p)
      (&lt;span style="color: #0000FF;"&gt;let&lt;/span&gt; ((selected-text (buffer-substring begin end)))
        (&lt;span style="color: #0000FF;"&gt;setf&lt;/span&gt; (buffer-substring begin end)
              (format &lt;span style="color: #008000;"&gt;"[[comment:%s][%s]]"&lt;/span&gt;
                      (read-input &lt;span style="color: #008000;"&gt;"Comment: "&lt;/span&gt;) selected-text)))
  (insert (format  &lt;span style="color: #008000;"&gt;"[[comment:%s]]"&lt;/span&gt; (read-input &lt;span style="color: #008000;"&gt;"Comment: "&lt;/span&gt;)))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Test 1: &lt;font color="red"&gt;&lt;abbr title="test comment" color="red"&gt;COMMENT&lt;/abbr&gt;&lt;/font&gt; 
&lt;/p&gt;

&lt;p&gt;
&lt;font color="red"&gt;&lt;abbr title="You seem to have forgotten Test 2" color="red"&gt;COMMENT&lt;/abbr&gt;&lt;/font&gt; Test 2
&lt;/p&gt;

&lt;p&gt;
That is it. I could see a few other enhancements that might be very useful, e.g. a command to list all the comments, remove all the comments, etc&amp;#x2026; I am pretty satisfied with this for now though.
&lt;/p&gt;

&lt;div id="outline-container-sec-1" class="outline-2"&gt;
&lt;h2 id="sec-1"&gt;&lt;span class="section-number-2"&gt;1&lt;/span&gt; An updated approach to comments.&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-1"&gt;
&lt;p&gt;
Rainer asked about making some comments inline. It would be nice if a single link syntax could accommodate both styles of comments. I previously developed an approach to extend links with attributes (&lt;a href="http://kitchingroup.cheme.cmu.edu/blog/2015/02/05/Extending-the-org-mode-link-syntax-with-attributes/"&gt;http://kitchingroup.cheme.cmu.edu/blog/2015/02/05/Extending-the-org-mode-link-syntax-with-attributes/&lt;/a&gt; ), which I will reuse here for that purpose. The idea is to add an ":inline" attribute to change the export behavior. We only modify the LaTeX export here.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(org-add-link-type
 &lt;span style="color: #008000;"&gt;"comment"&lt;/span&gt;
 &lt;span style="color: #8D8D84;"&gt;;;  &lt;/span&gt;&lt;span style="color: #8D8D84; font-style: italic;"&gt;follow function&lt;/span&gt;
(&lt;span style="color: #0000FF;"&gt;lambda&lt;/span&gt; (linkstring)
   (&lt;span style="color: #0000FF;"&gt;let&lt;/span&gt; ((elm (org-element-context))
         (use-dialog-box nil))
     (&lt;span style="color: #0000FF;"&gt;when&lt;/span&gt; (y-or-n-p &lt;span style="color: #008000;"&gt;"Delete comment? "&lt;/span&gt;)
       (&lt;span style="color: #0000FF;"&gt;setf&lt;/span&gt; (buffer-substring
              (org-element-property &lt;span style="color: #006FE0;"&gt;:begin&lt;/span&gt; elm)
              (org-element-property &lt;span style="color: #006FE0;"&gt;:end&lt;/span&gt; elm))
             (&lt;span style="color: #0000FF;"&gt;cond&lt;/span&gt;
              ((org-element-property &lt;span style="color: #006FE0;"&gt;:contents-begin&lt;/span&gt; elm)
               (buffer-substring
                (org-element-property &lt;span style="color: #006FE0;"&gt;:contents-begin&lt;/span&gt; elm)
                (org-element-property &lt;span style="color: #006FE0;"&gt;:contents-end&lt;/span&gt; elm)))
              (t
               &lt;span style="color: #008000;"&gt;""&lt;/span&gt;))))))
 &lt;span style="color: #8D8D84;"&gt;;; &lt;/span&gt;&lt;span style="color: #8D8D84; font-style: italic;"&gt;format function&lt;/span&gt;
 (&lt;span style="color: #0000FF;"&gt;lambda&lt;/span&gt; (path description format)
   (&lt;span style="color: #0000FF;"&gt;let*&lt;/span&gt; ((data (read (concat &lt;span style="color: #008000;"&gt;"("&lt;/span&gt; path &lt;span style="color: #008000;"&gt;")"&lt;/span&gt;)))
          (head (car data))
          (plist (cdr data)))
     (&lt;span style="color: #0000FF;"&gt;cond&lt;/span&gt;
      ((eq format 'html)
       (format &lt;span style="color: #008000;"&gt;"&amp;lt;font color=\"red\"&amp;gt;&amp;lt;abbr title=\"%s\" color=\"red\"&amp;gt;COMMENT&amp;lt;/abbr&amp;gt;&amp;lt;/font&amp;gt; %s"&lt;/span&gt; path (&lt;span style="color: #0000FF;"&gt;or&lt;/span&gt; description &lt;span style="color: #008000;"&gt;""&lt;/span&gt;)))
      ((eq format 'latex)
       (format &lt;span style="color: #008000;"&gt;"\\todo%s{%s}%s"&lt;/span&gt;
               (&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt; (-contains? data &lt;span style="color: #006FE0;"&gt;:inline&lt;/span&gt;) &lt;span style="color: #008000;"&gt;"[inline]"&lt;/span&gt; &lt;span style="color: #008000;"&gt;""&lt;/span&gt;)
               (mapconcat (&lt;span style="color: #0000FF;"&gt;lambda&lt;/span&gt; (s)
                            (format &lt;span style="color: #008000;"&gt;"%s"&lt;/span&gt; s))
                          (-remove-item &lt;span style="color: #006FE0;"&gt;:inline&lt;/span&gt; data) &lt;span style="color: #008000;"&gt;" "&lt;/span&gt;)
               (&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt; description (format &lt;span style="color: #008000;"&gt;"{%s}"&lt;/span&gt; description) &lt;span style="color: #008000;"&gt;""&lt;/span&gt;)))))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Here are some examples of the syntax:
&lt;/p&gt;
&lt;pre class="example"&gt;
[[comment: :inline the rest of your text]]

[[comment:Some text you want to highlight]]

[[comment:Some text you want to highlight :inline]]
&lt;/pre&gt;

&lt;p&gt;
It doesn't matter where the :inline attribute is added. This seems to work pretty well.
&lt;/p&gt;

&lt;p&gt;
We can modify our convenience function to allow us to use a prefix arg to make the comment inline. Here is one way to do it.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(&lt;span style="color: #0000FF;"&gt;defun&lt;/span&gt; &lt;span style="color: #006699;"&gt;add-comment&lt;/span&gt; (begin end &lt;span style="color: #6434A3;"&gt;&amp;amp;optional&lt;/span&gt; arg)
  &lt;span style="color: #036A07;"&gt;"Comment the region. With a prefix ARG, make the comment inline."&lt;/span&gt;
  (&lt;span style="color: #0000FF;"&gt;interactive&lt;/span&gt; (list (region-beginning)
                     (region-end)
                     current-prefix-arg))
  (&lt;span style="color: #0000FF;"&gt;let&lt;/span&gt; ((&lt;span style="color: #0000FF;"&gt;inline&lt;/span&gt; (&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt; arg &lt;span style="color: #008000;"&gt;":inline "&lt;/span&gt; &lt;span style="color: #008000;"&gt;""&lt;/span&gt;)))
        (&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt; (region-active-p)
            (&lt;span style="color: #0000FF;"&gt;let&lt;/span&gt; ((selected-text (buffer-substring begin end)))
              (&lt;span style="color: #0000FF;"&gt;setf&lt;/span&gt; (buffer-substring begin end)
                    (format
                     &lt;span style="color: #008000;"&gt;"[[comment:%s%s][%s]]"&lt;/span&gt;
                     inline
                     (read-input &lt;span style="color: #008000;"&gt;"Comment: "&lt;/span&gt;) selected-text)))
          (insert (format
                   &lt;span style="color: #008000;"&gt;"[[comment:%s%s]]"&lt;/span&gt;
                   inline
                   (read-input &lt;span style="color: #008000;"&gt;"Comment: "&lt;/span&gt;))))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class="example"&gt;
add-comment
&lt;/pre&gt;

&lt;p&gt;
Test &lt;font color="red"&gt;&lt;abbr title="a new regular comment" color="red"&gt;COMMENT&lt;/abbr&gt;&lt;/font&gt; text to  &lt;font color="red"&gt;&lt;abbr title=":inline an inline comment" color="red"&gt;COMMENT&lt;/abbr&gt;&lt;/font&gt; comment on.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Copyright (C) 2015 by John Kitchin. See the &lt;a href="/copying.html"&gt;License&lt;/a&gt; for information about copying.&lt;p&gt;&lt;p&gt;&lt;a href="/org/2015/04/24/Commenting-in-org-files.org"&gt;org-mode source&lt;/a&gt;&lt;p&gt;&lt;p&gt;Org-mode version = 8.2.10&lt;/p&gt;]]></content:encoded>
    </item>
    <item>
      <title>Machine-gradable quizzes in emacs+org-modex</title>
      <link>https://kitchingroup.cheme.cmu.edu/blog/2014/11/23/Machine-gradable-quizzes-in-emacs+org-modex</link>
      <pubDate>Sun, 23 Nov 2014 16:49:52 EST</pubDate>
      <category><![CDATA[education]]></category>
      <category><![CDATA[emacs]]></category>
      <category><![CDATA[org]]></category>
      <guid isPermaLink="false">5xUSRYZKuVN9t_z_ZDnRsVaBgsM=</guid>
      <description>Machine-gradable quizzes in emacs+org-modex</description>
      <content:encoded><![CDATA[



&lt;p&gt;
In a previous &lt;a href="http://kitchingroup.cheme.cmu.edu/blog/2014/01/01/Interactive-quizzes-with-feedback-in-org-mode/"&gt;post&lt;/a&gt; , we considered interactive quizzes in emacs and org-mode. Here we consider a variation of that idea with the aim of creating a machine-gradable quiz, i.e. a modern version of a scantron.
&lt;/p&gt;

&lt;p&gt;
The idea is simple, we will let each question be represented by an org headline, and the choices will be clickable links that store the answer as a property in the headline. Each headline will have a unique id. The grading key will contain these ids and the correct answer, and a function will determine if the right answer was selected for each question.
&lt;/p&gt;

&lt;p&gt;
Here is a simple link that will store the value of the link as a property. Note that the path must be at least two characters long to be recognized as a link, unless you wrap the link in double brackets. We will have the link insert a comment to indicate to the user what they chose. We do that because the PROPERTIES drawer is usually hidden, and it is not obvious it was changed.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(org-add-link-type 
 &lt;span style="color: #228b22;"&gt;"mc"&lt;/span&gt; 
 (&lt;span style="color: #8b0000;"&gt;lambda&lt;/span&gt; (link)
   (&lt;span style="color: #8b0000;"&gt;save-restriction&lt;/span&gt;
     (org-narrow-to-subtree)
     (goto-char (point-max))
     (insert (concat
              (&lt;span style="color: #8b0000;"&gt;unless&lt;/span&gt; (bolp) &lt;span style="color: #228b22;"&gt;"\n"&lt;/span&gt;)
              (format &lt;span style="color: #228b22;"&gt;"# you chose %s"&lt;/span&gt; link))))
       
   (org-entry-put (point) &lt;span style="color: #228b22;"&gt;"ANSWER"&lt;/span&gt; link)))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Next, we add a subheading with some questions to test the link.
&lt;/p&gt;
&lt;div id="outline-container-sec-1" class="outline-2"&gt;
&lt;h2 id="sec-1"&gt;&lt;span class="section-number-2"&gt;1&lt;/span&gt; Some questions&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-1"&gt;
&lt;/div&gt;&lt;div id="outline-container-sec-1-1" class="outline-3"&gt;
&lt;h3 id="sec-1-1"&gt;&lt;a id="ID-19C7BA30-A761-4C94-9F3B-E6010E263949" name="ID-19C7BA30-A761-4C94-9F3B-E6010E263949"&gt;&lt;/a&gt;&lt;span class="section-number-3"&gt;1.1&lt;/span&gt; question 1&lt;/h3&gt;
&lt;div class="outline-text-3" id="text-1-1"&gt;
&lt;p&gt;
What is 2 + 2?
&lt;/p&gt;

&lt;p&gt;
&lt;a href="a"&gt;a&lt;/a&gt; 1
&lt;/p&gt;

&lt;p&gt;
&lt;a href="b"&gt;b&lt;/a&gt; 2
&lt;/p&gt;

&lt;p&gt;
&lt;a href="c"&gt;c&lt;/a&gt; 4
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-sec-1-2" class="outline-3"&gt;
&lt;h3 id="sec-1-2"&gt;&lt;a id="ID-38FCCF3D-7FC5-49BF-BB77-486BBAA17CD9" name="ID-38FCCF3D-7FC5-49BF-BB77-486BBAA17CD9"&gt;&lt;/a&gt;&lt;span class="section-number-3"&gt;1.2&lt;/span&gt; question 2&lt;/h3&gt;
&lt;div class="outline-text-3" id="text-1-2"&gt;
&lt;p&gt;
What is 2 - 2?
&lt;/p&gt;

&lt;p&gt;
&lt;a href="a"&gt;a&lt;/a&gt; 0
&lt;/p&gt;

&lt;p&gt;
&lt;a href="b"&gt;b&lt;/a&gt; 2
&lt;/p&gt;

&lt;p&gt;
&lt;a href="c"&gt;c&lt;/a&gt; 4
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-sec-2" class="outline-2"&gt;
&lt;h2 id="sec-2"&gt;&lt;span class="section-number-2"&gt;2&lt;/span&gt; Grading&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-2"&gt;
&lt;p&gt;
We will store an alist of id and answer for each problem. To grade, we simple map over the alist, go to the section with the id, and compare the answers. When the answer is correct, we save a point, and when not, no point. We can use the org-mode machinery to jump to the problems and get the stored answer. We put some feedback at the end of the file to see what was right, and what was wrong.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(&lt;span style="color: #8b0000;"&gt;let*&lt;/span&gt; ((key '((&lt;span style="color: #228b22;"&gt;"19C7BA30-A761-4C94-9F3B-E6010E263949"&lt;/span&gt; . &lt;span style="color: #228b22;"&gt;"c"&lt;/span&gt;)
              (&lt;span style="color: #228b22;"&gt;"38FCCF3D-7FC5-49BF-BB77-486BBAA17CD9"&lt;/span&gt; . &lt;span style="color: #228b22;"&gt;"a"&lt;/span&gt;)))
       (MAX (length key))
       (points 0)
       (answer))
  
  (&lt;span style="color: #8b0000;"&gt;dolist&lt;/span&gt; (tup key)
    (&lt;span style="color: #8b0000;"&gt;save-excursion&lt;/span&gt;
      (org-open-link-from-string
       (format &lt;span style="color: #228b22;"&gt;"id:%s"&lt;/span&gt; (car tup)))
      (setq answer (org-entry-get (point) &lt;span style="color: #228b22;"&gt;"ANSWER"&lt;/span&gt;))
      (&lt;span style="color: #8b0000;"&gt;if&lt;/span&gt; (string= answer (cdr tup))
          (&lt;span style="color: #8b0000;"&gt;progn&lt;/span&gt;
            (setq points (+ 1 points))
            (goto-char (point-max))
            (insert (format &lt;span style="color: #228b22;"&gt;"# id:%s: %s correct\n"&lt;/span&gt; (car tup) answer)))
        (goto-char (point-max))
        (insert (format &lt;span style="color: #228b22;"&gt;"# id:%s: %s wrong (%s is correct)\n"&lt;/span&gt;
                        (car tup)
                        answer
                        (cdr tup))))))
  (goto-char (point-max))
  (insert (format
           &lt;span style="color: #228b22;"&gt;"#+GRADE: %s"&lt;/span&gt; (/ (float points) (float MAX)))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
That works pretty well. I need to think about how to codify the key, since this would usually be stored in some file. We would also need to wrap the code block in a function that we could call easily. The org-id key is easy, but not very readable. It would make it easy to keep a database of these problems though. 
&lt;/p&gt;
&lt;p&gt;
Just for completeness, I want to save the key to a file, and use it. We simply write the alist in a file. Here are the contents, which are tangled to key.el. One alternative might be to have a solution copy of the quiz which has the answers in it, and we read the answers from the file.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;((&lt;span style="color: #228b22;"&gt;"19C7BA30-A761-4C94-9F3B-E6010E263949"&lt;/span&gt; . &lt;span style="color: #228b22;"&gt;"c"&lt;/span&gt;)
 (&lt;span style="color: #228b22;"&gt;"38FCCF3D-7FC5-49BF-BB77-486BBAA17CD9"&lt;/span&gt; . &lt;span style="color: #228b22;"&gt;"a"&lt;/span&gt;))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Now, we read it in like this. The rest of the code is basically the same.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(&lt;span style="color: #8b0000;"&gt;let*&lt;/span&gt; ((key (&lt;span style="color: #8b0000;"&gt;with-temp-buffer&lt;/span&gt; 
              (insert-file-contents &lt;span style="color: #228b22;"&gt;"key.el"&lt;/span&gt;)
              (read (current-buffer))))
       (MAX (length key))
       (points 0)
       (answer))
  
  (&lt;span style="color: #8b0000;"&gt;dolist&lt;/span&gt; (tup key)
    (&lt;span style="color: #8b0000;"&gt;save-excursion&lt;/span&gt;
      (org-open-link-from-string
       (format &lt;span style="color: #228b22;"&gt;"id:%s"&lt;/span&gt; (car tup)))
      (setq answer (org-entry-get (point) &lt;span style="color: #228b22;"&gt;"ANSWER"&lt;/span&gt;))
      (&lt;span style="color: #8b0000;"&gt;if&lt;/span&gt; (string= answer (cdr tup))
          (&lt;span style="color: #8b0000;"&gt;progn&lt;/span&gt;
            (setq points (+ 1 points))
            (goto-char (point-max))
            (insert (format &lt;span style="color: #228b22;"&gt;"# id:%s: %s correct\n"&lt;/span&gt; (car tup) answer)))
        (goto-char (point-max))
        (insert (format &lt;span style="color: #228b22;"&gt;"# id:%s: %s wrong (%s is correct)\n"&lt;/span&gt;
                        (car tup)
                        answer
                        (cdr tup))))))
  (goto-char (point-max))
  (insert (format
           &lt;span style="color: #228b22;"&gt;"#+GRADE: %s"&lt;/span&gt; (/ (float points) (float MAX)))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
It is probably much easier to have a solution version of the quiz, and generate the key from it. For example, we can collect the ID and ANSWER from the problems in this file like this.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(&lt;span style="color: #8b0000;"&gt;let&lt;/span&gt; ((key '()))
  (org-map-entries
   (&lt;span style="color: #8b0000;"&gt;lambda&lt;/span&gt; ()
     (&lt;span style="color: #8b0000;"&gt;let&lt;/span&gt; ((id) (ans))
       (&lt;span style="color: #8b0000;"&gt;when&lt;/span&gt; (and
              (setq id (org-entry-get (point) &lt;span style="color: #228b22;"&gt;"ID"&lt;/span&gt;))
              (setq ans (org-entry-get (point) &lt;span style="color: #228b22;"&gt;"ANSWER"&lt;/span&gt;)))
         (add-to-list 'key (cons id ans))))))
key)
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;((&lt;span style="color: #228b22;"&gt;"38FCCF3D-7FC5-49BF-BB77-486BBAA17CD9"&lt;/span&gt; . &lt;span style="color: #228b22;"&gt;"a"&lt;/span&gt;)
 (&lt;span style="color: #228b22;"&gt;"19C7BA30-A761-4C94-9F3B-E6010E263949"&lt;/span&gt; . &lt;span style="color: #228b22;"&gt;"c"&lt;/span&gt;))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
So, if we had a master solution file, we could read the key from there. That is the way to do this.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Copyright (C) 2014 by John Kitchin. See the &lt;a href="/copying.html"&gt;License&lt;/a&gt; for information about copying.&lt;p&gt;&lt;p&gt;&lt;a href="/org/2014/11/23/Machine-gradable-quizzes-in-emacs+org-modex.org"&gt;org-mode source&lt;/a&gt;&lt;p&gt;&lt;p&gt;Org-mode version = 8.2.7c&lt;/p&gt;]]></content:encoded>
    </item>
    <item>
      <title>A hint system for problems in org-mode</title>
      <link>https://kitchingroup.cheme.cmu.edu/blog/2014/11/09/A-hint-system-for-problems-in-org-mode</link>
      <pubDate>Sun, 09 Nov 2014 09:55:17 EST</pubDate>
      <category><![CDATA[org]]></category>
      <guid isPermaLink="false">ZGFvwKEGoKtMNrMQ_FtYYfuCkJM=</guid>
      <description>A hint system for problems in org-mode</description>
      <content:encoded><![CDATA[


&lt;p&gt;
I use org-mode to write problems for classes that I teach. Sometimes it is helpful to be able to provide hints about aspects of the problem. I have used drawers for that before. Here I will look at another approach. The idea is to store a unique id (org-id) in the problem headline. We will make hints somewhere else, and each hint will store the id they refer to in some property. We will run a command in the problem that finds the hints, and offers a menu you can select from.
&lt;/p&gt;

&lt;p&gt;
In the next sections, we define a &lt;a href="#sec-1"&gt;Problem statement&lt;/a&gt;, a section with &lt;a href="#sec-2"&gt;hints&lt;/a&gt; in it, and finally &lt;a href="#sec-3"&gt;code&lt;/a&gt; that defines a hint function.
&lt;/p&gt;

&lt;div id="outline-container-sec-1" class="outline-2"&gt;
&lt;h2 id="sec-1"&gt;&lt;a id="ID-EE9523FF-C4FF-45D9-BABA-8832A6E48C3B" name="ID-EE9523FF-C4FF-45D9-BABA-8832A6E48C3B"&gt;&lt;/a&gt;&lt;span class="section-number-2"&gt;1&lt;/span&gt; Problem statement&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-1"&gt;

&lt;p&gt;
What is the seventh number in the Fibonacci series?
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-sec-2" class="outline-2"&gt;
&lt;h2 id="sec-2"&gt;&lt;span class="section-number-2"&gt;2&lt;/span&gt; Hints&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-2"&gt;
&lt;p&gt;
Hints will be stored in headings somewhere. Here we put them in this file, but they could be stored in another file too. We give each hint a HINT property, with the problem id as the value. Here are three hints. In real example, the hints would not be this easy to find in the document. You might store them somewhere else, in another file for example.
&lt;/p&gt;
&lt;/div&gt;

&lt;div id="outline-container-sec-2-1" class="outline-3"&gt;
&lt;h3 id="sec-2-1"&gt;&lt;span class="section-number-3"&gt;2.1&lt;/span&gt; What is the Fibonacci series?&lt;/h3&gt;
&lt;div class="outline-text-3" id="text-2-1"&gt;
&lt;p&gt;
The $i&lt;sup&gt;th&lt;/sup&gt; number in the Fibonacci series is equal to the sum of the previous two numbers in the series.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id="outline-container-sec-2-2" class="outline-3"&gt;
&lt;h3 id="sec-2-2"&gt;&lt;span class="section-number-3"&gt;2.2&lt;/span&gt; What does the series start with?&lt;/h3&gt;
&lt;div class="outline-text-3" id="text-2-2"&gt;

&lt;p&gt;
The Fibonacci series starts with 1.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-sec-2-3" class="outline-3"&gt;
&lt;h3 id="sec-2-3"&gt;&lt;span class="section-number-3"&gt;2.3&lt;/span&gt; Example of the series.&lt;/h3&gt;
&lt;div class="outline-text-3" id="text-2-3"&gt;
&lt;p&gt;
The Fibonacci series goes as 1, 1, 2, 3, 5, 8, &amp;#x2026;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id="outline-container-sec-3" class="outline-2"&gt;
&lt;h2 id="sec-3"&gt;&lt;span class="section-number-2"&gt;3&lt;/span&gt; The hint code&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-3"&gt;
&lt;p&gt;
We want to get the id from the problem the point is in, and then find hints for the problem. Then, we construct a menu and prompt the user to select a hint. I use a number to select the hint because it was easier to generate the menu that way. I like characters better, because you just have to press a key. With numbers you type the number and press enter. We open a new buffer with the contents of the hint in it. You can close the buffer by pressing q.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(&lt;span style="color: #8b0000;"&gt;defun&lt;/span&gt; &lt;span style="color: #8b2323;"&gt;hint&lt;/span&gt; ()
  &lt;span style="color: #228b22;"&gt;"Present a menu of hints for the problem at point"&lt;/span&gt;
  (interactive)
  (&lt;span style="color: #8b0000;"&gt;let&lt;/span&gt; ((id (org-entry-get (point) &lt;span style="color: #228b22;"&gt;"ID"&lt;/span&gt;))
        (entries '())
        (menu &lt;span style="color: #228b22;"&gt;""&lt;/span&gt;)
        choice)

    (&lt;span style="color: #8b0000;"&gt;unless&lt;/span&gt; id
      (&lt;span style="color: #ff0000; font-weight: bold;"&gt;error&lt;/span&gt; &lt;span style="color: #228b22;"&gt;"No problem ID found"&lt;/span&gt;))

    (org-map-entries
     (&lt;span style="color: #8b0000;"&gt;lambda&lt;/span&gt; ()
       (&lt;span style="color: #8b0000;"&gt;save-restriction&lt;/span&gt;
         (org-narrow-to-subtree)
         (add-to-list 'entries
                      (cons
                       (elt (org-heading-components) 4)
                       (buffer-string))
                      t)))
     (format &lt;span style="color: #228b22;"&gt;"HINT=\"%s\""&lt;/span&gt; id))

    ;; &lt;span style="color: #ff0000; font-weight: bold;"&gt;generate menu string&lt;/span&gt;
    (&lt;span style="color: #8b0000;"&gt;dolist&lt;/span&gt; (i (number-sequence 1 (length entries)))
      (setq menu (concat menu (format &lt;span style="color: #228b22;"&gt;"[%s] %s\n"&lt;/span&gt; (- i 1)
                                      (car (elt entries (- i 1)))))))

    (setq choice (elt entries (read-number (concat menu &lt;span style="color: #228b22;"&gt;"Your choice: "&lt;/span&gt;) 0)))
    ;; &lt;span style="color: #ff0000; font-weight: bold;"&gt;this feels a little clunky. Maybe I could just save a marker to&lt;/span&gt;
    ;; &lt;span style="color: #ff0000; font-weight: bold;"&gt;the headline, and open it in a narrowed indirect buffer.&lt;/span&gt;
    (&lt;span style="color: #8b0000;"&gt;when&lt;/span&gt; choice
      (switch-to-buffer &lt;span style="color: #228b22;"&gt;"*hint*"&lt;/span&gt;)
      (erase-buffer)
      (insert (cdr choice))
      
      (org-mode)
      (show-subtree)
      (setq buffer-read-only t)
      (use-local-map (copy-keymap org-mode-map))
      (local-set-key &lt;span style="color: #228b22;"&gt;"q"&lt;/span&gt; #'(&lt;span style="color: #8b0000;"&gt;lambda&lt;/span&gt; () (interactive) (kill-buffer)))
      )))
&lt;/pre&gt;
&lt;/div&gt;
&lt;pre class="example"&gt;
hint
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-sec-4" class="outline-2"&gt;
&lt;h2 id="sec-4"&gt;&lt;span class="section-number-2"&gt;4&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-4"&gt;
&lt;p&gt;
This seems like an interesting way to provide hints, or related information in org-mode.  You could also consider using tags, or more sophisticated code  to determine what else is relevant. For example, you might keep track of some performance metric, and use some heuristic algorithm that ranks the related information. Or perhaps fuzzy text searching, or combinations of criteria. If the number of hits got large, then the menu approach here might not be the best one. Then, something like the occur interface might be more suitable.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Copyright (C) 2014 by John Kitchin. See the &lt;a href="/copying.html"&gt;License&lt;/a&gt; for information about copying.&lt;p&gt;&lt;p&gt;&lt;a href="/org/2014/11/09/A-hint-system-for-problems-in-org-mode.org"&gt;org-mode source&lt;/a&gt;&lt;p&gt;&lt;p&gt;Org-mode version = 8.2.7c&lt;/p&gt;]]></content:encoded>
    </item>
    <item>
      <title>A context-sensitive file link menu in org-mode</title>
      <link>https://kitchingroup.cheme.cmu.edu/blog/2014/11/08/A-context-sensitive-file-link-menu-in-org-mode</link>
      <pubDate>Sat, 08 Nov 2014 10:24:14 EST</pubDate>
      <category><![CDATA[org]]></category>
      <guid isPermaLink="false">N7fM4O8dLVofW1TAz418Q8wNbIg=</guid>
      <description>A context-sensitive file link menu in org-mode</description>
      <content:encoded><![CDATA[


&lt;p&gt;
I am still interested in various ways to get more functionality of org-links. For example, we looked at:
&lt;/p&gt;
&lt;ol class="org-ol"&gt;
&lt;li&gt;&lt;a href="http://kitchingroup.cheme.cmu.edu/blog/2013/10/21/Enabling-right-clicks-in-org-mode-links/"&gt;enabling right clicks&lt;/a&gt; on links
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://kitchingroup.cheme.cmu.edu/blog/2014/11/02/A-generalized-org-link-with-an-extendable-menu-of-actions/"&gt;new links with menus&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
When you click on a link, the function org-open-at-point runs, which is a &lt;i&gt;large&lt;/i&gt; function that does a lot of things. One of them is to check if the link is defined in org-link-protocols, and to run the function definition there if it is. Here is a list of links defined for me. I defined a lot of these in org-ref, and my own init files, so you may not see these on your system.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(mapcar 'car org-link-protocols)
&lt;/pre&gt;
&lt;/div&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;
&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="left"&gt;google&lt;/td&gt;
&lt;td class="left"&gt;ResearcherID&lt;/td&gt;
&lt;td class="left"&gt;orcid&lt;/td&gt;
&lt;td class="left"&gt;message&lt;/td&gt;
&lt;td class="left"&gt;mac-outlook&lt;/td&gt;
&lt;td class="left"&gt;skim&lt;/td&gt;
&lt;td class="left"&gt;addressbook&lt;/td&gt;
&lt;td class="left"&gt;x-together-item&lt;/td&gt;
&lt;td class="left"&gt;rmail&lt;/td&gt;
&lt;td class="left"&gt;mhe&lt;/td&gt;
&lt;td class="left"&gt;irc&lt;/td&gt;
&lt;td class="left"&gt;info&lt;/td&gt;
&lt;td class="left"&gt;gnus&lt;/td&gt;
&lt;td class="left"&gt;docview&lt;/td&gt;
&lt;td class="left"&gt;bibtex&lt;/td&gt;
&lt;td class="left"&gt;bbdb&lt;/td&gt;
&lt;td class="left"&gt;ans&lt;/td&gt;
&lt;td class="left"&gt;exercise&lt;/td&gt;
&lt;td class="left"&gt;solution&lt;/td&gt;
&lt;td class="left"&gt;assignment&lt;/td&gt;
&lt;td class="left"&gt;doi&lt;/td&gt;
&lt;td class="left"&gt;bibentry&lt;/td&gt;
&lt;td class="left"&gt;Autocites&lt;/td&gt;
&lt;td class="left"&gt;autocites&lt;/td&gt;
&lt;td class="left"&gt;supercites&lt;/td&gt;
&lt;td class="left"&gt;Textcites&lt;/td&gt;
&lt;td class="left"&gt;textcites&lt;/td&gt;
&lt;td class="left"&gt;Smartcites&lt;/td&gt;
&lt;td class="left"&gt;smartcites&lt;/td&gt;
&lt;td class="left"&gt;footcitetexts&lt;/td&gt;
&lt;td class="left"&gt;footcites&lt;/td&gt;
&lt;td class="left"&gt;Parencites&lt;/td&gt;
&lt;td class="left"&gt;parencites&lt;/td&gt;
&lt;td class="left"&gt;Cites&lt;/td&gt;
&lt;td class="left"&gt;cites&lt;/td&gt;
&lt;td class="left"&gt;fnotecite&lt;/td&gt;
&lt;td class="left"&gt;Pnotecite&lt;/td&gt;
&lt;td class="left"&gt;pnotecite&lt;/td&gt;
&lt;td class="left"&gt;Notecite&lt;/td&gt;
&lt;td class="left"&gt;notecite&lt;/td&gt;
&lt;td class="left"&gt;footfullcite&lt;/td&gt;
&lt;td class="left"&gt;fullcite&lt;/td&gt;
&lt;td class="left"&gt;citeurl&lt;/td&gt;
&lt;td class="left"&gt;citedate*&lt;/td&gt;
&lt;td class="left"&gt;citedate&lt;/td&gt;
&lt;td class="left"&gt;citetitle*&lt;/td&gt;
&lt;td class="left"&gt;citetitle&lt;/td&gt;
&lt;td class="left"&gt;Citeauthor*&lt;/td&gt;
&lt;td class="left"&gt;Autocite*&lt;/td&gt;
&lt;td class="left"&gt;autocite*&lt;/td&gt;
&lt;td class="left"&gt;Autocite&lt;/td&gt;
&lt;td class="left"&gt;autocite&lt;/td&gt;
&lt;td class="left"&gt;supercite&lt;/td&gt;
&lt;td class="left"&gt;parencite*&lt;/td&gt;
&lt;td class="left"&gt;cite*&lt;/td&gt;
&lt;td class="left"&gt;Smartcite&lt;/td&gt;
&lt;td class="left"&gt;smartcite&lt;/td&gt;
&lt;td class="left"&gt;Textcite&lt;/td&gt;
&lt;td class="left"&gt;textcite&lt;/td&gt;
&lt;td class="left"&gt;footcitetext&lt;/td&gt;
&lt;td class="left"&gt;footcite&lt;/td&gt;
&lt;td class="left"&gt;Parencite&lt;/td&gt;
&lt;td class="left"&gt;parencite&lt;/td&gt;
&lt;td class="left"&gt;Cite&lt;/td&gt;
&lt;td class="left"&gt;Citeauthor&lt;/td&gt;
&lt;td class="left"&gt;Citealp&lt;/td&gt;
&lt;td class="left"&gt;Citealt&lt;/td&gt;
&lt;td class="left"&gt;Citep&lt;/td&gt;
&lt;td class="left"&gt;Citet&lt;/td&gt;
&lt;td class="left"&gt;citeyear*&lt;/td&gt;
&lt;td class="left"&gt;citeyear&lt;/td&gt;
&lt;td class="left"&gt;citeauthor*&lt;/td&gt;
&lt;td class="left"&gt;citeauthor&lt;/td&gt;
&lt;td class="left"&gt;citetext&lt;/td&gt;
&lt;td class="left"&gt;citenum&lt;/td&gt;
&lt;td class="left"&gt;citealp*&lt;/td&gt;
&lt;td class="left"&gt;citealp&lt;/td&gt;
&lt;td class="left"&gt;citealt*&lt;/td&gt;
&lt;td class="left"&gt;citealt&lt;/td&gt;
&lt;td class="left"&gt;citep*&lt;/td&gt;
&lt;td class="left"&gt;citep&lt;/td&gt;
&lt;td class="left"&gt;citet*&lt;/td&gt;
&lt;td class="left"&gt;citet&lt;/td&gt;
&lt;td class="left"&gt;nocite&lt;/td&gt;
&lt;td class="left"&gt;cite&lt;/td&gt;
&lt;td class="left"&gt;eqref&lt;/td&gt;
&lt;td class="left"&gt;nameref&lt;/td&gt;
&lt;td class="left"&gt;pageref&lt;/td&gt;
&lt;td class="left"&gt;ref&lt;/td&gt;
&lt;td class="left"&gt;label&lt;/td&gt;
&lt;td class="left"&gt;list-of-tables&lt;/td&gt;
&lt;td class="left"&gt;list-of-figures&lt;/td&gt;
&lt;td class="left"&gt;addbibresource&lt;/td&gt;
&lt;td class="left"&gt;bibliographystyle&lt;/td&gt;
&lt;td class="left"&gt;printbibliography&lt;/td&gt;
&lt;td class="left"&gt;nobibliography&lt;/td&gt;
&lt;td class="left"&gt;bibliography&lt;/td&gt;
&lt;td class="left"&gt;pydoc&lt;/td&gt;
&lt;td class="left"&gt;index&lt;/td&gt;
&lt;td class="left"&gt;attachfile&lt;/td&gt;
&lt;td class="left"&gt;msx&lt;/td&gt;
&lt;td class="left"&gt;id&lt;/td&gt;
&lt;td class="left"&gt;file+emacs&lt;/td&gt;
&lt;td class="left"&gt;file+sys&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Interestingly, file links are not defined in org-link-protocols, they are handled separately. I would like to change the behavior of file+emacs links. Instead of just opening the file, I want a menu to give me the option to create the file if it does not exist, and to open it in emacs, or with a system program if the file does exist. Let us see what this link does.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(assoc &lt;span style="color: #228b22;"&gt;"file+emacs"&lt;/span&gt; org-link-protocols)
&lt;/pre&gt;
&lt;/div&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;
&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="left"&gt;file+emacs&lt;/td&gt;
&lt;td class="left"&gt;org-open-file-with-emacs&lt;/td&gt;
&lt;td class="left"&gt;nil&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
When you click on the link, it runs org-open-file-with-emacs, and there is no formatting function defined.
&lt;/p&gt;

&lt;p&gt;
So, let us define a list of functions that could make a menu. A new variation we use in this post is that each element of the list will be a (key menu-name action-func visible-p) list. visible-p will be a function that determines if the function is listed in the menu. That way, our menu will be context specific.
&lt;/p&gt;

&lt;p&gt;
We want an option to create a file if it does not exist, and if it does exist, a choice to open in emacs, or a system program. So the idea here is to create the menu in a variable (so it easy to add to later), then when you click on the link it will run a menu function that  filters the functions to run, and then prompt you for a selection.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(&lt;span style="color: #8b0000;"&gt;defvar&lt;/span&gt; &lt;span style="color: #8b008b;"&gt;file+emacs-menu&lt;/span&gt; '()
  &lt;span style="color: #228b22;"&gt;"list of menu entries. (key name action visible).&lt;/span&gt;
&lt;span style="color: #228b22;"&gt;key is a character to select.&lt;/span&gt;
&lt;span style="color: #228b22;"&gt;name is what shows in the menu as [key]name&lt;/span&gt;
&lt;span style="color: #228b22;"&gt;action is a function that takes a path&lt;/span&gt;
&lt;span style="color: #228b22;"&gt;visible is a function that determines if the entry is in the menu."&lt;/span&gt;)

(setq file+emacs-menu
      '((&lt;span style="color: #228b22;"&gt;"c"&lt;/span&gt; &lt;span style="color: #228b22;"&gt;"reate"&lt;/span&gt;
         find-file ; &lt;span style="color: #ff0000; font-weight: bold;"&gt;action function&lt;/span&gt;
         (&lt;span style="color: #8b0000;"&gt;lambda&lt;/span&gt; (x) (not (file-exists-p x)))) ; &lt;span style="color: #ff0000; font-weight: bold;"&gt;visible-p&lt;/span&gt;
        (&lt;span style="color: #228b22;"&gt;"o"&lt;/span&gt; &lt;span style="color: #228b22;"&gt;"pen"&lt;/span&gt;
         org-open-file-with-emacs
         (&lt;span style="color: #8b0000;"&gt;lambda&lt;/span&gt; (x) (file-exists-p x)))
        (&lt;span style="color: #228b22;"&gt;"e"&lt;/span&gt; &lt;span style="color: #228b22;"&gt;"xternal open"&lt;/span&gt;
         (&lt;span style="color: #8b0000;"&gt;lambda&lt;/span&gt; (x) (org-open-file path '(16)))
         (&lt;span style="color: #8b0000;"&gt;lambda&lt;/span&gt; (x) (file-exists-p x)))))


(&lt;span style="color: #8b0000;"&gt;defun&lt;/span&gt; &lt;span style="color: #8b2323;"&gt;file+emacs-menu&lt;/span&gt; (path)
  &lt;span style="color: #228b22;"&gt;"menu command for file+emacs links"&lt;/span&gt;
  (interactive)
  (&lt;span style="color: #8b0000;"&gt;let*&lt;/span&gt; ((filtered-menu-list (-filter
                              (&lt;span style="color: #8b0000;"&gt;lambda&lt;/span&gt; (x) (funcall (car (last x)) path))
                              file+emacs-menu))
         (menu-string (concat
                       (mapconcat
                        (&lt;span style="color: #8b0000;"&gt;lambda&lt;/span&gt; (tup)
                          (concat &lt;span style="color: #228b22;"&gt;"["&lt;/span&gt; (elt tup 0) &lt;span style="color: #228b22;"&gt;"]"&lt;/span&gt;
                                  (elt tup 1) &lt;span style="color: #228b22;"&gt;" "&lt;/span&gt;))
                        filtered-menu-list
                        &lt;span style="color: #228b22;"&gt;""&lt;/span&gt;) &lt;span style="color: #228b22;"&gt;": "&lt;/span&gt;))
         (input (read-char-exclusive menu-string nil 1))
         (selected-func (and
                         input
                         (elt
                          (assoc
                           (char-to-string input) filtered-menu-list)
                          2))))
    (&lt;span style="color: #8b0000;"&gt;when&lt;/span&gt; selected-func
      (funcall selected-func path))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class="example"&gt;
file+emacs-menu
&lt;/pre&gt;

&lt;p&gt;
Now we need to change the link definition in org-link-protocols. setf comes to the rescue. We just get the whole entry, and then setf the second position in it like this.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(setf (elt (assoc &lt;span style="color: #228b22;"&gt;"file+emacs"&lt;/span&gt; org-link-protocols) 1)
  'file+emacs-menu)
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class="example"&gt;
file+emacs-menu
&lt;/pre&gt;

&lt;p&gt;
Here we just confirm we set it.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(assoc &lt;span style="color: #228b22;"&gt;"file+emacs"&lt;/span&gt; org-link-protocols)
&lt;/pre&gt;
&lt;/div&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;
&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="left"&gt;file+emacs&lt;/td&gt;
&lt;td class="left"&gt;file+emacs-menu&lt;/td&gt;
&lt;td class="left"&gt;nil&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Now, when we click on these links, we get our context specific menu. When
&lt;/p&gt;

&lt;p&gt;
This file exists: &lt;a href="/media/2014-11-08-A-context-sensitive-file-link-menu-in-org-mode/ase-db.org"&gt;ase-db.org&lt;/a&gt; so we see this menu:
&lt;/p&gt;

&lt;div class="figure"&gt;
&lt;p&gt;&lt;img src="/media/2014-11-08-A-context-sensitive-file-link-menu-in-org-mode/open-menu.png"&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
This file does not exist: &lt;a href="test.noext"&gt;test.noext&lt;/a&gt;
So we see:
&lt;/p&gt;

&lt;div class="figure"&gt;
&lt;p&gt;&lt;img src="/media/2014-11-08-A-context-sensitive-file-link-menu-in-org-mode/create-menu.png"&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
For these, we can select to open them in a pdf reader or MS Word from our new menu.
&lt;a href="/media/2014-11-08-A-context-sensitive-file-link-menu-in-org-mode/attaching-code-blocks-to-a-pdf.pdf"&gt;attaching-code-blocks-to-a-pdf.pdf&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="/media/2014-11-08-A-context-sensitive-file-link-menu-in-org-mode/org-to-word.docx"&gt;org-to-word.docx&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I admit this example was a little contrived. You can do most of these things with prefix commands, or more specific commands in emacs. But, I rarely remember those. I would have preferred to use the file link in this example, but it is not defined in org-link-protocols, so this style of modification would not work, and I did not want to add it to org-link-protocols just to show how to change it this way.
&lt;/p&gt;

&lt;p&gt;
This general approach would be very useful for links where there may be multiple contexts or actions that make sense. For file links, you may want do different things if the file already exists, or if it does not exist. As another example, my &lt;a href="https://github.com/jkitchin/jmax/blob/master/org/doi-utils.org#a-new-doi-link-for-org-mode"&gt;doi link&lt;/a&gt; gives me a menu to:
&lt;/p&gt;
&lt;ol class="org-ol"&gt;
&lt;li&gt;open in &lt;a href="https://doi.org"&gt;https://doi.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;open the doi in Web of Science
&lt;/li&gt;
&lt;li&gt;find citing articles in Web of Science
&lt;/li&gt;
&lt;li&gt;search the doi in Google Scholar
&lt;/li&gt;
&lt;li&gt;open the doi in CrossRef
&lt;/li&gt;
&lt;li&gt;open the doi in Pubmed
&lt;/li&gt;
&lt;li&gt;find the doi in my bibtex file
&lt;/li&gt;
&lt;li&gt;get a bibtex entry for the doi
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
I get all that from a click! org-ref offers similar functionality for cite links, where you might want to do different things from a click:
&lt;/p&gt;
&lt;ol class="org-ol"&gt;
&lt;li&gt;See preview of the citation
&lt;/li&gt;
&lt;li&gt;open the bibtex entry
&lt;/li&gt;
&lt;li&gt;open the pdf if you have it
&lt;/li&gt;
&lt;li&gt;open the url for the entry
&lt;/li&gt;
&lt;li&gt;any of the things I listed for the doi example above.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
I am sure there are many other things that might be useful to do!
&lt;/p&gt;
&lt;p&gt;Copyright (C) 2014 by John Kitchin. See the &lt;a href="/copying.html"&gt;License&lt;/a&gt; for information about copying.&lt;p&gt;&lt;p&gt;&lt;a href="/org/2014/11/08/A-context-sensitive-file-link-menu-in-org-mode.org"&gt;org-mode source&lt;/a&gt;&lt;p&gt;&lt;p&gt;Org-mode version = 8.2.7c&lt;/p&gt;
]]></content:encoded>
    </item>
    <item>
      <title>A generalized org-link with an extendable menu of actions</title>
      <link>https://kitchingroup.cheme.cmu.edu/blog/2014/11/02/A-generalized-org-link-with-an-extendable-menu-of-actions</link>
      <pubDate>Sun, 02 Nov 2014 19:33:14 EST</pubDate>
      <category><![CDATA[org]]></category>
      <guid isPermaLink="false">Cf0O5RZ6zgyMNAxFnpLeAp2Dm7Q=</guid>
      <description>A generalized org-link with an extendable menu of actions</description>
      <content:encoded><![CDATA[


&lt;p&gt;
In org-ref the cite links are actually a menu of options. Here I want to explore generalizing the concept, and enable users to add new menu items. When you click on a cite link, it calls a function that constructs the menu as a string. Then, we read something from the minibuffer to say what should be done. We could store these things in variables, so that a user could add their own things. We need a list of characters, menu strings, and functions to run when to create the menu. Here we put together a little example code that shows the idea.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(&lt;span style="color: #8b0000;"&gt;defun&lt;/span&gt; &lt;span style="color: #8b2323;"&gt;option-a&lt;/span&gt; (link)
  (message &lt;span style="color: #228b22;"&gt;"You picked option A for %s"&lt;/span&gt; link))

(&lt;span style="color: #8b0000;"&gt;defun&lt;/span&gt; &lt;span style="color: #8b2323;"&gt;option-b&lt;/span&gt; (link)
  (message &lt;span style="color: #228b22;"&gt;"You picked option B for %s"&lt;/span&gt; link))

(&lt;span style="color: #8b0000;"&gt;defvar&lt;/span&gt; &lt;span style="color: #8b008b;"&gt;menu-funcs&lt;/span&gt;
 '((&lt;span style="color: #228b22;"&gt;"a"&lt;/span&gt; &lt;span style="color: #228b22;"&gt;"Option 1"&lt;/span&gt; option-a)
   (&lt;span style="color: #228b22;"&gt;"b"&lt;/span&gt; &lt;span style="color: #228b22;"&gt;"Option 2"&lt;/span&gt; option-b)))

(&lt;span style="color: #8b0000;"&gt;defun&lt;/span&gt; &lt;span style="color: #8b2323;"&gt;menu-click&lt;/span&gt; (path)
  (message
   (concat
    (mapconcat
     (&lt;span style="color: #8b0000;"&gt;lambda&lt;/span&gt; (tup)
       (concat &lt;span style="color: #228b22;"&gt;"["&lt;/span&gt; (elt tup 0) &lt;span style="color: #228b22;"&gt;"]"&lt;/span&gt;
               (elt tup 1) &lt;span style="color: #228b22;"&gt;" "&lt;/span&gt;))
     menu-funcs &lt;span style="color: #228b22;"&gt;""&lt;/span&gt;) &lt;span style="color: #228b22;"&gt;": "&lt;/span&gt;))
  (setq input (read-char-exclusive))
  (funcall
   (elt 
    (assoc
     (char-to-string input) menu-funcs)
    2)
   path))

(org-add-link-type
 &lt;span style="color: #228b22;"&gt;"menu"&lt;/span&gt;
 'menu-click)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;a href="element"&gt;element&lt;/a&gt;  Clicking on that link in Emacs gives me the desired menu!
&lt;/p&gt;


&lt;div class="figure"&gt;
&lt;p&gt;&lt;img src="/media/2014-11-02-A-generalized-org-link-with-an-extendable-menu-of-actions/menu.png"&gt; 
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
and 
&lt;/p&gt;


&lt;div class="figure"&gt;
&lt;p&gt;&lt;img src="/media/2014-11-02-A-generalized-org-link-with-an-extendable-menu-of-actions/menu-response.png"&gt; 
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
Now, we test adding a new function.
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(&lt;span style="color: #8b0000;"&gt;defun&lt;/span&gt; &lt;span style="color: #8b2323;"&gt;option-c&lt;/span&gt; (link)
  (message &lt;span style="color: #228b22;"&gt;"You picked option C for %s"&lt;/span&gt; link))

(add-to-list 'menu-funcs
 '(&lt;span style="color: #228b22;"&gt;"c"&lt;/span&gt; &lt;span style="color: #228b22;"&gt;"Option C"&lt;/span&gt; option-c))
&lt;/pre&gt;
&lt;/div&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;
&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="left"&gt;c&lt;/td&gt;
&lt;td class="left"&gt;Option C&lt;/td&gt;
&lt;td class="left"&gt;option-c&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="left"&gt;a&lt;/td&gt;
&lt;td class="left"&gt;Option 1&lt;/td&gt;
&lt;td class="left"&gt;option-a&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="left"&gt;b&lt;/td&gt;
&lt;td class="left"&gt;Option 2&lt;/td&gt;
&lt;td class="left"&gt;option-b&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Well, that worked fine! You might want to append to the list instead of put it at the beginning, but that is really your choice.  
&lt;/p&gt;

&lt;div class="org-src-container"&gt;

&lt;pre class="src src-emacs-lisp"&gt;(&lt;span style="color: #8b0000;"&gt;defun&lt;/span&gt; &lt;span style="color: #8b2323;"&gt;option-4&lt;/span&gt; (link)
  (message &lt;span style="color: #228b22;"&gt;"You picked option 4 for %s"&lt;/span&gt; link))

(add-to-list 'menu-funcs
 '(&lt;span style="color: #228b22;"&gt;"4"&lt;/span&gt; &lt;span style="color: #228b22;"&gt;"Option 4"&lt;/span&gt; option-4) t)
&lt;/pre&gt;
&lt;/div&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;

&lt;col  class="left" /&gt;
&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="left"&gt;c&lt;/td&gt;
&lt;td class="left"&gt;Option C&lt;/td&gt;
&lt;td class="left"&gt;option-c&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="left"&gt;a&lt;/td&gt;
&lt;td class="left"&gt;Option 1&lt;/td&gt;
&lt;td class="left"&gt;option-a&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="left"&gt;b&lt;/td&gt;
&lt;td class="left"&gt;Option 2&lt;/td&gt;
&lt;td class="left"&gt;option-b&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="left"&gt;4&lt;/td&gt;
&lt;td class="left"&gt;Option 4&lt;/td&gt;
&lt;td class="left"&gt;option-4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
I think this example more or less shows the basic idea here. These external functions may do a variety of things, like look up something on google, or some other web service, search for something on your hard drive, etc&amp;#x2026; For example in org-ref, clicking on a cite link gives you options to open the bibtex file, a pdf, a url or notes. This would allow you to open other things too, if you felt like it. For better or worse, you can modify the behavior of the link after it is defined.
&lt;/p&gt;
&lt;p&gt;Copyright (C) 2014 by John Kitchin. See the &lt;a href="/copying.html"&gt;License&lt;/a&gt; for information about copying.&lt;p&gt;&lt;p&gt;&lt;a href="/org/2014/11/02/A-generalized-org-link-with-an-extendable-menu-of-actions.org"&gt;org-mode source&lt;/a&gt;&lt;p&gt;&lt;p&gt;Org-mode version = 8.2.7c&lt;/p&gt;]]></content:encoded>
    </item>
    <item>
      <title>Org-mode is awesome</title>
      <link>https://kitchingroup.cheme.cmu.edu/blog/2014/07/12/Org-mode-is-awesome</link>
      <pubDate>Sat, 12 Jul 2014 16:12:48 EDT</pubDate>
      <category><![CDATA[org]]></category>
      <guid isPermaLink="false">_45SimKxhFSfQ9d5P8nYlNpi24o=</guid>
      <description>Org-mode is awesome</description>
      <content:encoded><![CDATA[



&lt;p&gt;
I made a video on Youtube (&lt;a href="https://www.youtube.com/watch?v=fgizHHd7nOo"&gt;https://www.youtube.com/watch?v=fgizHHd7nOo&lt;/a&gt; ) demonstrating how we use Emacs and org-mode. The source for that file can be found &lt;a href="/media/2014-07-12-Org-mode-is-awesome/why-org-mode.org"&gt;here&lt;/a&gt; .
&lt;/p&gt;

&lt;p&gt;
There are some other good org-mode videos out there. Here are few:
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=oJTwQvgfgMM"&gt;Emacs Org-mode - a system for note-taking and project planning&lt;/a&gt; (Carsten Dominik)
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=6W82EdwQhxU"&gt;Hack Emacs - An Overview of Org Mode&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=nsGYet02bEk"&gt;Hack Emacs - Org Mode In Depth: Managing Structure&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=1-dUkyn_fZA"&gt;Emacs + org-mode + python in reproducible research; SciPy 2013 Presentation&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=JyvpSVl4_dg"&gt;Using org-ref&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://vimeo.com/99167082"&gt;Emacs Org-mode Bibtex Screencast&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Copyright (C) 2014 by John Kitchin. See the &lt;a href="/copying.html"&gt;License&lt;/a&gt; for information about copying.&lt;p&gt;&lt;p&gt;&lt;a href="/org/2014/07/12/Org-mode-is-awesome.org"&gt;org-mode source&lt;/a&gt;&lt;p&gt;&lt;p&gt;Org-mode version = 8.2.6&lt;/p&gt;
]]></content:encoded>
    </item>
  </channel>
</rss>
