I do all my writing in Emacs, with org-mode.
Any post begins as a TODO entry in an ideas.org file. The entry can be a tentative title, the thing I want to write about, or a list of sources I want to connect.
The entry sits there for weeks, months, even years. Whenever I think about something relevant, I attach a note to the entry. Or I jot something down in any of the notebooks I keep around—on the desk, in my bag, in my nightstand drawer.
Eventually I find myself thinking about the post when I wake up, or while I’m running, instinctively composing it in my head, one sentence after another. Then I know it’s time to start writing.
I don’t have a strict method for what comes next, which is for the better, I think. Sometimes I shuffle my notes into cohesive paragraphs. Sometimes I toss the notes and start with an outline. Increasingly, I go for a handwritten first draft. Whatever the means, my goal is to arrive at a sequence of paragraphs, with no gaps or placeholders, as fast as I can. When I get to that (if I get to that) I know the post will cascade into existence, even if I need to rewrite every line in the process.
Before I start typing I need a new file. M-x org-blog-new-post prompts for a title and visits a buffer:
(defun org-blog-new-post (title)
"Create a new jorge post with the given \
TITLE and switch to it in blog mode."
(interactive "MPost title: ")
(let* ((project-root (projectile-project-root))
(default-directory project-root)
(output (shell-command-to-string
(concat "jorge post \"" title "\"")))
(post-path
(string-trim (string-remove-prefix "added " output))))
(find-file (expand-file-name post-path project-root))
(org-blog-mode)))
With these contents:
---
title: My Blogging Setup is My Writing Process
date: 2024-11-21T19:47:20-03:00
layout: post
lang: en
tags: []
draft: true
---
#+OPTIONS: toc:nil num:nil
#+LANGUAGE: en
In this mode:
(define-derived-mode org-blog-mode org-mode "BLOG"
"org-mode extension to write blog posts (using jorge).")
(defun org-blog-setup ()
"Setup the blog mode."
(if (string= "es" (org-kw-language))
(progn (ispell-change-dictionary "spanish")
(set-input-method "spanish-prefix")))
(flyspell-mode 1)
(writeroom-mode 1)
(text-scale-increase 1))
(add-hook 'org-blog-mode-hook 'org-blog-setup)
I use writeroom-mode to get a centered block of text on a minimal interface. I increase the text size and set the spell-checking language. org-blog-new-post calls jorge post to initialize the file, then visits it in an org-blog-mode buffer. While I work on the file I keep jorge serve running on the terminal and the post open on the browser1. And I save my progress with Magit just as I would if I were programming.
With the first draft typed in, I just revise over and over until I can’t find anything wrong with the text—or until I can’t stand it anymore. Whatever happens first.
You’ll see a lot of blogging advice around lowering the bar, writing about anything, not worrying about the quality of the post or whether anyone would want to read it. This is good advice and I followed it here, for instance in my initial decision to write exclusively in Spanish, to write about personal stuff and about things I’m not qualified for. But once I got the hang of it—now that I have more ideas than time and I’m good enough at finishing what I start—I shifted my focus to form, style, play, and experimentation2. I take my time with the text, making it as good as I can.
I may spend hours trimming the paragraphs, rearranging the sentences, searching for verbs, removing superfluous adjectives, counting syllables until the rhythm feels right. I don’t cater to an audience but I model my reader. I don’t publish what I can’t make interesting to someone else; I won’t let the text grow long, or cryptic, or boring3.
Of course, I fail.
I need a dictionary and a thesaurus during revision, so I have handy commands for google-translate. This is my favorite feature of writing in Emacs. To dissect a word with a keystroke feels like a superpower.
I wouldn’t be caught dead asking an LLM to write or rewrite for me but, since I’m not a native English speaker, I keep a gptel session to help when an expression sounds awkward or I’m unsure about a preposition4. This is the one place where GPT shines—or where I’m ignorant enough to miss in what way it sucks. Similarly, when I’m about done, I paste the text on Grammarly for corrections. I don’t use their advanced features, much like I don’t ask GPT to proofread. I sense these tools want to push me towards a blander style, and I’d much rather own my flawed weirdness.
After every revision, I send the text to my Kindle to read away from the keyboard. This lets me look at it with slightly fresher eyes, at the beginning or the end of the day. I highlight and make notes for any error and anything that sounds off, unnecessary, or confusing, and fix it the next time I sit to work at my desk. I repeat this until I stop finding new things to fix, which I take as a sign that I’m ready to publish.
(I mentioned how my process differs from typical blogging. This is how it differs from “serious” writing: if I wanted to make the text as good as I could, I would shelve it for a few months, let myself forget, and go back to it as if someone else had written it. I would maybe even start on a new draft. But I don’t do that; I prefer this shorter life cycle, to get the thing off my list, out of my head, and move on.)
When the post is ready I adjust the date, remove the draft, set an excerpt—some phrase I like from the text—and a thumbnail image in the front matter:
---
title: my blogging setup is my writing process
subtitle: (my writing process is my blogging setup)
date: 2024-11-25T10:00:00-03:00
layout: post
lang: en
tags: [meta]
excerpt: To dissect a word with a keystroke feels like a superpower.
image: blog.png
---
This blog runs on Debian and nginx, on a 4-dollar Hetzner box. When I’m done I run jorge build and rsync with it.
You must switch your allegiance from the triggering subject to the words. The more I write, the more I care about form, the less I care about truth, the less I care about fact. If I keep on for an infinite number of years, my posts will slowly turn into poems.
And if I can’t resist the urge for a joke or a digression, at least I have the courtesy of sending it to a footnote.
Before LLMs, I would google the phrase and count the results, something that doesn’t work anymore.