<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Elsa Gonsiorowski</title>
        <description>My Personal Website</description>
        <link>http://gonsie.com/</link>
        <atom:link href="http://gonsie.com/blorg/feeds/jekyll.xml" rel="self" type="application/rss+xml"/>
        <pubDate>Tue, 19 May 2026 17:45:38 +0000</pubDate>
        <lastBuildDate>Tue, 19 May 2026 17:45:38 +0000</lastBuildDate>
        <generator>Jekyll v3.10.0</generator>
        
        
        
        
        
        
        
        
        
        
            <item>
                <title>Generating Multiple Jekyll RSS Feeds</title>
                <author>gonsie@me.com (Elsa Gonsiorowski)</author>
                <description>&lt;p&gt;Whelp, my &lt;a href=&quot;http://www.gonsie.com/blorg/rss-by-email.html&quot;&gt;“resolution”&lt;/a&gt; to post to this blog every 90 days or so has failed.
It lasted about a year, but a few &lt;del&gt;weeks&lt;/del&gt; months ago I got an email notification that my RSSby.email subscription was automatically unsubscribed due to inactivity.
I guess one good thing is now I know that I’ll get an unsubscribe notice…
but sorry to all my RSSby.email followers who now have to go through the hassle to resubscribe.&lt;/p&gt;

&lt;p&gt;One of the things that has kept me from posting is that my blog is being indexed by &lt;a href=&quot;https://planet.emacslife.com&quot;&gt;Planet Emacs&lt;/a&gt;.
I only found out from a comment that someone left, but apparently it’s been in there since March 2020.
Now I feel bad for all those non-emacs posts!
My solution is create an emacs-only RSS feed for my site.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: If you are using GitHub pages to deploy your site, skip to &lt;a href=&quot;#orgdcd823c&quot;&gt;Step 4: Slightly Less Generation&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;orga619f1a&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;step-1-create-the-file-generator&quot;&gt;Step 1: Create the File Generator&lt;/h2&gt;

&lt;p&gt;Jekyll has the capability to &lt;a href=&quot;https://jekyllrb.com/docs/plugins/generators/&quot;&gt;generate&lt;/a&gt; whole pages.
That is, no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.md&lt;/code&gt; file exists in the source tree, but a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.html&lt;/code&gt; file is generated and appears on the site.
This requires writing a bit of ruby code (a Jekyll plugin), but a very easy to use template is included in the documentation (linked above).&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;k&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;GenerateTagRSS&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;TagRSSGenerator&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Jekyll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Generator&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;safe&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;true&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;# loop to generate each feed file&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;generate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;tags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;posts&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
        &lt;span class=&quot;no&quot;&gt;Jekyll&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;logger&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;info&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\t&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Generating feed for tag: &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;# call to TagRSSPage instantiation function&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;pages&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;TagRSSPage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;posts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;# Subclass of `Jekyll::Page` with custom method definitions.&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# TagRSSPage instantiation&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# Definition of what an RSS file looks like&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;TagRSSPage&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Jekyll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Page&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;initialize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;posts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;vi&quot;&gt;@site&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;             &lt;span class=&quot;c1&quot;&gt;# the current site instance.&lt;/span&gt;
      &lt;span class=&quot;vi&quot;&gt;@base&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;source&lt;/span&gt;      &lt;span class=&quot;c1&quot;&gt;# path to the source directory.&lt;/span&gt;
      &lt;span class=&quot;vi&quot;&gt;@dir&lt;/span&gt;  &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;blorg/feeds&apos;&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;# the directory the page will reside in.&lt;/span&gt;

      &lt;span class=&quot;vi&quot;&gt;@basename&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;          &lt;span class=&quot;c1&quot;&gt;# filename without the extension.&lt;/span&gt;
      &lt;span class=&quot;vi&quot;&gt;@ext&lt;/span&gt;      &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;.xml&apos;&lt;/span&gt;       &lt;span class=&quot;c1&quot;&gt;# the extension.&lt;/span&gt;
      &lt;span class=&quot;vi&quot;&gt;@name&lt;/span&gt;     &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;.xml&apos;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# basically @basename + @ext.&lt;/span&gt;


      &lt;span class=&quot;c1&quot;&gt;# Initialize data hash with a key pointing to all posts under current category.&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;# This allows accessing the list in a template via `page.linked_docs`.&lt;/span&gt;
      &lt;span class=&quot;vi&quot;&gt;@data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s1&quot;&gt;&apos;linked_docs&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;posts&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

      &lt;span class=&quot;c1&quot;&gt;# Look up front matter defaults scoped to type `tags`, if given key&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;# doesn&apos;t exist in the `data` hash.&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;default_proc&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;proc&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;frontmatter_defaults&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;relative_path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:tag&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;# Placeholders that are used in constructing page URL.&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;url_placeholders&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;ss&quot;&gt;:path&lt;/span&gt;       &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;ss&quot;&gt;:basename&lt;/span&gt;   &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;basename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;ss&quot;&gt;:output_ext&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;output_ext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;div class=&quot;org-center&quot;&gt;
&lt;p&gt;
File &lt;code&gt;GenerateRSSTags.rb&lt;/code&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Now I don’t understand that code entirely, but I have verified that it does work.&lt;/p&gt;

&lt;h2 id=&quot;step-2-template-for-the-generated-files&quot;&gt;Step 2: Template for the Generated Files&lt;/h2&gt;

&lt;p&gt;The R community has a similar “R topics” RSS aggregator, with an explicit requirement that included feeds are limited to on-topic posts.
&lt;a href=&quot;https://methodmatters.github.io/rss-add-github-blog-to-r-bloggers/&quot;&gt;This post&lt;/a&gt; guides you through doing that by hand, for a single Jekyll tag.
It provides a basic template for an RSS XML file, (only slightly adapted below).&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;  &lt;span class=&quot;cp&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;rss&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;version=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;2.0&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns:atom=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;http://www.w3.org/2005/Atom&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;channel&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;{{ site.title | xml_escape }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;&amp;lt;description&amp;gt;&lt;/span&gt;{{ site.description | xml_escape }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;&amp;lt;link&amp;gt;&lt;/span&gt;{{ site.url }}{{ site.baseurl }}/&lt;span class=&quot;nt&quot;&gt;&amp;lt;/link&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;&amp;lt;atom:link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{{ page.url | prepend: site.baseurl | prepend: site.url }}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;self&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;application/rss+xml&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;&amp;lt;pubDate&amp;gt;&lt;/span&gt;{{ site.time | date_to_rfc822 }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/pubDate&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;&amp;lt;lastBuildDate&amp;gt;&lt;/span&gt;{{ site.time | date_to_rfc822 }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/lastBuildDate&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;&amp;lt;generator&amp;gt;&lt;/span&gt;Jekyll v{{ jekyll.version }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/generator&amp;gt;&lt;/span&gt;
          {% for post in page.linked_docs %}
              &lt;span class=&quot;nt&quot;&gt;&amp;lt;item&amp;gt;&lt;/span&gt;
                  &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;{{ post.title | xml_escape }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
                  &lt;span class=&quot;nt&quot;&gt;&amp;lt;author&amp;gt;&lt;/span&gt;{{ site.email | xml_escape }} ({{ site.author | xml_escape }})&lt;span class=&quot;nt&quot;&gt;&amp;lt;/author&amp;gt;&lt;/span&gt;
                  &lt;span class=&quot;nt&quot;&gt;&amp;lt;description&amp;gt;&lt;/span&gt;{{ post.content | xml_escape }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;
                  &lt;span class=&quot;nt&quot;&gt;&amp;lt;pubDate&amp;gt;&lt;/span&gt;{{ post.date | date_to_rfc822 }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/pubDate&amp;gt;&lt;/span&gt;
                  &lt;span class=&quot;nt&quot;&gt;&amp;lt;link&amp;gt;&lt;/span&gt;{{ post.url | prepend: site.baseurl | prepend: site.url }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/link&amp;gt;&lt;/span&gt;
                  &lt;span class=&quot;nt&quot;&gt;&amp;lt;guid&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isPermaLink=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{{ post.url | prepend: site.baseurl | prepend: site.url }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/guid&amp;gt;&lt;/span&gt;
                  {% for tag in post.tags %}
                  &lt;span class=&quot;nt&quot;&gt;&amp;lt;category&amp;gt;&lt;/span&gt;{{ tag | xml_escape }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/category&amp;gt;&lt;/span&gt;
                  {% endfor %}
                  {% for cat in post.categories %}
                  &lt;span class=&quot;nt&quot;&gt;&amp;lt;category&amp;gt;&lt;/span&gt;{{ cat | xml_escape }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/category&amp;gt;&lt;/span&gt;
                  {% endfor %}
              &lt;span class=&quot;nt&quot;&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
          {% endfor %}
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/channel&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/rss&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;div class=&quot;org-center&quot;&gt;
&lt;p&gt;
File &lt;code&gt;_layouts/rss.html&lt;/code&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Some notes on this snippet:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;This layout file has the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.html&lt;/code&gt; extension.
This is an assumption/requirement of Jekyll, our ruby generator code is what sets the output file extension to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.xml&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;The posts which will be included are passed via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;page.linked_docs&lt;/code&gt; variable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course it’s important to make sure Jekyll knows that the generated files should default to using this layout.
That is done in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_config.yml&lt;/code&gt; file.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;na&quot;&gt;defaults&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scope&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tag&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;values&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;layout&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;rss&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;div class=&quot;org-center&quot;&gt;
&lt;p&gt;
Snippet from _config.yml
&lt;/p&gt;
&lt;/div&gt;

&lt;h2 id=&quot;step-3-getting-it-to-run&quot;&gt;Step 3: Getting it to Run&lt;/h2&gt;

&lt;p&gt;By default Jekyll will run any generators it finds in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_plugins&lt;/code&gt; directory.
I included a nice log message in the generation loop, so that I have some indication that each tag is being generated.
Locally building my site is complete success!&lt;/p&gt;

&lt;p&gt;The one &lt;em&gt;slight&lt;/em&gt; issue is that GitHub pages won’t run &lt;a href=&quot;https://docs.github.com/en/pages/setting-up-a-github-pages-site-with-jekyll/about-github-pages-and-jekyll#plugins&quot;&gt;unsupported plugins&lt;/a&gt;, aka the generator we just wrote.
So much of this post feels moot.
The whole reason I’m still using the Jekyll stack is that GitHub takes care of generating the site for me.&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;orgdcd823c&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;step-4-slightly-less-generation&quot;&gt;Step 4: Slightly Less Generation&lt;/h2&gt;

&lt;p&gt;Since I couldn’t get GitHub pages to actually generate the files from whole cloth, I had to do a bit by hand.
This is relatively easy, given a list of tags which exist on my site, I simply create the following markdown file for each tag:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-md&quot; data-lang=&quot;md&quot;&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;layout&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;rss&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;permalink&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/blorg/feeds/emacs.xml&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;tagname&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;emacs&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;div class=&quot;org-center&quot;&gt;
&lt;p&gt;
Jekyll frontmatter for tag feed file
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Then, in the RSS layout (from &lt;a href=&quot;#orga619f1a&quot;&gt;Step 1&lt;/a&gt;), instead of looping over the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;page.linked_docs&lt;/code&gt; variable, I use:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;{% for post in site.posts %}
{% if post.tags contains page.tagname %}&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;div class=&quot;org-center&quot;&gt;
&lt;p&gt;
Updated liquid loop for &lt;code&gt;_layouts/rss.html&lt;/code&gt; file.
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;(Don’t forget to close your if statement with an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{% endif %}&lt;/code&gt; just before the end of the loop).
This solution requires the manual step of me remembering to create the tag markdown file when I use a new tag, but it works!&lt;/p&gt;

&lt;h2 id=&quot;step-5-profit&quot;&gt;Step 5: Profit&lt;/h2&gt;

&lt;p&gt;The final step is to share these RSS feeds with the world.
I’ve created a whole &lt;a href=&quot;/blorg/feeds/&quot;&gt;feeds page&lt;/a&gt; which implements the following liquid to generate a nice list of topics with a link to each RSS feed (somewhat simplified here):&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-liquid&quot; data-lang=&quot;liquid&quot;&gt;&lt;span class=&quot;p&quot;&gt;{%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;site.tags&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;%}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;capture&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;tagname&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;%}{{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;first&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}{%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;endcapture&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;%}&lt;/span&gt;
  &amp;lt;a href=&quot;/blorg/feeds/&lt;span class=&quot;p&quot;&gt;{{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;tagname&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;.xml&quot;&amp;gt;&lt;span class=&quot;p&quot;&gt;{{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;tagname&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&amp;lt;/a&amp;gt;
&lt;span class=&quot;p&quot;&gt;{%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;endfor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;%}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;div class=&quot;org-center&quot;&gt;
&lt;p&gt;
Liquid snippet for generating a list of tags.
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Of course, you can find all this code in my site’s &lt;a href=&quot;https://github.com/gonsie/gonsie.github.io&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
</description>
                <pubDate>Thu, 23 Jun 2022 00:00:00 +0000</pubDate>
                <link>http://gonsie.com/blorg/tag-rss.html</link>
                <guid isPermaLink="true">http://gonsie.com/blorg/tag-rss.html</guid>
                
                <category>jekyll</category>
                
                <category>rss</category>
                
                
            </item>
        
        
        
        
        
            <item>
                <title>Jekyll Portfolio</title>
                <author>gonsie@me.com (Elsa Gonsiorowski)</author>
                <description>&lt;p&gt;So I recently learned that the future of Jekyll is, well, &lt;a href=&quot;https://www.bridgetownrb.com/future/rip-jekyll/&quot;&gt;grim&lt;/a&gt;.
I have quite the history with jekyll, I’ve been creating websites with it since 2012 (most especially this one).
To mark the end of my jekyll era, I’ve collected a portfolio of all the sites I’ve developed and contributed to.&lt;/p&gt;

&lt;p&gt;A few of them feature some clever liquid to make updating/expanding easy for others.
Here I’ve collected my portfolio of sites, all of which are still live, thanks to github and the power of static sites.
Looking over this collection, I mainly see a lot of acronyms…&lt;/p&gt;

&lt;h2 id=&quot;my-website&quot;&gt;My Website&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gonsie.com&quot;&gt;gonsie.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Converted to Jekyll site in 2012 (still in use)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://jekyllthemes.org/themes/accent/&quot;&gt;Accent&lt;/a&gt; theme by Ankit Sultana (blog)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/portfolio/portfolio-gonsie.png&quot; alt=&quot;gonsie.com screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The only real blog in my portfolio, this site has a bunch of sections and cruft left around from past projects.
Recently, I’ve created some post templates which allow me to easily post quotations and photos.&lt;/p&gt;

&lt;h2 id=&quot;ross&quot;&gt;ROSS&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://ross-org.github.io&quot;&gt;ross.cs.rpi.edu&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Launched 2013 (still in use)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://jekyllthemes.org/themes/polar-bear-theme/&quot;&gt;Polar Bear Theme&lt;/a&gt; by Camille Diez&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/portfolio/portfolio-ross.png&quot; alt=&quot;ROSS webpage screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The ROSS (Rensselaer’s Optimistic Simulation System) website hosts much of the user documentation for the simulator I worked on during graduate school.
This is/was one of my more successful sites.
My idea to build up documentation for ROSS (which was severely lacking) was to require a ‘blog post’ to the website for nearly every pull request.
Each blog post contains a jekyll tag, which places that entry in the proper section of the overall documentation table of contents.&lt;/p&gt;

&lt;h2 id=&quot;xpdes&quot;&gt;XPDES&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://xpdes.github.io&quot;&gt;xpdes.org&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2014&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://jekyllthemes.org/themes/hyde/&quot;&gt;Hyde&lt;/a&gt; theme by Mark Otto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/portfolio/portfolio-xpdes.png&quot; alt=&quot;XPDES webpage screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The Extreme Parallel Discrete-Event Simulation (PDES) was a consortium of PDES researchers from several institutions.
The site had some liquid to group ‘people’ pages by institution; the posts were for meeting agendas.
The consortium lasted until 2016.&lt;/p&gt;

&lt;h2 id=&quot;nyχ&quot;&gt;NYχ&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://nychi.github.io&quot;&gt;nychi.tech&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2016&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://jekyllthemes.org/themes/long-haul/&quot;&gt;Long Haul&lt;/a&gt; theme by Brian Maier Jr.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/portfolio/portfolio-nychi.png&quot; alt=&quot;NYχ webpage screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The New York Capitol Hackathon for Inclusivity was a hackathon I help organize in April 2016.
We needed a quick website.
This site includes some nice liquid for automatically generating the navigation menu from all pages that exist.&lt;/p&gt;

&lt;h2 id=&quot;ihpcss&quot;&gt;IHPCSS&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://ihpcss.github.io&quot;&gt;ihpcss.github.io&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2018&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://jekyllthemes.org/themes/git-wiki-for-documentation/&quot;&gt;Git-Wiki&lt;/a&gt; theme (and functionality) by Yehonal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/portfolio/portfolio-ihpcss.png&quot; alt=&quot;IHPCSS wiki screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This wiki theme is very cool with tons of functionality.
I created this site because there was a lot of information that I wanted to organize for students at the International HPC Summer School.
I hoped the wiki feature would allow other to add content, but the site was voted down by the organizing committee and the content migrated to a different system.&lt;/p&gt;

&lt;h2 id=&quot;hust&quot;&gt;HUST&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://hust-workshop.github.io&quot;&gt;hust-workshop.github.io&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;I joined in 2019 (still in use)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://jekyllthemes.org/themes/singlepaged/&quot;&gt;SinglePaged&lt;/a&gt; Theme by Tim O’Brien&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/portfolio/portfolio-hust.png&quot; alt=&quot;HUST workshop webpage screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The HUST site was initially developed by &lt;a href=&quot;https://github.com/chrisbuwahpc&quot;&gt;Chris Bording&lt;/a&gt;, but I started co-organizing the workshop (and running the website) in 2019.
This single-paged site uses post files to hold the content for each section.
Any posts from the current year (as specified by the frontmatter in the index.md) are displayed.
This allows us to easily keep the content file from previous years, without them getting in the way.&lt;/p&gt;

&lt;h2 id=&quot;psip&quot;&gt;PSIP&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bssw-psip.github.io&quot;&gt;bssw-psip.github.io&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2019&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://jekyllthemes.org/themes/cayman-theme/&quot;&gt;Cayman Theme&lt;/a&gt; by Pietro Menna&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/portfolio/portfolio-psip.png&quot; alt=&quot;PSIP webpage screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This really simple site was for a bunch of markdown documentation whcih existed on GitHub for the Productivity and Sustainability Improvement Planning software improvement process.
The coolest thing was an interactive &lt;a href=&quot;https://bssw-psip.github.io/ptc-catalog/survey.html&quot;&gt;Rate Your Project Survey&lt;/a&gt; which calculates a cumulative score for items checked off on the page (using javascript).&lt;/p&gt;

&lt;h2 id=&quot;jekyll-resume&quot;&gt;Jekyll Resume&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gonsie.com/jekyll-resume/resume.html&quot;&gt;gonsie.com/jekyll-resume/resume.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2019&lt;/li&gt;
  &lt;li&gt;A jekyll implementation of the &lt;a href=&quot;https://css-tricks.com/one-page-resume-site/&quot;&gt;One Page Resume&lt;/a&gt; by Chris Coyier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/portfolio/portfolio-resume.png&quot; alt=&quot;C&apos;thulu Resume screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I’ve used Chris Coyier’s one page resume since 2012 (slightly before I started using jekyll).
In 2019 I created a template jekyll repository which I use to teach students about markdown and static websites.
The template renders a resume written in markdown to a nice one page resume website.
This site is really a demonstration of my markdown and css skills (rather than jekyll or liquid).&lt;/p&gt;
</description>
                <pubDate>Fri, 17 Dec 2021 00:00:00 +0000</pubDate>
                <link>http://gonsie.com/blorg/jekyll-portfolio.html</link>
                <guid isPermaLink="true">http://gonsie.com/blorg/jekyll-portfolio.html</guid>
                
                <category>jekyll</category>
                
                
            </item>
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
            <item>
                <title>Developing ox-jekyll</title>
                <author>gonsie@me.com (Elsa Gonsiorowski)</author>
                <description>&lt;p&gt;In a previous post, I &lt;a href=&quot;./survey-org-jekyll.md&quot;&gt;surveyed existing org and jekyll&lt;/a&gt; integration workflows.
This survey found two common approaches, one that is Jekyll-centric and one that uses Org-publish (Emacs-centric).
Unfortunately, neither fit with my workflow and I decided to develop my own Org exporter.&lt;/p&gt;

&lt;p&gt;I finally have some functioning code, so I figured I should share details about the project and the development process.
You can find the project &lt;a href=&quot;https://github.com/gonsie/ox-jekyll&quot;&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;starting-point&quot;&gt;Starting Point&lt;/h2&gt;

&lt;p&gt;In &lt;a href=&quot;http://www.gonsie.com/blorg/survey-org-jekyll.html&quot;&gt;my survey&lt;/a&gt; I found some useful resources:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The Worg Documentation on &lt;a href=&quot;https://orgmode.org/worg/dev/org-export-reference.html&quot;&gt;Org Export Engine&lt;/a&gt;;&lt;/li&gt;
  &lt;li&gt;An existing ox-jekyll in &lt;a href=&quot;https://github.com/yoshinari-nomura/org-octopress&quot;&gt;org-octopress&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Great artists steal.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I want everything that org-octopress is doing with it’s jekyll exporter, I just want it built on markdown instead of HTML.&lt;/p&gt;

&lt;p&gt;So, I’ve copied &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ox-jekyll.el&lt;/code&gt; and replaced “html” with “md”.
After fixing a few function names, it works!&lt;/p&gt;

&lt;p&gt;Most importantly, the front matter is in the right spot (with and without a table of contents).
The next step is to make this work with the particulars of my publishing workflow.&lt;/p&gt;

&lt;h2 id=&quot;my-publishing-workflow-details&quot;&gt;My Publishing Workflow Details&lt;/h2&gt;

&lt;p&gt;There are a number of things I want my exporter to accomplish.
Many of which are particular to my workflow.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I use a single org file per post.&lt;/li&gt;
  &lt;li&gt;Upon export, the date (YYYY-MM-DD) should get added to the file name.&lt;/li&gt;
  &lt;li&gt;Subtree level matches export heading level (this is just how I design my site’s CSS)&lt;/li&gt;
  &lt;li&gt;Code snippets should be easy to export with appropriate syntax.
This is where many markdown converters differ, but jekyll currently wraps code blocks with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{ % highlight LANG %}&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{ % endhighlight %}&lt;/code&gt;.
[Ignore the extra space before the %]&lt;/li&gt;
  &lt;li&gt;Jekyll front matter should be added above org-inserted table of contents.
The manual HTML source block is just hideous.&lt;/li&gt;
  &lt;li&gt;It should be easy to move the generated file to a separate location (I think this addressed in the org-publish workflow).&lt;/li&gt;
  &lt;li&gt;Org-y way to add tags to the post.&lt;/li&gt;
  &lt;li&gt;Safe export of title (colon character mucks things up for Jekyll).&lt;/li&gt;
  &lt;li&gt;Fix up links and export connected images.
This one is really a nice to have, not necessary.&lt;/li&gt;
  &lt;li&gt;TOC should be an ordered list (with the option to make it unordered)
WTF is the HTML exporter doing making it an unordered list with numbers in the text.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many of these are solved with code from org-octopress, particularly the yaml front matter.&lt;/p&gt;

&lt;h2 id=&quot;implementing-features&quot;&gt;Implementing Features&lt;/h2&gt;

&lt;p&gt;Here are some notes on my implementation.&lt;/p&gt;

&lt;h3 id=&quot;thinking-about-the-table-of-contents&quot;&gt;Thinking about the Table of Contents&lt;/h3&gt;

&lt;p&gt;I had been including a table of contents at the top of each of my posts.
I didn’t actually label it with “table of contents” and I prefer an un-numbered list.
This seems to be very contrary to what the org-exporter likes to do.
It pretty much does not allow for any fine-grained control of how the table of contents appears.&lt;/p&gt;

&lt;p&gt;While I was able to get the code to do what I wanted, it ended up being way too much of a hack.
In the end, I’ve decided that I don’t want a table of contents at all.
Really, it will be up to the markdown / jekyll / liquid parser to create a TOC if necessary.
This makes it easy to apply separate HTML styles to the TOC (to put it in a sidebar or something).&lt;/p&gt;

&lt;h3 id=&quot;preserving-the-headline-level&quot;&gt;Preserving the Headline Level&lt;/h3&gt;

&lt;p&gt;I would like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:headline-offset&lt;/code&gt; (as described &lt;a href=&quot;https://orgmode.org/worg/dev/org-export-reference.html&quot;&gt;here&lt;/a&gt;) to work on a file level.
This allows me to make sure the contents of my post match up the CSS on the web site (the content’s final destination).
This is definitely a more markdown-y way to do things rather than the org way.&lt;/p&gt;

&lt;p&gt;Unfortunately, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:headline-offset&lt;/code&gt; option is only supported per subtree.
I can hack it with a simple function that adds an “offset by 0” property to each subtree:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-elisp&quot; data-lang=&quot;elisp&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;org-jekyll-headline-offset&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;headline&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;contents&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;&quot;proper headline offset&quot;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;let*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;info&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;plist-put&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;info&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:headline-offset&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;org-md-headline&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;headline&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;contents&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;I add it to the derived backend &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:translate-alist&lt;/code&gt; like so:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-elisp&quot; data-lang=&quot;elisp&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;org-export-define-derived-backend&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;&apos;jekyll&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;&apos;md&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;;; ...&lt;/span&gt;
  &lt;span class=&quot;ss&quot;&gt;:translate-alist&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;headline&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;org-jekyll-headline-offset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;;; ...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Now, this function is called each time a headline is translated by the export engine and my headline level is directly translated to markdown.&lt;/p&gt;

&lt;h3 id=&quot;setting-the-date&quot;&gt;Setting the Date&lt;/h3&gt;

&lt;p&gt;I have a strange workflow where I want the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#+DATE:&lt;/code&gt; tag to be the day I started working on a post and the date in the filename to be the day I hit publish.
For my exporter, I can use the option &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;date:&lt;/code&gt; to trigger this behavior.
The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;date:&lt;/code&gt; option takes precedence over the variable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org-export-with-date&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;While I would like my code to support putting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#+DATE:&lt;/code&gt; property into the filename, this seems impossible with the export engine.
The date property is stored in the info plist which I don’t have access to at file naming time.&lt;/p&gt;

&lt;p&gt;Instead, I’ve implemented this functionality:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;date:&lt;/code&gt; option controls if the value of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#+DATE&lt;/code&gt; property is put into the Jekyll front matter.&lt;/li&gt;
  &lt;li&gt;I’ve added a new option to the exporter: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org-jekyll-use-today-date&lt;/code&gt;.
If &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t&lt;/code&gt;, the exporter will prepend the filename with today’s date.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;results&quot;&gt;Results&lt;/h2&gt;

&lt;p&gt;I’m quite happy with my exporter, I even used it to export this post!
I still need to figure out how to use the org-publish workflow, but for now I can successfully export my blog posts.&lt;/p&gt;

&lt;p&gt;As with most of my projects, you can find it &lt;a href=&quot;http://github.com/gonsie/ox-jekyll&quot;&gt;on GitHub&lt;/a&gt;.
Please feel free to file an issue and share any feed back you have.&lt;/p&gt;
</description>
                <pubDate>Sat, 12 May 2018 00:00:00 +0000</pubDate>
                <link>http://gonsie.com/blorg/ox-jekyll.html</link>
                <guid isPermaLink="true">http://gonsie.com/blorg/ox-jekyll.html</guid>
                
                <category>emacs</category>
                
                <category>org</category>
                
                <category>blog</category>
                
                <category>jekyll</category>
                
                
            </item>
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    </channel>
</rss>
