<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" >

  <title>Erik L. Arneson — Writer and Software Developer</title>
  <subtitle>Erik L. Arneson is a freelance writer and software developer with WordPress experience. He is located in Portland, Oregon.</subtitle>
  <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator>
  <link href="https://arnesonium.com/feeds/org-mode.xml" rel="self" type="application/atom+xml" />
  <link href="https://arnesonium.com/" rel="alternate" type="text/html" />
  <updated>2026-06-18T15:03:10+00:00</updated>
  <id>https://arnesonium.com/feeds/org-mode.xml</id>
  <author>
    <name>Erik L. Arneson</name>
  </author>
      <entry>
        
        <title>Emacs as the Freelancer&apos;s Command Center</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2026/04/emacs-freelance-command-center" rel="alternate" type="text/html" title="Emacs as the Freelancer's Command Center" />
        <updated>2026-04-10T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2026/04/emacs-freelance-command-center</id>
          <category term="emacs" />
        
          <category term="org-mode" />
        
          <category term="programming" />
        
          <category term="writing" />
        
          <category term="music" />
        
          <category term="wordpress" />
        
          <category term="emacs-lisp" />
        
          <category term="email" />
        
          <category term="git" />
        
          <category term="tools" />
        <content type="html" xml:base="https://arnesonium.com/2026/04/emacs-freelance-command-center">&lt;p&gt;Freelancing for small businesses and organizations leads to a position where you are juggling a
number of projects for multiple clients. You need to keep track of a number of tasks ranging from
software development to sending emails to project management. This is a lot easier when you have a
system that can do a bunch of the work for you, which is why I use Emacs as my freelancer command
center.&lt;/p&gt;

&lt;p&gt;I would like to share some of the tools and workflows I use in Emacs to help me keep on top of
multiple clients’ needs and expectations.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;organization-with-org-mode&quot;&gt;Organization with org-mode&lt;/h2&gt;

&lt;p&gt;It should be no surprise that at the center of my Emacs command center is &lt;a href=&quot;https://orgmode.org/&quot;&gt;org-mode&lt;/a&gt;. I have already
&lt;a href=&quot;/tags/org-mode/&quot;&gt;written about it a lot&lt;/a&gt;. Every org-mode user seems to have their own way of keeping track of things,
so please don’t take my organizational scheme as some kind of gospel. A couple of years ago, I wrote
about &lt;a href=&quot;/2024/10/todo-lists-in-org-mode&quot;&gt;how I handle to-do lists in org-mode&lt;/a&gt;, and I am still using that method for to-do keywords.
However, file structure is also important. I have a number of core files.&lt;/p&gt;

&lt;h3 id=&quot;freelanceorg&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Freelance.org&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;This top-level file contains all of my ongoing business tasks, such as tracking potential new
clients, recurring tasks like website maintenance and checking my &lt;a href=&quot;https://mainwp.com/&quot;&gt;MainWP dashboard&lt;/a&gt;. I also have
recurring tasks for invoicing, tracking expenses, and other important business things.&lt;/p&gt;

&lt;p&gt;This file is also where I have my primary time tracking and reporting. Org-mode already supports
this pretty nicely, I just use the built-in &lt;a href=&quot;https://orgmode.org/manual/The-clock-table.html&quot;&gt;clocktable feature&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;clientsorg&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Clients/*.org&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Clients that have large projects or ongoing business get their own file. This makes organization a
lot easier. All tasks associated with a client and their various projects end up in these individual
files. The important part is making sure that these files are included in the time-tracking
clock table &lt;em&gt;and&lt;/em&gt; your org-mode agenda, so you can see what is going on every week.&lt;/p&gt;

&lt;h3 id=&quot;references-and-linking&quot;&gt;References and Linking&lt;/h3&gt;

&lt;p&gt;I have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C-c l&lt;/code&gt; bound to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org-store-link&lt;/code&gt; and use it all the time to link to various files,
directories, URLs, and even emails. I can then use those links in my client notes, various tasks in
my to-do list, and so on. This helps me keep my agenda organized even when my filesystem and
browser bookmarks are a bit of a mess.&lt;/p&gt;

&lt;h2 id=&quot;email-with-mu4e&quot;&gt;Email with mu4e&lt;/h2&gt;

&lt;p&gt;I have been reading and managing my email in Emacs for over 25 years. There have been a few breaks
here and there where I have tried out other software or even web mail clients, but it has always been
a headache. I return to Emacs! Long ago, I used &lt;a href=&quot;https://gitlab.com/emacs-vm/vm&quot;&gt;VM&lt;/a&gt; (which seems to have taken on new life!), but
currently I use &lt;a href=&quot;https://djcbsoftware.nl/code/mu/mu4e/index.html&quot;&gt;mu4e&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This gives me a ton of power and flexibility when dealing with email. I have custom functions to
help me compose and organize my email, and I can use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org-store-link&lt;/code&gt; to keep track of individual
emails from clients as they relate to agenda items. I even have a function to convert emails that I
have written in Markdown into HTML email, and one that searches for questions in a client email to
make sure I haven’t missed anything.&lt;/p&gt;

&lt;p&gt;The ability to write custom code to both process and create email is extremely powerful and a great
time saver.&lt;/p&gt;

&lt;h2 id=&quot;writing-code&quot;&gt;Writing Code&lt;/h2&gt;

&lt;p&gt;I don’t know what else to say about this, I use Emacs for doing all of my software development. I
make sure to use &lt;a href=&quot;https://github.com/joaotavora/eglot&quot;&gt;Eglot&lt;/a&gt; whenever there is a language server available, and I try to leverage all the
fancy features offered by Emacs whenever possible. The vast majority of projects for clients are PHP
(thanks &lt;a href=&quot;/wordpress/&quot;&gt;WordPress&lt;/a&gt;), Go, JavaScript, and TypeScript.&lt;/p&gt;

&lt;h2 id=&quot;writing-words&quot;&gt;Writing Words&lt;/h2&gt;

&lt;p&gt;Previously, I have shared quite a bit about &lt;a href=&quot;/tags/writing/&quot;&gt;writing in Emacs&lt;/a&gt;. I like to start everything in
org-mode, but I also write quite a bit in Markdown. Emacs has become a powerful tool for writing. I
use the &lt;a href=&quot;https://writewithharper.com/&quot;&gt;Harper language server&lt;/a&gt; along with Eglot to check grammar and spelling.&lt;/p&gt;

&lt;h2 id=&quot;track-all-changes-with-magit&quot;&gt;Track All Changes with Magit&lt;/h2&gt;

&lt;p&gt;Version control is essential, a lesson I have learned over 30+ years of software development. While
&lt;a href=&quot;https://git-scm.com/&quot;&gt;Git&lt;/a&gt; is not part of Emacs, the software I use to interface with Git is. &lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt; is a Git user interface
that runs entirely in Emacs. I use it to track my writing, my source code, and even all of my
org-mode files. Using version control is so essential that I have a weekly repeating agenda task
reminding me to check all of my everyday files to make sure I have checked-in my changes for the
week.&lt;/p&gt;

&lt;h2 id=&quot;thinking-music-with-emms&quot;&gt;Thinking Music with EMMS&lt;/h2&gt;

&lt;p&gt;I like to have some soothing background music when I am programming, writing, or otherwise working
on my computer. However, if that background music has lyrics, it can be really distracting. It is
easy to make a playlist for various suitable &lt;a href=&quot;https://somafm.com/&quot;&gt;SomaFM&lt;/a&gt; channels to load into &lt;a href=&quot;https://www.gnu.org/software/emms/&quot;&gt;EMMS (the Emacs Multimedia
System)&lt;/a&gt; using the command &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;M-x emms-play-playlist&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Try saving the following into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;playlist.el&lt;/code&gt; somewhere, and using it the next time you are writing:&lt;/p&gt;

&lt;div class=&quot;language-emacs-lisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; &lt;span class=&quot;c1&quot;&gt;;;; This is an EMMS playlist file Play it with M-x emms-play-playlist&lt;/span&gt;
 &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;vg&quot;&gt;*track*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;url&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;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;https://somafm.com/synphaera.pls&quot;&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;vg&quot;&gt;*track*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;url&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;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;https://somafm.com/gsclassic.pls&quot;&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;vg&quot;&gt;*track*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;url&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;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;https://somafm.com/sonicuniverse.pls&quot;&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;vg&quot;&gt;*track*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;url&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;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;https://somafm.com/groovesalad.pls&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And make sure to check out SomaFM’s selection to find some good background music that suits your
tastes!&lt;/p&gt;

&lt;h2 id=&quot;and-the-tools-i-have-missed&quot;&gt;And the tools I have missed&lt;/h2&gt;

&lt;p&gt;There are undoubtedly Emacs tools that I have missed in this brief overview. I have been wracking my
brain as I write, trying to see what I have forgotten or overlooked. Frankly, Emacs has become such
a central part of the organization for my freelancing that there are probably many tools, packages,
and processes that I use every day without thinking about it too much.&lt;/p&gt;

&lt;p&gt;Emacs makes it possible for me to freelance for multiple clients and small businesses without losing
my mind with organization and task management. The tools it provides allow me to stay on top of
multiple projects, handle client relationships, and keep track of years worth of tasks,
communications, and projects. Without it, I’d be sunk!&lt;/p&gt;

&lt;p&gt;What Emacs tools are you using to manage your freelance business? I am always looking for ways to
improve or streamline my process.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The featured image for this post comes from Agostino Ramelli’s&lt;/em&gt; Le diverse et artificiose machine &lt;em&gt;(1588). &lt;a href=&quot;https://publicdomainreview.org/collection/agostino-ramelli-theatre-of-machines/&quot;&gt;Read more about it on the Public Domain Review.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Interviewed on &quot;Prot Speaks&quot;</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2025/08/interviewed-on-prot-speaks" rel="alternate" type="text/html" title="Interviewed on "Prot Speaks"" />
        <updated>2025-08-18T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2025/08/prot-speaks-interview</id>
          <category term="emacs" />
        
          <category term="podcast" />
        
          <category term="programming" />
        
          <category term="org-mode" />
        
          <category term="lisp" />
        
          <category term="golang" />
        
          <category term="portland" />
        <content type="html" xml:base="https://arnesonium.com/2025/08/interviewed-on-prot-speaks">&lt;p&gt;Well-known Emacs package creator Protesilaos Stavrou interviewed me for his video podcast series, “Prot Asks.” We talked about a wide variety of topics, from Emacs to podcasting to Portland to public transit. I thought it was a great time, and perhaps you will like it, too!&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;You can read and view the video &lt;a href=&quot;https://protesilaos.com/codelog/2025-08-17-prot-asks-erik-emacs-1990s-portland-oregon-podcasting/&quot;&gt;on Prot’s website and blog&lt;/a&gt;, or you can go &lt;a href=&quot;https://www.youtube.com/watch?v=6wkfFdiwpyU&quot;&gt;straight to YouTube&lt;/a&gt;, or you can watch it embedded here below.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/6wkfFdiwpyU?si=ocNz3f6ehqEYYC2G&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Note that Prot is looking for people to talk to on this series! You can join in by &lt;a href=&quot;https://protesilaos.com/prot-asks/&quot;&gt;signing up on his website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;P.S. In the video, I promised that I would do another Emacs Carnival blog post, and I will, I swear! It is in my org-mode to-do file.&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Writing Experience (Emacs Carnival)</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2025/07/writing-experience-emacs-carnival" rel="alternate" type="text/html" title="Writing Experience (Emacs Carnival)" />
        <updated>2025-07-07T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2025/07/writing-experience</id>
          <category term="emacs" />
        
          <category term="writing" />
        
          <category term="org-mode" />
        <content type="html" xml:base="https://arnesonium.com/2025/07/writing-experience-emacs-carnival">&lt;p&gt;This is my contribution to month two of &lt;a href=&quot;https://gregnewman.io/blog/emacs-carnival-2025-07-writing-experience/&quot;&gt;Greg Newman’s Emacs Carnival&lt;/a&gt;. The topic this month is “Writing Experience,” which is perfect, since I write in Emacs all the time. In fact, I am writing this blog post in Emacs right now!
&lt;!--more--&gt;&lt;/p&gt;

&lt;h2 id=&quot;emacs-writing-history&quot;&gt;Emacs Writing History&lt;/h2&gt;

&lt;p&gt;I do not know how long I have been writing in Emacs, but I have documents written in LaTeX from the early 2000s that were definitely written in Emacs, and I know those weren’t the first. I guess what is interesting about my writing experience in Emacs is how it has developed over the years. Where I originally wrote everything in plain text or LaTeX, over time I moved to org-mode and Markdown.&lt;/p&gt;

&lt;p&gt;Writing LaTeX in Emacs taught me to view documents and writing the same way I view source code. Since all of my writing was in text formats, I could easily use version control software to store archives full of text. I began by using &lt;a href=&quot;https://en.wikipedia.org/wiki/Concurrent_Versions_System&quot;&gt;Concurrent Versions System (CVS)&lt;/a&gt;, but eventually moved to Git. I have a few Git repositories with writing, but my biggest dates back to 2009. Those early commits are all LaTeX and plain text files.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;commit c64500897e2509bc3316d252cda10a9119384933
Author: Erik L. Arneson &amp;lt;pXXX@XXX.XXX&amp;gt;
Date:   Sat Dec 5 10:51:06 2009 -0800

    Initial import of an old repository.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The oldest org-mode file in my writing repository dates to December 27th, 2010, and is titled “Beer and Pizza.” The commit message indicates that I pulled some writing over from another repository in this commit, so obviously I had been writing with org-mode for quite a while. I know, for instance, that “Beer and Pizza” was an article that I wrote for an early incarnation of &lt;a href=&quot;https://southernoregonmagazine.com/&quot;&gt;Southern Oregon Magazine&lt;/a&gt;, and my notes are dated back to February of that year.&lt;/p&gt;

&lt;h2 id=&quot;org-mode-is-a-life-changer&quot;&gt;Org-mode Is A Life-changer&lt;/h2&gt;

&lt;p&gt;You have probably read other people’s experience with writing in org-mode in Emacs, so instead of sharing an exhausting list of all the life-changing, writing-improving things that it has brought me, here are a few bits that I really love about it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is fantastic at organizing writing projects.&lt;/strong&gt; From being able to shift around headings and blocks of text, to combining to-do lists with writing projects, to being able to create macros and include different files—all of these things make org-mode perfect for working on medium and large projects. I write everything from blog posts to podcast scripts to &lt;em&gt;books&lt;/em&gt; in org-mode, and it helps me stay organized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I do not have to write in Word or Google Docs.&lt;/strong&gt; The export functions in org-mode do a great job creating Word files, ODT files, HTML files, and all kinds of formats. If org-mode’s export abilities aren’t good enough, it can also interface with &lt;a href=&quot;https://pandoc.org/&quot;&gt;pandoc&lt;/a&gt; to cover all the other cases! This means I get to use all of my familiar tools and processes when writing, and I don’t have to worry about &lt;a href=&quot;https://lions-way-presents.captivate.fm/episode/the-word-processor-war/&quot;&gt;awful word processing software&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Everything I need to write can happen in org-mode!&lt;/strong&gt; I have several websites that are built entirely out of org-mode. When I need to create slides for a lecture, I do it in org-mode. When I write adventures for Dungeons &amp;amp; Dragons, I do it in org-mode. When I need to whip up a spreadsheet to handle my household budget, I do it in org-mode. When I need to write a formal letter, I do it in org-mode. Frankly, it is so expressive and flexible, that I don’t need to use other tools for writing. It’s all Emacs and org-mode.&lt;/p&gt;

&lt;h2 id=&quot;emacs-can-be-distraction-free&quot;&gt;Emacs Can Be Distraction-Free&lt;/h2&gt;

&lt;p&gt;I have a hotkey connected to &lt;a href=&quot;https://github.com/joostkremers/writeroom-mode&quot;&gt;writeroom-mode&lt;/a&gt;, which plonks me right into a full-screen, distraction-free writing mode. Easy as pie! This means that when I really need to get down to business and get a lot of writing done, I don’t need to switch to a new app, leave my familiar tools behind, or go through any extra trouble. It’s just right here, built in.&lt;/p&gt;

&lt;h2 id=&quot;no-going-back&quot;&gt;No Going Back&lt;/h2&gt;

&lt;p&gt;I’ve been writing with Emacs for decades. It is my comfortable writing spot. I honestly cannot see myself abandoning it for another writing tool, because it works for me. I just used a couple of commands to check my three biggest writing repositories, and I have approximately 630,000 words written in org-mode between them. That’s a commitment!&lt;/p&gt;

&lt;p&gt;I am aware that there are a lot of people out there using Emacs for writing, so I am excited to see what others share. I’m very pleased with Greg Newman’s choice for this second writing topic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; I realized that what I was calling my second biggest writing repository was actually my third biggest. I updated some numbers to reflect another 130,000 words of writing I found.&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Configuring Orgzly Interaction with Directory Local Variables</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2025/01/configuring-orgzly-with-directory-local-variables" rel="alternate" type="text/html" title="Configuring Orgzly Interaction with Directory Local Variables" />
        <updated>2025-01-28T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2025/01/directory-local-with-orgzly</id>
          <category term="emacs" />
        
          <category term="org-mode" />
        
          <category term="howto" />
        <content type="html" xml:base="https://arnesonium.com/2025/01/configuring-orgzly-with-directory-local-variables">&lt;p&gt;I use &lt;a href=&quot;https://github.com/orgzly-revived/orgzly-android-revived&quot;&gt;Orgzly Revived&lt;/a&gt; on my phone to capture to-do items, tasks, writing ideas, and projects. Its files are then synced with an ownCloud server. Those same files are also constantly open in Emacs on my computer, which means there can be some gnarly issues with things getting out of sync. It took me a while to figure out a good way to manage this, and in this brief blog post, I would like to share my solution.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Setting up a remote storage system is outside the scope of this server. Orgzly Revived works well with Dropbox, ownCloud, and nextCloud, though support for the other two is nicer as it can support automatic syncing in more situations. The &lt;a href=&quot;https://github.com/orgzly-revived/documentation&quot;&gt;Orgzly Revived documentation&lt;/a&gt; has an excellent description of how that configuration works.&lt;/p&gt;

&lt;p&gt;Note that to keep things simple, I keep my Orgzly Revived files and &lt;em&gt;only&lt;/em&gt; those files in a directory on my remote server. On my computer, the location for these files is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/org/orgzly/&lt;/code&gt;, which is how I shall refer to it later on.&lt;/p&gt;

&lt;h2 id=&quot;configuring-orgzly-revived-auto-sync&quot;&gt;Configuring Orgzly Revived Auto-sync&lt;/h2&gt;

&lt;p&gt;To configure the auto-sync capabilities in Orgzly Revived, go to the settings screen in the app and then navigate to &lt;strong&gt;Sync &amp;gt; Auto-sync&lt;/strong&gt;. Ensure that the following options are toggled on:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Auto-sync&lt;/li&gt;
  &lt;li&gt;Note created&lt;/li&gt;
  &lt;li&gt;Note updated or deleted&lt;/li&gt;
  &lt;li&gt;App started or resumed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures that Orgzly Revived is constantly checking your remote storage and both fetching and uploading changes.&lt;/p&gt;

&lt;h2 id=&quot;configuring-emacs-and-org-mode&quot;&gt;Configuring Emacs and Org-mode&lt;/h2&gt;

&lt;p&gt;On my computer, I want any changes that Orgzly Revived has updated to be automatically loaded into Emacs. Since I always leave Emacs running, that means it needs to detect changes on the disk for those particular files. I use two different methods to do this. First, in my init file, I have the following piece of code:&lt;/p&gt;

&lt;div class=&quot;language-lisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;setq&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;orgzly-directory&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;expand-file-name&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;~/org/orgzly/&quot;&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;add-to-list&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;&apos;revert-without-query&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;rx&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;bol&lt;/span&gt; 
                                       &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;eval&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;orgzly-directory&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;nb&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;.org&quot;&lt;/span&gt; 
                                       &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This uses the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rx&lt;/code&gt; macro to easily create a regular expression that matches any filename ending in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;.org&quot;&lt;/code&gt; in the directory containing Orgzly Revived files. You may need to play around with the regular expression to get the right match. By adding those files to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;revert-without-query&lt;/code&gt;, Emacs will not bug you with extra questions and confirmations when changes are detected. However, this only works when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-revert-mode&lt;/code&gt; is enabled!&lt;/p&gt;

&lt;p&gt;At first, I thought there may be a way to enable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-revert-mode&lt;/code&gt; on a file-by-file basis, but quickly realized that this could cause too many problems with creating new files in the Orgzly Revived app. Eventually, I realized that the solution would be to make a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.dir-locals.el&lt;/code&gt; file in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/org/orgzly/&lt;/code&gt;. Open that file in Emacs, and stick the following in it.&lt;/p&gt;

&lt;div class=&quot;language-lisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;nil&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;nb&quot;&gt;eval&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;nv&quot;&gt;auto-revert-mode&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That ensures that any file in that directory will have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-revert-mode&lt;/code&gt; enabled.&lt;/p&gt;

&lt;p&gt;Once you have done this, you can add task files or inbox files in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/org/orgzly&lt;/code&gt; to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org-agenda-files&lt;/code&gt; variable, and they will show up in your agenda views as usual.&lt;/p&gt;

&lt;p&gt;Hopefully these instructions work for you. Please let me know if you can see any improvements or problems with the way I have implemented this. Happy task tracking!&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Examining To-Do Lists in Org-mode</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2024/10/todo-lists-in-org-mode" rel="alternate" type="text/html" title="Examining To-Do Lists in Org-mode" />
        <updated>2024-10-22T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2024/10/todo-lists</id>
          <category term="emacs" />
        
          <category term="org-mode" />
        
          <category term="tools" />
        <content type="html" xml:base="https://arnesonium.com/2024/10/todo-lists-in-org-mode">&lt;p&gt;When you are self-employed, you need to be very well organized. There is never anybody looking over your shoulder, reminding you of everything on your to-do list. You don’t have a project manager reminding you of every step in your big projects. I use &lt;a href=&quot;https://orgmode.org/&quot;&gt;Org-mode&lt;/a&gt; in Emacs to manage all of my tasks, to-do lists, and projects.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Many people have already &lt;a href=&quot;https://www.badykov.com/emacs/be-productive-with-org-mode/&quot;&gt;written about&lt;/a&gt; &lt;a href=&quot;https://medium.com/emacs/how-i-tackle-projects-with-org-mode-ee5d6b08f41&quot;&gt;why Org-mode&lt;/a&gt; &lt;a href=&quot;https://dl.acm.org/doi/fullHtml/10.5555/1344170.1344179&quot;&gt;is a good choice&lt;/a&gt; &lt;a href=&quot;https://karl-voit.at/orgmode/&quot;&gt;for this&lt;/a&gt;, so I am not going to. I will just mention that many years ago, perhaps around 2007, I read &lt;a href=&quot;https://amzn.to/3YgIo6j&quot;&gt;&lt;em&gt;Getting Things Done&lt;/em&gt; by David Allen&lt;/a&gt; and got inspired to implement something like it in Org-mode. The system has slowly evolved over the years, but it has also become unweildy.&lt;/p&gt;

&lt;p&gt;For the past few years, I had been tagging my tasks with the states &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TODO&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NEXT&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DONE&lt;/code&gt;, primarily. I had some extra states sitting around for things that got canceled or delegated, and at some point I added a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WAITING&lt;/code&gt; tag for when I needed somebody else to finish something, first. But the problem was, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TODO&lt;/code&gt; items really piled up. They became uncomfortable to sort through.&lt;/p&gt;

&lt;p&gt;Inspired by a &lt;a href=&quot;https://sachachua.com/blog/2024/10/shuffling-my-org-mode-unscheduled-tasks/&quot;&gt;blog post by Sacha Chua&lt;/a&gt; earlier this week, I cleaned up my to-do states. I added &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;STARTED&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SOMEDAY&lt;/code&gt;, then went through the big list of outstanding items and re-evaluated their proper states. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SOMEDAY&lt;/code&gt; won in 80% of cases, which really cleaned up the list. Now I can begin my day with a custom agenda command that looks for just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NEXT&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;STARTED&lt;/code&gt; tasks, so I know what is most important. And I can end my day looking at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TODO&lt;/code&gt; tasks to see if any should be switched to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NEXT&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here is what my configuration looks like now. First, I configure &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org-todo-keywords&lt;/code&gt; to handle the various states that my to-do items need. I am hoping that someday I’ll pare this down, but for now, this works.&lt;/p&gt;

&lt;div class=&quot;language-emacs-lisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;setq&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;org-todo-keywords&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;nc&quot;&gt;sequence&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;TODO(t)&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;NEXT(n)&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;STARTED(s!)&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;WAITING(w@/!)&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;|&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;DONE(d!)&quot;&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;nc&quot;&gt;sequence&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;SOMEDAY(o)&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;|&quot;&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;nc&quot;&gt;sequence&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;|&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;DELEGATED(g@/!)&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;CANCELLED(c!)&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I then added a “daily driver” command to my agenda to let me see the most important tasks today. This would probably be a good place for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add-to-list&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;setq&lt;/code&gt;, but it’s just an example!&lt;/p&gt;

&lt;div class=&quot;language-emacs-lisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;setq&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;org-agenda-custom-commands&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;s&quot;&gt;&quot;n&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Next tasks&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;todo&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;STARTED&quot;&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;todo&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;NEXT&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next, after Sacha suggested it in a post on Mastodon, I configured to-do items to automatically switch to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;STARTED&lt;/code&gt; state when I clock-in to them.&lt;/p&gt;

&lt;div class=&quot;language-emacs-lisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;setq&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;org-clock-in-switch-to-state&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;STARTED&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Finally, I have been playing around with configuring &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org-stuck-projects&lt;/code&gt; to be more useful. I tag all of my projects with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@project&lt;/code&gt; tag, and then have my to-do entries underneath them as keywords. I do not think that this works as intended yet. I don’t think I will be able to figure out the proper settings here until I have another stuck project; let’s hope that never happens, and I never need this report.&lt;/p&gt;

&lt;div class=&quot;language-emacs-lisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;setq&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;org-stuck-projects&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;s&quot;&gt;&quot;+@project/-DONE-SOMEDAY&quot;&lt;/span&gt;
                          &lt;span class=&quot;c1&quot;&gt;;; Keywords to identify non-stuck projects&lt;/span&gt;
                          &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TODO&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;NEXT&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;STARTED&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                          &lt;span class=&quot;c1&quot;&gt;;; Keywords to identify stuck projects.&lt;/span&gt;
                          &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;WAITING&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                          &lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The only lesson that I can really hope to share with you, dear reader, is that it is a good idea to examine your task management system regularly to fine-tune it to your needs. What I have noticed is that I can come up with great task management plans, but the implementation rarely survives contact with the real world.&lt;/p&gt;

&lt;p&gt;If, upon reading this, you have questions or suggestions, especially for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org-stuck-projects&lt;/code&gt;, I would love to hear about it in the comments, or &lt;a href=&quot;https://fosstodon.org/@pymander&quot;&gt;on Mastodon&lt;/a&gt;. Thank you for reading!&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Update: Org to DOCX with Citations</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2023/06/org-to-docx-with-citations" rel="alternate" type="text/html" title="Update: Org to DOCX with Citations" />
        <updated>2023-06-20T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2023/06/org-docx-citations</id>
          <category term="org-mode" />
        
          <category term="pandoc" />
        
          <category term="emacs" />
        
          <category term="writing" />
        <content type="html" xml:base="https://arnesonium.com/2023/06/org-to-docx-with-citations">&lt;p&gt;Last year, I wrote about &lt;a href=&quot;/2022/10/org-mode-to-docx-pipeline&quot;&gt;converting Org to DOCX with pandoc&lt;/a&gt;. Well, that particular method has needed some improvements. I needed to also support converting Markdown files, and more vitally, I needed to support the new-ish &lt;a href=&quot;https://orgmode.org/manual/Citation-handling.html&quot;&gt;org-cite citation format&lt;/a&gt;.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;The first thing I did was update to the &lt;a href=&quot;https://pandoc.org/installing.html&quot;&gt;latest version of Pandoc&lt;/a&gt;. Next, I had to learn how &lt;a href=&quot;https://pandoc.org/MANUAL.html#citations&quot;&gt;Pandoc’s citations&lt;/a&gt; work. Note that you have to enable the &lt;a href=&quot;https://pandoc.org/MANUAL.html#org-citations&quot;&gt;citations extension&lt;/a&gt; as well.&lt;/p&gt;

&lt;p&gt;For citations to work, you need to have a &lt;a href=&quot;https://docs.citationstyles.org/en/stable/specification.html&quot;&gt;Citation Style Language&lt;/a&gt; (CSL) file. Zotero comes with a ton of them, so check your Zotero installation for examples.&lt;/p&gt;

&lt;p&gt;In the updated fish shell function below, you will want to update both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;refdoc&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;csldoc&lt;/code&gt; to point to your reference DOCX file and your CSL file, respectively.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-fish&quot;&gt;function org2docx --description &apos;Generate a DOCX file using a custom reference document&apos;
    set -l refdoc &quot;$PATH_TO_REFERENCE_DOCX&quot;
    set -l csldoc &quot;$PATH_TO_CSL&quot;
    set -l fromfmt (string match -r &apos;(?:org|md)$&apos; $argv)
    set -l base (basename -s .$fromfmt $argv)

    echo Generating $base.docx ...

    pandoc --from &quot;$fromfmt&quot;+citations \
        --citeproc --csl $csldoc \
        --reference-doc $refdoc -o $base.docx $argv
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And there you have it! Now you can convert both Org files and Markdown files to DOCX. And I am sorry that you have to use DOCX!&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>An Org-mode to DOCX Pipeline</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2022/10/org-mode-to-docx-pipeline" rel="alternate" type="text/html" title="An Org-mode to DOCX Pipeline" />
        <updated>2022-10-26T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2022/10/org-to-docx</id>
          <category term="org-mode" />
        
          <category term="pandoc" />
        
          <category term="emacs" />
        
          <category term="writing" />
        <content type="html" xml:base="https://arnesonium.com/2022/10/org-mode-to-docx-pipeline">&lt;p&gt;Freelance writers need to deliver documents in the format requested by clients. However, frequently
the requested format is not the writer’s preferred working format. I like to write in Org Mode, but
many clients prefer delivery in Microsoft Word’s DOCX format.&lt;/p&gt;

&lt;p&gt;This is how I generate DOCX files for my clients.
&lt;!--more--&gt;&lt;/p&gt;

&lt;h2 id=&quot;what-is-org-mode&quot;&gt;What is Org Mode?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://orgmode.org/&quot;&gt;Org Mode&lt;/a&gt; is an Emacs package for writing and working with Org files. Org
files are highly structured plain text files that may appear to be a text outline, but can do so
much more. Org Mode is incredibly versatile, and can be used to track projects, manage schedules,
write outlines, and even create documents.&lt;/p&gt;

&lt;h2 id=&quot;choosing-between-org-export-and-pandoc&quot;&gt;Choosing between Org Export and Pandoc&lt;/h2&gt;

&lt;p&gt;Org Export runs inside Emacs and is capable of converting Org files to &lt;a href=&quot;https://orgmode.org/guide/Exporting.html&quot;&gt;a variety of other
formats&lt;/a&gt;. While it is very powerful, it also has its
idiosyncrasies. For instance, when converting Org files to DOCX files, it uses its own style names
such as “Org Title” and “Org Heading 1”.&lt;/p&gt;

&lt;p&gt;A second option for converting Org files to DOCX files is &lt;a href=&quot;https://pandoc.org/&quot;&gt;Pandoc&lt;/a&gt;. Pandoc
prides itself on being the Swiss army knife of document format conversion. It handles an impressive
variety of document formats and handles a dizzying collection of configuration options.&lt;/p&gt;

&lt;p&gt;Since the DOCX files that I create need to be shared with other writers, editors, and reviewers, I
need to make sure that they are easy to work with. This influenced my decision. Since Pandoc uses
more &lt;a href=&quot;https://pandoc.org/MANUAL.html#option--reference-doc&quot;&gt;standard style names&lt;/a&gt;, I decided to use
it for Org conversion.&lt;/p&gt;

&lt;h2 id=&quot;setting-up-pandoc&quot;&gt;Setting up Pandoc&lt;/h2&gt;

&lt;p&gt;To use Pandoc to generate nice looking DOCX files, you will need to configure a template
document. The recommended method for doing this is to generate a default template using Pandoc, and
then edit it in Word. I used &lt;a href=&quot;https://www.libreoffice.org/&quot;&gt;LibreOffice Writer&lt;/a&gt; for this, and it
worked just fine.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Install the latest Pandoc &lt;a href=&quot;https://pandoc.org/installing.html&quot;&gt;using these instructions&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Run the following command to generate &lt;strong&gt;reference.docx&lt;/strong&gt;
    &lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pandoc &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; custom-reference.docx &lt;span class=&quot;nt&quot;&gt;--print-default-data-file&lt;/span&gt; reference.docx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Open &lt;strong&gt;reference.docx&lt;/strong&gt; in your word processor and edit the styles so they meet your needs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;converting-from-org-to-docx&quot;&gt;Converting from Org to DOCX&lt;/h2&gt;

&lt;p&gt;One option for running the conversion is to take advantage of the
&lt;a href=&quot;https://github.com/emacsorphanage/ox-pandoc&quot;&gt;ox-pandoc&lt;/a&gt; package for Emacs. If you will always be
using the same configuration for your exports, this is a great option.&lt;/p&gt;

&lt;p&gt;However, I need to use a number of different configurations for converting documents, so I tend to
run Pandoc from the command line. Recent versions of ox-pandoc support &lt;a href=&quot;https://github.com/emacsorphanage/ox-pandoc#passing-options-to-pandoc&quot;&gt;passing options via Org
headers&lt;/a&gt;, but I still haven’t
bothered to set that up. It should be very easy to template this using 
&lt;a href=&quot;/2022/09/yasnippet-emacs-writing&quot;&gt;Yasnippet&lt;/a&gt;, though.&lt;/p&gt;

&lt;p&gt;I use a custom &lt;a href=&quot;https://fishshell.com/&quot;&gt;fish shell&lt;/a&gt; function that looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-fish&quot;&gt;function org2docx --description &apos;Generate a DOCX file using a custom reference document&apos;
    set -l refdoc &quot;$PATH_TO_REFERENCE_DOCX&quot;
    set -l base (basename -s .org $argv)
    echo Generating $base.docx ...
    pandoc --reference-doc $refdoc -o $base.docx $argv
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;From my fish shell command line, I can then just run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org2docx whatever.org&lt;/code&gt; to generate
&lt;strong&gt;whatever.docx&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I have not found a level of automation that makes my converted DOCX files completely perfect,
unfortunately. After conversion, I always open the new file in my word processor to make final
tweaks and fixes.&lt;/p&gt;

&lt;h2 id=&quot;have-fun-converting-files&quot;&gt;Have fun converting files!&lt;/h2&gt;

&lt;p&gt;The method I’ve outline in this blog post is straightforward and fits my needs. There are definitely
improvements to be made, such as using templates to pass the proper options to Pandoc. Switching to
ox-pandoc would mean one fewer reason to leave Emacs, after all.&lt;/p&gt;

&lt;p&gt;In recent years, more and more clients are asking for files to be delivered via Google Docs. So far,
I have yet to find a good conversion pipeline to get Org files into Google Docs easily. My method
right now takes too many manual steps. That’s a problem I would love to solve.&lt;/p&gt;

&lt;p&gt;Do you have a conversion pipeline for documents that works for you? Leave me a comment and let me
know!&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Yasnippet and Emacs for Writing</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2022/09/yasnippet-emacs-writing" rel="alternate" type="text/html" title="Yasnippet and Emacs for Writing" />
        <updated>2022-09-28T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2022/09/yasnippet-emacs-writing</id>
          <category term="emacs" />
        
          <category term="writing" />
        
          <category term="lisp" />
        
          <category term="org-mode" />
        
          <category term="markdown" />
        
          <category term="podcast" />
        <content type="html" xml:base="https://arnesonium.com/2022/09/yasnippet-emacs-writing">&lt;p&gt;As a &lt;a href=&quot;/writing/&quot;&gt;freelance writer&lt;/a&gt;, I need to be ready to deliver high quality copy in a timely fashion. My editor of choice for writing is
Emacs. I have found that &lt;a href=&quot;https://github.com/joaotavora/yasnippet&quot;&gt;Yasnippet&lt;/a&gt; templates have streamlined my writing process.
&lt;!--more--&gt;&lt;/p&gt;

&lt;ul id=&quot;markdown-toc&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#what-is-yasnippet&quot; id=&quot;markdown-toc-what-is-yasnippet&quot;&gt;What is Yasnippet?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#installing-yasnippet&quot; id=&quot;markdown-toc-installing-yasnippet&quot;&gt;Installing Yasnippet&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#markdown-and-jekyll&quot; id=&quot;markdown-toc-markdown-and-jekyll&quot;&gt;Markdown and Jekyll&lt;/a&gt;    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#bonus-snippets&quot; id=&quot;markdown-toc-bonus-snippets&quot;&gt;Bonus Snippets&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#org-mode-templates&quot; id=&quot;markdown-toc-org-mode-templates&quot;&gt;Org Mode Templates&lt;/a&gt;    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#org2blog-and-podcast-show-notes&quot; id=&quot;markdown-toc-org2blog-and-podcast-show-notes&quot;&gt;org2blog and Podcast Show Notes&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#more-bonus-snippets&quot; id=&quot;markdown-toc-more-bonus-snippets&quot;&gt;More Bonus Snippets&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#writing-faster-is-writing-smarter&quot; id=&quot;markdown-toc-writing-faster-is-writing-smarter&quot;&gt;Writing Faster is Writing Smarter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;what-is-yasnippet&quot;&gt;What is Yasnippet?&lt;/h2&gt;

&lt;p&gt;As a templating system for Emacs, Yasnippet is well known by programmers. It can quickly expand
function definitions, control structures, and other templates into blocks of source code. Source code is just text.&lt;/p&gt;

&lt;p&gt;Since most of my writing originates in text format, templates are great for speeding up document
creation and avoiding common errors and omissions.&lt;/p&gt;

&lt;h2 id=&quot;installing-yasnippet&quot;&gt;Installing Yasnippet&lt;/h2&gt;

&lt;p&gt;With &lt;a href=&quot;https://github.com/jwiegley/use-package&quot;&gt;use-package&lt;/a&gt;, you can get started quickly with Yasnippet by including the following in your
Emacs init file.&lt;/p&gt;

&lt;div class=&quot;language-elisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;use-package&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;yasnippet&lt;/span&gt;
  &lt;span class=&quot;ss&quot;&gt;:ensure&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;t&lt;/span&gt;
  &lt;span class=&quot;ss&quot;&gt;:config&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;yas-global-mode&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&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;nb&quot;&gt;use-package&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;yasnippet-snippets&lt;/span&gt;
  &lt;span class=&quot;ss&quot;&gt;:ensure&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;t&lt;/span&gt;
  &lt;span class=&quot;ss&quot;&gt;:after&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;yasnippet&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For more detailed installation instructions, &lt;a href=&quot;https://joaotavora.github.io/yasnippet/&quot;&gt;check the Yasnippet documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;markdown-and-jekyll&quot;&gt;Markdown and Jekyll&lt;/h2&gt;

&lt;p&gt;This blog is primarily written in Markdown for Jekyll, which means that each file needs a YAML block at the top with specific
information. I have a template that looks like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# -*- mode: snippet -*-
# name: blogtop
# key: blogtop
# --
---
title: ${1:Title}
author: &quot;Erik L. Arneson&quot;
layout: post
permalink: `(format-time-string &quot;/%Y/%m/&quot;)`$2
comments: ${3:$$(yas-choose-value &apos;(&quot;true&quot; &quot;false&quot;))}
tags:
    - $4
---

$0
&amp;lt;!--more--&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Not only does this template save me from needing to remember the format of the YAML block, but it ensures that frequently forgetten items
are included, such as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;permalink&lt;/code&gt; setting and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;!--more--&amp;gt;&lt;/code&gt; tag.&lt;/p&gt;

&lt;h3 id=&quot;bonus-snippets&quot;&gt;Bonus Snippets&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/AndreaCrotti/yasnippet-snippets&quot;&gt;official snippet collection&lt;/a&gt; contains a bunch of extra Markdown templates. 
&lt;a href=&quot;https://github.com/AndreaCrotti/yasnippet-snippets/tree/master/snippets/markdown-mode&quot;&gt;Check them out here.&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;org-mode-templates&quot;&gt;Org Mode Templates&lt;/h2&gt;

&lt;p&gt;My &lt;a href=&quot;https://orgmode.org/&quot;&gt;Org Mode&lt;/a&gt; files are more complex. Many writing clients expect deliveries in Microsoft Word files, but
I also frequently find myself needing to produce OpenDocument files, HTML, and even Markdown. The headers for these files need to support
all of these options.&lt;/p&gt;

&lt;p&gt;I use the following template to support all of the Org Mode configuration and options I require.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# -*- mode: snippet -*-
# name: header
# key: header
# --
#+TITLE: $1
#+LANGUAGE: ${2:en}
#+AUTHOR: ${3:$$(yas/choose-value &apos;(&quot;Erik L. Arneson&quot; &quot;Some Other Name&quot;))}
#+EMAIL: ${4:$$(yas/choose-value &apos;(&quot;list-of-email-addresses&quot;))}${5:
#+DESCRIPTION: $6}${7:
#+KEYWORDS: $8}
#+OPTIONS: num:nil toc:nil
#+ODT_STYLES_FILE: ${9:$$(yas/choose-value &apos;(&quot;list-of-template-files&quot;))}
#+bibliography: /path/to/MyLibrary.bib
#+cite_export: csl ${10:$$(yas/choose-value &apos;(&quot;chicago-fullnote-bibliography.csl&quot; &quot;modern-language-association.csl&quot; &quot;apa.csl&quot;))}
#+WWG: ${11:$$(yas/choose-value &apos;(&quot;0&quot; &quot;250&quot; &quot;500&quot; &quot;1000&quot;))}

$0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;org2blog-and-podcast-show-notes&quot;&gt;org2blog and Podcast Show Notes&lt;/h3&gt;

&lt;p&gt;I also use Org Mode to publish to WordPress websites using &lt;a href=&quot;https://github.com/org2blog/org2blog&quot;&gt;org2blog&lt;/a&gt;. For one of these websites, I
write show notes for podcast episodes. I use a template that looks like this.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# -*- mode: snippet -*-
# name: podcast
# key: podcast
# --
* $1
  :PROPERTIES:
  :POST_TAGS: $2
  :BLOG:      arnemancy
  :CATEGORY:  Podcast
  :POST_DATE: `(format-time-string &quot;[%Y-%m-%d %a %H:%M]&quot; nil nil)`
  :END:

$0

** Links

** Credits

#+begin_export html
Support me on Patreon: &amp;lt;a rel=&quot;payment&quot; href=&quot;https://www.patreon.com/arnemancy&quot;&amp;gt;https://www.patreon.com/arnemancy&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
#+end_export
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This template reminds me of important items I need to include in all show notes, like links, credits, and a Patreon link.&lt;/p&gt;

&lt;h3 id=&quot;more-bonus-snippets&quot;&gt;More Bonus Snippets&lt;/h3&gt;

&lt;p&gt;The official snippet collection also contains a bunch of Org Mode snippets. &lt;a href=&quot;https://github.com/AndreaCrotti/yasnippet-snippets/tree/master/snippets/org-mode&quot;&gt;Here is the whole
list.&lt;/a&gt; Since Org Mode contains so many complicated
structures like source blocks and optional keywords, these are great time savers. There are also snippets for supporting
&lt;a href=&quot;https://github.com/yjwen/org-reveal&quot;&gt;org-reveal&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;writing-faster-is-writing-smarter&quot;&gt;Writing Faster is Writing Smarter&lt;/h2&gt;

&lt;p&gt;Don’t let your tools get in the way of your writing. Frequently, Emacs is portrayed as cumbersome and filled with obscure keybindings and
weird commands. However, I have found that it is an excellent tool for writing. Yasnippet templates let me get started on new documents
quickly without fretting over different syntaxes for configuration.&lt;/p&gt;

&lt;p&gt;And Yasnippet is just one of the tools I use when writing with Emacs. I will discuss more of these tools in the future.&lt;/p&gt;</content>
      </entry>
    
</feed>
