<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jiewawa&#39;s blog</title>
    <link>https://jiewawa.me/</link>
    <description>Recent content on Jiewawa&#39;s blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language><lastBuildDate>Fri, 01 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jiewawa.me/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Overriding keybindings with Meow</title>
      <link>https://jiewawa.me/2026/05/overriding-keybindings-with-meow/</link>
      <pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2026/05/overriding-keybindings-with-meow/</guid>
      <description>&lt;p&gt;I previously wrote about &lt;a href=&#34;https://jiewawa.me/2024/10/useful-emacs-commands-for-reading/&#34;&gt;useful Emacs commands for reading&lt;/a&gt;. This allowed me to use j and k to scroll the window up and down instead of going forward or backward a line.&lt;/p&gt;
&lt;p&gt;I am now using &lt;a href=&#34;https://github.com/meow-edit/meow&#34;&gt;meow&lt;/a&gt; for my modal editing needs and have been really happy with it. Meow allows for custom states to be defined, but I have been using a different method recently that takes advantage of the built-in normal and motion states.&lt;/p&gt;
&lt;p&gt;Meow has a very clever design choice in that when a key is pressed it can translate it to the default emacs binding and call it via a macro. Below is an example of the function &lt;code&gt;meow-next&lt;/code&gt;, which I have bound to &lt;kbd&gt;j&lt;/kbd&gt;. It essentially just executes the key-binding that is stored as the value of &lt;code&gt;meow--kbd-forward-line&lt;/code&gt; which happens to be &lt;kbd&gt;C-n&lt;/kbd&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-next&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;arg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Move to the next line.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Will cancel all other selection, except char selection.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Use with universal argument to move to the last line of buffer.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Use with numeric argument to move multiple lines at once.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;P&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;unless&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;equal&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow--selection-type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;expand&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow--cancel-selection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cond&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow--with-universal-argument-p&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;arg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;point-max&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;this-command&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;#&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;next-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow--execute-kbd-macro&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow--kbd-forward-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defvar&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow--kbd-forward-line&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;C-n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;KBD macro for command &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`forward-line&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Because meow&amp;rsquo;s keyboard macro commands are all stored as variables, it is easy for us to overwrite them locally. In the following example I will show how I made a minor mode that  lets me have a more enjoyable reading experience.&lt;/p&gt;
&lt;p&gt;Firstly, we need to bind the new functions to some obscure key combination. I chose to add these to the global keymap in this case as I want them available across a variety of major-modes.&lt;/p&gt;
&lt;p&gt;Then I wrote functions to toggle between the original values of the meow&amp;ndash;kbd variables and their overrides.&lt;/p&gt;
&lt;p&gt;Finally, I defined a minor mode that can be added to a major-mode&amp;rsquo;s hook.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;keymap-global-set&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;M-s-j&amp;#34;&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;scroll-up-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;keymap-global-set&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;M-s-k&amp;#34;&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;scroll-down-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defvar&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-reading-originals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow--kbd-backward-line&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;C-p&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow--kbd-forward-line&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;C-n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defvar&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-reading-overwrites&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow--kbd-backward-line&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;M-s-k&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow--kbd-forward-line&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;M-s-j&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-reading-restore-directions&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Restore Meow&amp;#39;s direction variables locally.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;dolist&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;binding&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-reading-originals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;make-local-variable&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;car&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;binding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cdr&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;binding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-reading-overwrite-directions&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Overwrite Meow&amp;#39;s direction variables locally.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;dolist&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;binding&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-reading-overwrites&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;make-local-variable&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;car&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;binding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cdr&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;binding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;define-minor-mode&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-reading-mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Adjust some bindings to make &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`meow-normal-mode&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; a better experience for reading modes.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;:lighter&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; reading&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-reading-mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow-reading-overwrite-directions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq-local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-cursor-type-motion&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow--update-cursor-motion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;progn&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow-reading-restore-directions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;kill-local-variable&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-cursor-type-motion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;meow--update-cursor-motion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here is an example of how you can have the minor mode be loaded for all buffers of a given major mode.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;use-package&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elfeed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;:hook&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;elfeed-show-mode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;meow-reading-mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The reason that I prefer this to making a whole new &amp;ldquo;reading-state&amp;rdquo; is that this is still using meow&amp;rsquo;s default motion-state. I get to take advantage of all of the default key-bindings. One of the reasons that I moved from evil to meow was that I was getting tired of having to bind so many functions myself. With this method, I can essentially say &amp;ldquo;I want this mode to behave the same as all of the others, just with one or two changes&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I am also working on a minor mode for lisp modes that takes advantage of smartparens to hopefully create a lispy like environment, but that is still a work in progress.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Rating Chinese Books by Enjoyment and Difficulty - 21-30</title>
      <link>https://jiewawa.me/2026/04/rating-chinese-books-by-enjoyment-and-difficulty-21-30/</link>
      <pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2026/04/rating-chinese-books-by-enjoyment-and-difficulty-21-30/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been nearly a year since the last time I wrote one of these and I am still working through the backlog. Here are 10 more Chinese books that I&amp;rsquo;ve read with a bonus DNF that I may get back to one day.&lt;/p&gt;
&lt;h3 id=&#34;闯荡江湖二十年-by-龙乘风-roaming-the-jianghu-for-twenty-years-by-long-chengfeng&#34;&gt;闯荡江湖二十年 by 龙乘风 | Roaming the Jianghu for Twenty Years by Long Chengfeng&lt;/h3&gt;
&lt;p&gt;This was my final book of 2023 and I read it in only a day or two. I heard about Long Chengfeng being a Gu Long imitator from Wuxia Wanderings and it definitely fit the case here. I definitely liked the book less than the previous Gu Long book that I read and it suffered from my least favourite Wuxia trope - characters new or old showing up any time our current characters have any conflict.&lt;/p&gt;
&lt;p&gt;Enjoyment:  ⭐ ⭐ ⭐ ⭐ / Difficulty: ⭐ ⭐&lt;/p&gt;
&lt;h3 id=&#34;紫川4-帝都赞歌-by-老猪-zi-chuan-4-by-lao-zhu&#34;&gt;紫川4 - 帝都赞歌 by 老猪 | Zi Chuan 4 by Lao Zhu&lt;/h3&gt;
&lt;p&gt;The fourth volume was the longest in the series so far and it was probably my least favourite of the whole series. I found as though one of the main points of conflict was resolved off the page and a lot of the content from the second half of the book was just ignored in the final volume as the author wanted to wrap things up.&lt;/p&gt;
&lt;p&gt;Enjoyment:  ⭐ ⭐ ⭐ ⭐ / Difficulty: ⭐ ⭐ ⭐&lt;/p&gt;
&lt;h3 id=&#34;射雕英雄传-1-by-金庸-the-legend-of-the-condor-heroes-1-by-jin-yong&#34;&gt;射雕英雄传 1 by 金庸 | The Legend of the Condor Heroes 1 by Jin Yong&lt;/h3&gt;
&lt;p&gt;I took part in the Chinese Forums Book of the Year read-along in 2024. We read what has been referred to as &amp;ldquo;The Chinese Lord of the Rings&amp;rdquo;. I remember really enjoying the book and not finding it too difficult to follow along. I found this quote I made on the forum post and I agree with what I wrote at the time.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;ll be starting chapter 8 today. It&amp;rsquo;s very exciting, but I&amp;rsquo;ll agree with previous sentiments that fight scenes are my least favourite section.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Enjoyment:  ⭐ ⭐ ⭐ ⭐ / Difficulty: ⭐ ⭐ ⭐ ⭐&lt;/p&gt;
&lt;h3 id=&#34;射雕英雄传-二-by-金庸-the-legend-of-the-condor-heroes--2--by-jin-yong&#34;&gt;射雕英雄传（二） by 金庸 | The Legend of the Condor Heroes (2) by Jin Yong&lt;/h3&gt;
&lt;p&gt;I DNF&amp;rsquo;ed the second volume of Legend of the Condor Heroes. In hindsight, I shouldn&amp;rsquo;t have read two books from the same series back-to-back. It&amp;rsquo;s a rule I now follow in English and Chinese and have found that it helps prevent burnout. I may restart the second volume again at some point as its impact is still undeniable.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;m up to Chapter 14 and have been finding it a bit of a drag recently. I&amp;rsquo;ve been lacking motivation to read and I&amp;rsquo;ve been reading other stuff instead.&lt;/p&gt;
&lt;p&gt;For some of the authors I&amp;rsquo;ve read multiple books by, going back to their writing is like wearing a pair of old slippers, but not with Jin Yong. I feel like I need to get used to his writing all over again after only a short break.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Enjoyment:  DNF / Difficulty: ⭐ ⭐ ⭐ ⭐&lt;/p&gt;
&lt;h3 id=&#34;坏小孩-by-紫金陈-the-bad-kids-by-zijin-chen&#34;&gt;坏小孩 by 紫金陈 | The Bad Kids by Zijin Chen&lt;/h3&gt;
&lt;p&gt;This is the most disappointing of all the books on this list. I had watched and somewhat enjoyed the TV adaptation before reading this and the same author had written my book of the year the previous year. However, I found that this book felt the need to recap information every chapter and spell things out very clearly. Overall, I much prefer the adaptation, and I wouldn&amp;rsquo;t recommend the book over it unless you are very early in your Chinese reading journey and think that being treated like a child will be useful for your comprehension.&lt;/p&gt;
&lt;p&gt;Enjoyment:  ⭐ ⭐ ⭐ / Difficulty: ⭐&lt;/p&gt;
&lt;h3 id=&#34;紫川5-一统天下-by-老猪-zi-chuan-5-by-lao-zhu&#34;&gt;紫川5 - 一统天下 by 老猪 | Zi Chuan 5 by Lao Zhu&lt;/h3&gt;
&lt;p&gt;The final volume of this series took some departures from where things had been going in the previous volume. I feel as though the author had more ideas but then decided that he wanted to wrap things up. I really enjoyed the ending and in particular the dynamics between two of our main characters.&lt;/p&gt;
&lt;p&gt;Enjoyment:  ⭐ ⭐ ⭐ ⭐ ⭐ / Difficulty: ⭐ ⭐ ⭐&lt;/p&gt;
&lt;h3 id=&#34;雪刀浪子-by-龙乘风-snowblade-vagabond-by-long-chengfeng&#34;&gt;雪刀浪子 by 龙乘风 | Snowblade Vagabond by Long Chengfeng&lt;/h3&gt;
&lt;p&gt;Considering that this was as short book, it took me a lot longer to read than it should have. This book has the worst example of my least favourite Wuxia trope that I mentioned earlier. It seemed as though characters would appear out of the blue all the time. The best thing about this book is its Gu Long like prose.&lt;/p&gt;
&lt;p&gt;Enjoyment:  ⭐ ⭐  / Difficulty: ⭐ ⭐ ⭐&lt;/p&gt;
&lt;h3 id=&#34;猫城记-by-老舍-cat-country-by-lao-she&#34;&gt;猫城记 by 老舍 | Cat Country by Lao She&lt;/h3&gt;
&lt;p&gt;This is another books that I had high hopes for.  It was a political satire by one of China&amp;rsquo;s greatest authors. Unfortunately, while I liked some of the allusions, I found the story to be very uninteresting. This was another book that took longer to read than it should have.&lt;/p&gt;
&lt;p&gt;Enjoyment:  ⭐ ⭐ ⭐  / Difficulty: ⭐ ⭐ ⭐&lt;/p&gt;
&lt;h3 id=&#34;尸语者-by-法医秦明-the-speaking-corpse-by-qin-ming--fayi-qin-ming&#34;&gt;尸语者 by 法医秦明 | The Speaking Corpse by Qin Ming (Fayi Qin Ming)&lt;/h3&gt;
&lt;p&gt;I listened to this book via TTS using the Readest app at the same time as reading on my e-reader. It was a good experience, but this isn&amp;rsquo;t the sort of book that I typically enjoy. This is a very popular series of crime scene investigation novels. Others might enjoy, but I prefer crime to be more mysterious and psychological. The use of many medical terms was quite difficult.&lt;/p&gt;
&lt;p&gt;Enjoyment:  ⭐ ⭐ ⭐  / Difficulty: ⭐ ⭐ ⭐ ⭐&lt;/p&gt;
&lt;h3 id=&#34;解密-by-麦家-decoded-by-mai-jia&#34;&gt;解密 by 麦家 | Decoded by Mai Jia&lt;/h3&gt;
&lt;p&gt;This book had been on my e-reader for a long time,  and I am glad that I read it. I enjoyed the first half of the book much more than the second. I liked watching the loner genius and seeing his interactions with others. After he became an adult, I became much less interested in the story.&lt;/p&gt;
&lt;p&gt;Enjoyment:  ⭐ ⭐ ⭐ / Difficulty: ⭐ ⭐ ⭐&lt;/p&gt;
&lt;h3 id=&#34;血海飘香-by-古龙-perfume-in-the-sea-of-blood-by-gu-long&#34;&gt;血海飘香 by 古龙 | Perfume in the Sea of Blood by  Gu Long&lt;/h3&gt;
&lt;p&gt;It would have been hard to live up to 流星蝴蝶剑 as that is one of my top 5 Chinese books, but this didn&amp;rsquo;t do it for me. However, out of all the books that I read in this slump, this along with Legend of the Condor Heroes are the ones that I would consider revisiting.&lt;/p&gt;
&lt;p&gt;The story was full of twists and I enjoyed the prose once again, but the characters felt weaker.&lt;/p&gt;
&lt;p&gt;Enjoyment:  ⭐ ⭐ ⭐  / Difficulty: ⭐ ⭐ ⭐&lt;/p&gt;
&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;For these ten books, I found myself in a bit of a Chinese reading slump. That was probably also due to me getting back into reading English books. If you want to see what books I have read since, you can check out my &lt;a href=&#34;https://jiewawa.me/reading/chinese/&#34;&gt;Chinese reading log&lt;/a&gt;, and feel free to reach out by email if you want any difficulty ratings.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Tools for Studying Chinese with Emacs</title>
      <link>https://jiewawa.me/2025/11/tools-for-studying-chinese-with-emacs/</link>
      <pubDate>Fri, 21 Nov 2025 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2025/11/tools-for-studying-chinese-with-emacs/</guid>
      <description>&lt;p&gt;In my 20 years of studying Chinese, I have tried countless tools for helping me learn efficiently.&lt;/p&gt;
&lt;p&gt;Recently, I have seen a growing overlap between Chinese learners and Emacs users. Therefore I want to share some of the tools that I have found or developed since switching to our beloved editor.&lt;/p&gt;
&lt;h2 id=&#34;on-ai-llms&#34;&gt;On AI/LLMs&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s probably quite shocking to find no AI packages on this list. While I don&amp;rsquo;t fundamentally have any issue with people using AI for language learning, I find that many people now automatically reach to LLMs as their first port of call.&lt;/p&gt;
&lt;p&gt;LLMs need to be considered a tool, and for my particular use case &lt;strong&gt;there are better tools for the job&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;paw&#34;&gt;Paw&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/chenyanming/paw&#34;&gt;Paw&lt;/a&gt; by Damon Chan is one of the most impressive packages I have seen. I think that for language learners and knowledge workers, it has the potential to be considered in the same vein as Org-Mode and Magit as a killer Emacs package.&lt;/p&gt;
&lt;p&gt;Paw manages to combine many Emacs packages and command line applications into a cohesive environment. It can manage known words and annotations, it can access online and offline dictionaries and it can be used as a front-end to LLMs for your language learning needs.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://jiewawa.me/ox-hugo/paw1.png&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;The author primarily developed it to work with English and Japanese, but I have worked on adding
&lt;a href=&#34;https://github.com/chenyanming/paw/blob/main/CHINESE.org&#34;&gt;basic Chinese support&lt;/a&gt;. There is still work to be done, as the package is being actively developed. There are some new features such as live annotation that I haven&amp;rsquo;t even tried yet.&lt;/p&gt;
&lt;h2 id=&#34;jieba&#34;&gt;jieba&lt;/h2&gt;
&lt;p&gt;Any Chinese learner should use a tool that segments text into words, rather than just breaking it down character by character. There are &lt;a href=&#34;https://github.com/roife/emt&#34;&gt;emt&lt;/a&gt; for Mac, &lt;a href=&#34;https://github.com/Master-Hash/ewt-rs&#34;&gt;ewt-rs&lt;/a&gt; for Windows, &lt;a href=&#34;https://github.com/kanglmf/emacs-chinese-word-segmentation&#34;&gt;emacs-chinese-word-segmentation&lt;/a&gt;, but I settled on the cross platform &lt;a href=&#34;https://github.com/kisaragi-hiu/emacs-jieba&#34;&gt;emacs-jieba&lt;/a&gt; as the rust implementation of jieba is both fast and actively developed.&lt;/p&gt;
&lt;h2 id=&#34;cc-cedict&#34;&gt;CC-CEDICT&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://cc-cedict.org/editor/editor.php&#34;&gt;CC-CEDICT&lt;/a&gt; is a Creative Commons licensed Chinese to English dictionary that is built into many popular Chinese dictionary applications such as Pleco. I have added a few words over the years, but it&amp;rsquo;s definitely something that I want to contribute more to in the future.&lt;/p&gt;
&lt;p&gt;It is really useful having a dictionary that is so thorough and has such consistent formatting in a plain text format. In fact I use the Emacs package &lt;a href=&#34;https://github.com/xuchunyang/cc-cedict.el&#34;&gt;cc-cedict.el&lt;/a&gt; as the base for many of my own functions in which I need the pinyin or definition of a given word.&lt;/p&gt;
&lt;h2 id=&#34;pinyin-convert&#34;&gt;pinyin-convert&lt;/h2&gt;
&lt;p&gt;I have been using &lt;a href=&#34;https://github.com/tprost/pinyin-convert.el&#34;&gt;pinyin-convert&lt;/a&gt; to convert between pinyin written with tone numbers and diacritics. I mostly use it in conjunction with cc-cedict.el as that dictionary uses tone numbers like &lt;code&gt;zhong1guo2&lt;/code&gt;. Running &lt;code&gt;pinyin-convert--string-to-tone-mark&lt;/code&gt; will convert it to &lt;code&gt;zhōngguó&lt;/code&gt;. This is a small package but it works really well. It&amp;rsquo;s definitely worth trying out.&lt;/p&gt;
&lt;h2 id=&#34;typing-chinese&#34;&gt;Typing Chinese&lt;/h2&gt;
&lt;p&gt;Before I switched to Emacs, I was using fcitx5 and rime for typing in Chinese, so naturally &lt;a href=&#34;https://github.com/DogLooksGood/emacs-rime&#34;&gt;emacs-rime&lt;/a&gt; was a logical choice as my input method editor. It works really well and I like how it allows regular keys to be used in normal mode for both evil and meow. Nowadays, this is the only way that I type Chinese on my computer. If I want to type in another application, I do it via an pop-up Emacs buffer.&lt;/p&gt;
&lt;p&gt;For systems where &lt;code&gt;librime&lt;/code&gt; is not available, &lt;a href=&#34;https://github.com/tumashu/pyim&#34;&gt;pyim&lt;/a&gt; is another alternative. I have never needed any alternative to emacs-rime so haven&amp;rsquo;t tried it out. The user TomoeMami reached out to me to suggest &lt;a href=&#34;https://github.com/laishulu/emacs-smart-input-source&#34;&gt;sis&lt;/a&gt; for using OS-native input sources and Emacs-native input sources.&lt;/p&gt;
&lt;h2 id=&#34;zh-utils&#34;&gt;zh-utils&lt;/h2&gt;
&lt;p&gt;I wrote the &lt;a href=&#34;https://codeberg.org/jiewawa/zh-utils&#34;&gt;zh-utils&lt;/a&gt; package to collect all the Chinese related functionality I have written over the years. It is easier for me to manage now that I am treating it as a package instead of various functions in my &lt;code&gt;init.el&lt;/code&gt;, and other learners can take advantage of it.&lt;/p&gt;
&lt;p&gt;As of now it is capable of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convert Chinese characters to Pinyin&lt;/li&gt;
&lt;li&gt;Check if a string is Chinese or not&lt;/li&gt;
&lt;li&gt;Return the most likely Chinese word at point using segmentation&lt;/li&gt;
&lt;li&gt;Return which part of speech a given string belongs to&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out the readme for more details.&lt;/p&gt;
&lt;h3 id=&#34;tone-colours&#34;&gt;Tone Colours&lt;/h3&gt;
&lt;p&gt;Pleco is definitely the best Chinese dictionary on mobile, and one feature that I didn&amp;rsquo;t realise was so useful when I started using it all those years ago is having characters coloured based on the tone associated with it.&lt;/p&gt;
&lt;p&gt;I found that when I think of a character, I quite often would picture it in red, green, blue, purple or grey depending on its tone. My &lt;code&gt;zh-utils&lt;/code&gt; package includes some code that utilises org-mode links to achieve the desired result.&lt;/p&gt;
&lt;p&gt;For example &lt;code&gt;[[t3:][我]]&lt;/code&gt; would be rendered with the correct colour. I even wrote a &lt;a href=&#34;https://github.com/jiewawa/org-cc-cedict&#34;&gt;tool&lt;/a&gt; that converts a CC-CEDICT dictionary file to make use of this format.&lt;/p&gt;
&lt;p&gt;The code below is for having nicer colours with Modus themes, and in fact I have even changed the Pleco app to use the same colours as well.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my-modus-themes-custom-faces&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kp&#34;&gt;&amp;amp;rest&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;modus-themes-with-colors&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;custom-set-faces&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;t1-face&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:height&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.9&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:foreground&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;red-intense&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;t2-face&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:height&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.9&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:foreground&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;green-intense&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;t3-face&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:height&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.9&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:foreground&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;blue-intense&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;t4-face&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:height&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.9&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:foreground&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;magenta-warmer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;t5-face&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:height&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.9&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:foreground&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;add-hook&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;modus-themes-after-load-theme-hook&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;#&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my-modus-themes-custom-faces&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;anki&#34;&gt;Anki&lt;/h2&gt;
&lt;p&gt;I have known about the power of Anki for a long time, and I have kept up the habit of making and reviewing flashcards on and off over the years.&lt;/p&gt;
&lt;p&gt;Previously, I had been using simple Front/Back flashcards. Now having watched Daniel Evensen&amp;rsquo;s recent &lt;a href=&#34;https://youtube.com/watch?v=31JgmKm78co&#34;&gt;video&lt;/a&gt; explaining how he sets up Anki for language learning, it really clicked to me that I should be using my own note layout with multiple fields to generate different types of cards based on the same note.&lt;/p&gt;
&lt;p&gt;In the images below, you can see an example Anki note, and a preview of a card based on said note.&lt;/p&gt;
&lt;div class=&#34;grid&#34;&gt;
  &lt;div&gt;
    &lt;img src=&#34;https://jiewawa.me/ox-hugo/anki1.png&#34; alt=&#34;Anki Note Example&#34;&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=https://jiewawa.me/ox-hugo/anki2.png alt=&#34;Anki Card Example&#34;&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I wrote an org-capture template that calls a function I wrote for making a flashcard with a single key stroke. It automatically generates audio for the word, and fills in all the fields for the note type. It uses several of the &lt;code&gt;zh-utils&lt;/code&gt; functions and is able to guess what word I want based on context.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/create-flashcard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;cc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;cc-cedict&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;pinyin&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;pinyin-convert--string-to-tone-mark&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;cc-cedict-entry-pinyin&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;definition&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;string-join&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;cc-cedict-entry-english&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;sound&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;[sound:%s.mp3]&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;level&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;zh-utils--get-hsk-level&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;grammar&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;zh-utils--get-word-grammar&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;coloured&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;zh-utils-tonify-word&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;zh-utils-tts-make-audio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;s&#34;&gt;&amp;#34;zh-CN-YunyangNeural&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;%s %s&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;concat&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;* %s %s\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;:PROPERTIES:\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;:ANKI_DECK: Chinese::New\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;:ANKI_NOTE_TYPE: Jack Chinese\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;:END:\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;** Chinese\n%s\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;** Pinyin\n%s\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;** Definition\n%s\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;** Grammar\n%s\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;** Sound\n%s\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;** Coloured Characters\n%s\n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;level&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;:%s:&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;pinyin&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;definition&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;grammar&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;sound&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;coloured&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/create-flashcard-from-context&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Create flashcard using context-aware word selection.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;zh-utils--org-capture-flashcard-get-word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/create-flashcard&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;push&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Chinese Flashcard&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;entry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;~/notes/new-flashcards.org&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/create-flashcard-from-context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;org-capture-templates&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To make the coloured characters in Anki match the colours of Modus Themes, I add the following CSS to the card&amp;rsquo;s styling.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;t1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e30000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;t2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#01b31c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;t3&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#150ff0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;t4&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#8800bf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;t5&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#777777&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nightMode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;t1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ff8080&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nightMode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;t2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#80ff80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nightMode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;t3&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#8080ff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nightMode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;t4&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#df80ff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nightMode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;t5&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#c6c6c6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;fonts&#34;&gt;Fonts&lt;/h2&gt;
&lt;p&gt;The two Chinese fonts I like to use in Emacs are Adobe Fangsong and Sarasa Gothic. I often toggle between the two of these, but I didn&amp;rsquo;t think that this was worth including in my &lt;code&gt;zh-utils&lt;/code&gt; package. You may find it useful as a starting point.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/set-han-font-fangsong&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;set-fontset-font&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;fontset-default&amp;#34;&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;han&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;font-spec&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:family&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Adobe Fangsong Std&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/han-font&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;fangsong&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/set-han-font-sarasa&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;set-fontset-font&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;fontset-default&amp;#34;&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;han&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;font-spec&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:family&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Sarasa Mono SC&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/han-font&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;sarasa&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/toggle-han-font&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;equal&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/han-font&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;sarasa&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/set-han-font-fangsong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/set-han-font-sarasa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;set-fontset-font&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;fontset-default&amp;#34;&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;han&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;font-spec&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:family&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Sarasa Mono SC&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/han-font&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;sarasa&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;further-reading&#34;&gt;Further reading&lt;/h2&gt;
&lt;p&gt;There are not too many Emacs resources specifically aimed at Chinese learners. One is &lt;a href=&#34;https://www.youtube.com/watch?v=uraPXeLfWcM&#34;&gt;Have Emacs teach you Chinese&lt;/a&gt; by Josh Moller Mara, which uses org-capture and org-drill for making flashcards.&lt;/p&gt;
&lt;p&gt;However there are big communities of Chinese speaking Emacs users online. The biggest one is undoubtedly the &lt;a href=&#34;https://emacs-china.org/&#34;&gt;emacs-china&lt;/a&gt; forum. There is also the &lt;a href=&#34;https://github.com/hick/emacs-chinese&#34;&gt;emacs-chinese&lt;/a&gt; repository for common issues with Chinese and Emacs, and also the &lt;a href=&#34;https://emacs.liujiacai.net/&#34;&gt;EmacsTalk&lt;/a&gt; podcast.&lt;/p&gt;
&lt;p&gt;I am excited for &lt;a href=&#34;https://emacsconf.org/2025/talks/languages/&#34;&gt;this talk&lt;/a&gt; at EmacsConf 2025 which will show a custom major-mode for switching languages and the speaker will also focus on exporting notes, which is something I haven&amp;rsquo;t considered up to this point.&lt;/p&gt;
&lt;p&gt;I plan to keep this article updated with further developments, so please don&amp;rsquo;t hesitate to contact me with any information that should be included.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Trying to do the last 20%</title>
      <link>https://jiewawa.me/2025/10/trying-to-do-the-last-20/</link>
      <pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2025/10/trying-to-do-the-last-20/</guid>
      <description>&lt;p&gt;For the last few years, I have been using Emacs for almost all of my daily computing needs. In that time, I have also become fairly proficient at elisp. Across many files in my &lt;code&gt;user-emacs-directory&lt;/code&gt;, I have hundreds of functions and snippets of code that I have written myself.&lt;/p&gt;
&lt;p&gt;However, one area that I would like to improve is what I am calling &amp;ldquo;the last 20%&amp;rdquo;. These functions mostly work for me, but if I ever wanted to share these functions with others, then there is a lot of work that needs doing to get them into a ready state.&lt;/p&gt;
&lt;p&gt;I &lt;a href=&#34;https://jiewawa.me/home/jack/notes/denote/blog/20240410T184035--another-way-of-integrating-mozilla-readability-in-emacs-eww__emacs.org&#34;&gt;previously&lt;/a&gt; wrote one set of code that could be packaged into a minor-mode and it was really rewarding when I once someone else using that code in their configuration.&lt;/p&gt;
&lt;p&gt;Going forward, I want to tidy up and organise many of the functions into their own small packages so that I can maintain them better for myself. Below I will list some of the packages for which I have already written most of the logic, and are simply missing &amp;ldquo;the last 20%&amp;rdquo;.&lt;/p&gt;
&lt;h3 id=&#34;org-workout&#34;&gt;Org-workout&lt;/h3&gt;
&lt;p&gt;This is a tool for tracking, analysing, planning and plotting workout data which are stored in human readable org files. This project is already on &lt;a href=&#34;https://codeberg.org/jiewawa/org-workout&#34;&gt;Codeberg&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;koreader-import&#34;&gt;Koreader-import&lt;/h3&gt;
&lt;p&gt;A tool for converting highlights from Koreader and importing them into the emacs highlight manager of your choice such as org-remark or paw.&lt;/p&gt;
&lt;h3 id=&#34;eww-filters&#34;&gt;eww-filters&lt;/h3&gt;
&lt;p&gt;A follow on to my eww-rdrview integration. Filters for web pages based on the URL. I chose to modify the HTML before emacs converts it to SXML, so that theoretically filters could be shared with other text based browsers. It already mostly works with w3m-filters&lt;/p&gt;
&lt;h3 id=&#34;meow-paren&#34;&gt;meow-paren&lt;/h3&gt;
&lt;p&gt;Create a lispy-like experience with meow. Overwrite meow vars in normal mode instead of making a new mode. I went into this tool with the idea of packaging it, so the conventions are good, but some logic is still missing.&lt;/p&gt;
&lt;h3 id=&#34;chinese-helpers&#34;&gt;Chinese Helpers&lt;/h3&gt;
&lt;p&gt;I realised that the file containing all my functions regarding learning Chinese and using it in emacs was about 800 lines long. I think some of these can be removed now, but I think other users could get some use out of some parts.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Recently, I have found myself having a bit more free time and have been enjoying hacking on emacs lisp. One of the things that makes emacs so amazing is the community, and I now want to give something back and this post will hopefully keep me accountable.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Useful Emacs commands for reading</title>
      <link>https://jiewawa.me/2024/10/useful-emacs-commands-for-reading/</link>
      <pubDate>Fri, 04 Oct 2024 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2024/10/useful-emacs-commands-for-reading/</guid>
      <description>&lt;p&gt;Since I started using Emacs, I&amp;rsquo;ve written hundreds of functions that I only used once and then were left to rot in the depths of my &lt;code&gt;init.el&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Today I would like to share some simple commands that I wrote when I was just starting off with Emacs that I had forgotten that I had written and assumed that this was the default behaviour as it now seems to natural to me.
A very small amount of the code here will be specific to &lt;code&gt;evil-mode&lt;/code&gt;, but it shouldn&amp;rsquo;t be too difficult to adapt it to work without.&lt;/p&gt;
&lt;h2 id=&#34;removing-visual-fluff&#34;&gt;Removing visual fluff&lt;/h2&gt;
&lt;p&gt;I like to have a clean, distraction free reading experiences in major-modes such as &lt;code&gt;elfeed&lt;/code&gt;, &lt;code&gt;eww&lt;/code&gt;, and &lt;code&gt;nov&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I achieve this by:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Centring the text in a column and increasing padding.&lt;/li&gt;
&lt;li&gt;Hiding the mode-line&lt;/li&gt;
&lt;li&gt;Hiding the cursor&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;centring-text&#34;&gt;Centring text&lt;/h3&gt;
&lt;p&gt;I use &lt;code&gt;olivetti&lt;/code&gt; for centring text and have no complaints.
It works seamlessly for my needs.
In fact, I also enable this in Org-Mode and Markdown-Mode.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/centre-visual-fill-on&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;;; Centre the text in one column&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;visual-line-mode&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;olivetti-body-width&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;olivetti-mode&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/centre-visual-fill-off&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;visual-line-mode&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;kill-local-variable&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;olivetti-body-width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;olivetti-mode&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;hiding-mode-line&#34;&gt;Hiding mode-line&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve seen lots of people do this one and it is useful when wanting to focus.
Unlike the previous commands, this is something that I sometimes toggle so I made an interactive function too.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/kill-modeline&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq-local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mode-line-format&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/restore-modeline&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;kill-local-variable&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;mode-line-format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/toggle-modeline&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;null&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mode-line-format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/restore-modeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/kill-modeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;hiding-the-cursor&#34;&gt;Hiding the cursor&lt;/h3&gt;
&lt;p&gt;This is one that I don&amp;rsquo;t remember seeing anybody else do, but it&amp;rsquo;s a game changer.
When I&amp;rsquo;m reading, I&amp;rsquo;m following with my eyes and I don&amp;rsquo;t care where the cursor is unless I decide that I want to highlight some text.
Again, I want to be able to toggle this quickly so I wrote an interactive function too.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/hide-cursor-evil&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq-local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;evil-default-cursor&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ignore&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq-local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cursor-type&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/show-cursor-evil&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;kill-local-variable&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;evil-default-cursor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;kill-local-variable&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;cursor-type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/toggle-cursor&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;null&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cursor-type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/show-cursor-evil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/hide-cursor-evil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I combine these three ideas into a simple hook that gets ran whenever I open a new buffer in one of my reading modes.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/reading-mode-hook&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/centre-visual-fill-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/hide-cursor-evil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/kill-modeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;figure&gt;&lt;img src=&#34;https://jiewawa.me/ox-hugo/screenshot-2024-10-04-114402.png&#34;
			alt=&#34;Figure 1: Screenshot showing Org Mode on the left and eww with cursor hidden on the right&#34;&gt;&lt;figcaption&gt;
			&lt;p&gt;&lt;span class=&#34;figure-number&#34;&gt;Figure 1: &lt;/span&gt;Screenshot showing Org Mode on the left and eww with cursor hidden on the right&lt;/p&gt;
		&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;navigating&#34;&gt;Navigating&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve seen takes on the previous ideas many times while reading other Emacs users&amp;rsquo; blogs, but I haven&amp;rsquo;t seen many users describe how they move around buffers that are primarily meant to be read.&lt;/p&gt;
&lt;p&gt;Initially I tried using a form of paging, but I found it tedious to have to scan for where I left off before I scrolled down.&lt;/p&gt;
&lt;p&gt;Ultimately, I settled on the following logic, which was very simple to implement:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the cursor is visible, move the cursor up or down one line&lt;/li&gt;
&lt;li&gt;If the cursor is not visible, scroll the buffer up or down one line&lt;/li&gt;
&lt;/ul&gt;
&lt;!--listend--&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my-view-down&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;null&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cursor-type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;scroll-up-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;next-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my-view-up&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;null&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cursor-type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;scroll-down-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;previous-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;tying-it-all-together&#34;&gt;Tying it all together&lt;/h2&gt;
&lt;p&gt;I could have come up with a minor mode for enabling this in each major mode, but I like how this reminds me of a time when I didn&amp;rsquo;t spend so long dicking about with functions that I only use once.&lt;/p&gt;
&lt;p&gt;Here is a simple example configuration of how I have &lt;code&gt;elfeed&lt;/code&gt; set up.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;use-package&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elfeed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;:hook&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;elfeed-show-mode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/reading-mode-hook&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;evil-define-key&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;normal&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elfeed-show-mode-map&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;kbd&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;j&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;my-view-down&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;evil-define-key&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;normal&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elfeed-show-mode-map&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;kbd&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;k&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;my-view-up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>More Chinese books I&#39;ve read -  11-20</title>
      <link>https://jiewawa.me/2024/04/more-chinese-books-ive-read-11-20/</link>
      <pubDate>Sat, 20 Apr 2024 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2024/04/more-chinese-books-ive-read-11-20/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been over a year since I wrote about &lt;a href=&#34;https://jiewawa.me/2022/12/my-first-ten-chinese-books/&#34;&gt;the first ten Chinese books I read&lt;/a&gt;, so I think it&amp;rsquo;s time for an update.
I tried only reading books in Chinese in 2023, and I was doing well until I hit a bit of a reading slump and started reading English again.
A list of all the books I&amp;rsquo;ve read can be found &lt;a href=&#34;https://jiewawa.me/reading/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;悟空传-典藏纪念版-今何在-wukong-biography-by-jin-hezai&#34;&gt;《悟空传 - 典藏纪念版》今何在 - Wukong Biography by Jin Hezai&lt;/h2&gt;
&lt;p&gt;This is considered to be one of the first Chinese web novels, from the time before they were thousands of chapters long.
I approached the book the wrong way as I initially thought it was a modern retelling of Journey to the West, and could have been read as a simpler version of the original.
While the language is definitely simpler than the original, it was still quite literary.
Also, I was only vaguely aware of a few of the main characters from the original Journey to the West, so when you meet all the other characters, it probably means a lot more if you are familiar with the original characters.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it?  &lt;strong&gt;Requires prior knowledge&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;Probably the hardest Chinese book I&amp;rsquo;ve read&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;灵幻文论-by-杨夕文-psychic-literary-theory-by-yang-xiwen&#34;&gt;《灵幻文论》by 杨夕文 - Psychic Literary Theory by Yang Xiwen&lt;/h2&gt;
&lt;p&gt;I bought a copy of this book years ago while visiting my wife&amp;rsquo;s family.
It is a book on magic theory by some of China&amp;rsquo;s top magicians.
I found the theory and psychology parts easy to follow, but struggled with following precise instructions and finger placements for sleights.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it to someone who enjoys magic?  &lt;strong&gt;Yes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;Relatively simple&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;开端-祈祷君-reset-by-qidaojun&#34;&gt;《开端》祈祷君 - Reset by Qidaojun&lt;/h2&gt;
&lt;p&gt;This is the book that a very popular Chinese TV show was based on.
Without getting into spoilers, it&amp;rsquo;s a time loop story in which the protagonists enter a loop after the bus they are on explodes.
Having already watched the TV adaptation, I think that the team behind it did a great job by keeping all of the best parts of the book, while adding new parts that I think improved on it.&lt;/p&gt;
&lt;p&gt;In terms of language, this is one of the easiest books I&amp;rsquo;ve read.
It&amp;rsquo;s also not very long, so I would have recommended it if I&amp;rsquo;d read it before the show was out.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it?  &lt;strong&gt;Just watch the TV show&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;Easy&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;紫川第二部-光明王者-老猪-zichuan-volume-2-the-king-of-light-by-lao-zhu&#34;&gt;《紫川第二部 光明王者》老猪 - Zichuan Volume 2: The King of Light by Lao Zhu&lt;/h2&gt;
&lt;p&gt;Continuing on with Zichuan, this is now the second volume.
Having already watched the cartoon which covered most of the first volume, the story of this volume was entirely new to me.
There are a few chapters in this volume that are the best I have read in Chinese and gripped me in ways that not many English books can.&lt;/p&gt;
&lt;p&gt;Language wise, reading this after reading the above books was like putting on a comfy old pair of slippers.
The author likes to use a lot of the same Chengyu throughout the book which served as great way of drilling them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it?  &lt;strong&gt;Yes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;No harder than the first book&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;九州-缥缈录-1-蛮荒-江南-novoland-eagle-flag-1-wasteland-by-jiang-nan&#34;&gt;《九州-缥缈录 1 蛮荒》江南 - Novoland: Eagle Flag 1: Wasteland by Jiang Nan&lt;/h2&gt;
&lt;p&gt;This is the second book I&amp;rsquo;ve read by Jiang Nan and I much preferred it to Dragon Raja.
I have read that the Novoland universe that this series is a part of was originally supposed to be China&amp;rsquo;s answer to Lord of the Rings.
I really enjoyed it, and will probably return to the series at a later date.&lt;/p&gt;
&lt;p&gt;In terms of language, the author uses a different style of language for each province.
For example, this book mostly deals with nomads that definitely feel inspired by Mongolians, and they speak in quite plain language, but I struggled with how they use names.
Whereas one of the other main provinces speak in a more classical/literary style which is difficult in a different way.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it?  &lt;strong&gt;Yes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;Quite difficult&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;看见-柴静-to-see-by-chai-jing&#34;&gt;《看见》柴静 - To see by Chai Jing&lt;/h2&gt;
&lt;p&gt;A nonfiction book that a friend recommended many years ago.
In fact, I believe it was the first Chinese ebook that I ever downloaded.
It&amp;rsquo;s a book written by a TV reporter about her times working stories and what it&amp;rsquo;s like in the Chinese media industry.
There are definitely some stories that are more interesting than others, but I wouldn&amp;rsquo;t say any are bad.
The chapters that stuck with me the most are the ones about the kitten stamper, the tiger, and the one about gay people that she interviewed.&lt;/p&gt;
&lt;p&gt;In some ways nonfiction books often have more difficult language, and this is definitely the case here.
Chai goes into depth on a range of topics and she also likes to repeat certain phrases in different contexts and have them imply different things.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it?  &lt;strong&gt;Yes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;Some parts are quite difficult&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;紫川第三部-铁腕统领-老猪-zichuan-volume-3-iron-fisted-rule-by-lao-zhu&#34;&gt;《紫川第三部 铁腕统领》老猪 - Zichuan Volume 3 - Iron-Fisted Rule by Lao Zhu&lt;/h2&gt;
&lt;p&gt;Another good Zichuan book.
Not as good as the last one, but it&amp;rsquo;s still enjoyable.
There&amp;rsquo;s not really any point talking about it here as I&amp;rsquo;m over a million characters at this point.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it?  &lt;strong&gt;Yes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;I don&amp;rsquo;t struggle with the writing style at all now&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;阳具森林-九把刀-penis-forest-by-giddens-ko&#34;&gt;《阳具森林》九把刀 - Penis Forest by Giddens Ko&lt;/h2&gt;
&lt;p&gt;I was really looking forward to this book.
It was put to me online as a dark comedy by Taiwan&amp;rsquo;s most popular author in which a group of men wish they had bigger penises, but they never stop growing.
It&amp;rsquo;s a good premise, but the book was so childish, and not interesting in the slightest.
The only reason I finished it was because it was so short.&lt;/p&gt;
&lt;p&gt;There were other books I wanted to read by this author, but this book really turned me off.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it?  &lt;strong&gt;Worst Chinese book I&amp;rsquo;ve read&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;Quite easy, but uses some slang&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;推理之王1-无证之罪-紫金陈-burning-ice-by-zijin-chen&#34;&gt;《推理之王1：无证之罪》紫金陈 - Burning Ice by Zijin Chen&lt;/h2&gt;
&lt;p&gt;Read this book now.
I&amp;rsquo;d watched the TV shows of the author&amp;rsquo;s other two works, and even though I liked The Bad Kids, I much preferred this.
I don&amp;rsquo;t want to talk too much about it because I won&amp;rsquo;t be able to stop myself getting into spoilers.&lt;/p&gt;
&lt;p&gt;The language is quite simple and I was rarely needing to look up words.
Also the author uses lots of short chapters, so it was easy to read a chapter whenever you have a few minutes spare.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it?  &lt;strong&gt;My Book of the Year&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;Simple language and structure&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;白马啸西风-金庸-white-horse-neighs-in-the-western-wind-by-jin-yong&#34;&gt;《白马啸西风》金庸 - White Horse Neighs in the Western Wind by Jin Yong&lt;/h2&gt;
&lt;p&gt;I saw that some members of &lt;a href=&#34;https://www.chinese-forums.com/&#34;&gt;Chinese Forums&lt;/a&gt; were reading this book so I decided to join in.
It&amp;rsquo;s another short book and definitely a good introduction to Jin Yong&amp;rsquo;s writing.
I still would recommend reading Gu Long first as I think is language is even easier.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it?  &lt;strong&gt;Yes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;Surprisingly not too difficult&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Another Way of integrating Mozilla Readability in Emacs EWW</title>
      <link>https://jiewawa.me/2024/04/another-way-of-integrating-mozilla-readability-in-emacs-eww/</link>
      <pubDate>Wed, 10 Apr 2024 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2024/04/another-way-of-integrating-mozilla-readability-in-emacs-eww/</guid>
      <description>&lt;p&gt;I was browsing &lt;a href=&#34;https://planet.emacslife.com/&#34;&gt;Planet Emacslife&lt;/a&gt; yesterday when I came across Anand Tamariya&amp;rsquo;s post &lt;a href=&#34;https://lifeofpenguin.blogspot.com/2024/04/mozilla-readability-in-gnu-emacs.html&#34;&gt;Mozilla Readability in GNU Emacs&lt;/a&gt;.
I recently wrote a minor mode that had achieves the same thing, but Anand and I took very different approaches to get the same results.&lt;/p&gt;
&lt;p&gt;Anand used the official Mozilla Readability package, but I use &lt;a href=&#34;https://github.com/eafer/rdrview&#34;&gt;rdrview&lt;/a&gt; which is a port of Mozilla&amp;rsquo;s original program written in C.
The developer claims that &amp;ldquo;the code is closely adapted from the Firefox version and the output is expected to be mostly equivalent.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;He also modified the source code of &lt;code&gt;eww.el&lt;/code&gt;, whereas my approach was to use the &lt;code&gt;eww-retrieve-command&lt;/code&gt; variable which was added in Emacs 28.1. The following is enough to get started, but I wasn&amp;rsquo;t entirely happy with the results.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-retrieve-command&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;rdrview&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;-H&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Since Emacs 29.1, EWW buffers can be automatically renames to give more descriptive names
I typically like it to display the title of the web page.
The following code can be used to accomplish it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my-eww-rename-buffer&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;eq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;major-mode&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;eww-mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;when-let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;plist-get&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-data&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;plist-get&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-data&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;%s *eww*&amp;#34;&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-auto-rename-buffer&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;my-eww-rename-buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;However, the way that rdrview works is that it only displays the main content of a web page and that does not include the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; tags.
I often have many EWW buffers open, so it is very important that I can quickly distinguish each of them without having to opening them.&lt;/p&gt;
&lt;p&gt;By changing the flags provided to the rdrview command, I could prepend the web page with the title.
Then, I simply had to write a function that updates the title in &lt;code&gt;eww-data&lt;/code&gt;, and add the function to &lt;code&gt;eww-after-render-hook&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;define-minor-mode&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-rdrview-mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Toggle whether to use &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`rdrview&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; to make eww buffers more readable.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;:lighter&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; rdrview&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-rdrview-mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-retrieve-command&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;rdrview&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;-T&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;title,sitename,body&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;-H&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;add-hook&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;eww-after-render-hook&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;#&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;eww-rdrview-update-title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-retrieve-command&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;remove-hook&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;eww-after-render-hook&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;#&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;eww-rdrview-update-title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-rdrview-update-title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Change title key in &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`eww-data&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; with first line of buffer.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;It should be the title of the web page as returned by &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`rdrview&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;point-min&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;plist-put&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-data&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;string-trim&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;thing-at-point&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;line&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;eww--after-page-change&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s all you really need to use this minor mode, but my preferred entry point is toggling it on and off from within EWW.
The regular &lt;code&gt;eww-readable&lt;/code&gt; function is bound to a single key press, and I wanted to also have a function that can be called the same way.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-rdrview-toggle-and-reload&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Toggle &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`eww-rdrview-mode&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; and reload page in current eww buffer.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;eww-rdrview-mode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;eww-rdrview-mode&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;eww-rdrview-mode&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;eww-reload&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Generally &lt;code&gt;eww-readable&lt;/code&gt; is good enough at getting rid of the distracting parts of a web page, but there are still times when it doesn&amp;rsquo;t work exactly as I want it to.
There are also times when rdrview doesn&amp;rsquo;t work as I&amp;rsquo;d hoped it to either.&lt;/p&gt;
&lt;p&gt;Since writing the above code, I find that I have been using both methods for removing clutter from web pages. I&amp;rsquo;ll try one and if I&amp;rsquo;m not satisfied, then I&amp;rsquo;ll use the other.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Blogging with Denote and Hugo</title>
      <link>https://jiewawa.me/2024/03/blogging-with-denote-and-hugo/</link>
      <pubDate>Tue, 26 Mar 2024 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2024/03/blogging-with-denote-and-hugo/</guid>
      <description>&lt;aside class=&#34;callout callout-warning&#34; aria-label=&#34;Warning&#34;
style=&#34;margin-bottom: 0;&#34;&gt;
  &lt;strong&gt;⚠️ Warning!&lt;/strong&gt;
  &lt;br&gt;
  The code in this blog post was made obsolete by later versions of Denote. Updated code can be found at the bottom of the page.
&lt;/aside&gt;
&lt;br&gt;
&lt;p&gt;A few months ago, I replaced Org-Roam with Prot&amp;rsquo;s &lt;a href=&#34;https://protesilaos.com/emacs/denote&#34;&gt;Denote&lt;/a&gt; package and have been using it for a while now.
I have mostly been using it to manage my collection of personal notes, but I also want the option to publish any note as a blog post quickly and easily.&lt;/p&gt;
&lt;p&gt;Since starting to use Denote, I am trying to think of notes and public blog posts not as two separate entities, but as a part of a larger knowledge base.
Unless I&amp;rsquo;m writing something specific like notes on a book, which would go in the &lt;code&gt;/books&lt;/code&gt; subdirectory, most notes start their life in the root of my &lt;code&gt;denote-directory&lt;/code&gt; before being moved to a relevant subdirectory.
Blog posts are moved to the &lt;code&gt;/blog&lt;/code&gt; subdirectory.&lt;/p&gt;
&lt;p&gt;With &lt;code&gt;ox-hugo&lt;/code&gt;, you can write all posts in a single Org file, or like I do, you can have a single file for each post.
&lt;code&gt;ox-hugo&lt;/code&gt; also provides a really useful feature for &lt;a href=&#34;https://ox-hugo.scripter.co/doc/auto-export-on-saving/&#34;&gt;auto-exporting on save&lt;/a&gt;. I enabled it by adding the following in the &lt;code&gt;.dir-locals.el&lt;/code&gt; file in the &lt;code&gt;/blog&lt;/code&gt; subdirectory.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-mode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-hugo-auto-export-mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-hugo-section&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;blog&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;the-three-stages-of-a-blog-post&#34;&gt;The three stages of a blog post&lt;/h2&gt;
&lt;p&gt;I make use of Denote&amp;rsquo;s file-naming scheme to easily distinguish between each of the following states that a note can be in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Private note: Located in the root of my &lt;code&gt;denote-directory&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Draft blog post: Located in the &lt;code&gt;/blog&lt;/code&gt; subdirectory, with the keyword &lt;strong&gt;draft&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Published blog post: Located in the &lt;code&gt;/blog&lt;/code&gt; subdirectory, without the keyword &lt;strong&gt;draft&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Below is truncated tree view of my &lt;code&gt;denote-directory&lt;/code&gt;:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--listend--&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── 20230708T141810--books__metanote.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── ........
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── blog
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── ........
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── 20231104T134226--a-dwim-fullscreen-function-for-emacs-and-sway__emacs_linux.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── 20240323T143034--hacking-on-denote-and-hugo__blogging_denote_draft_emacs.org
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;linking&#34;&gt;Linking&lt;/h2&gt;
&lt;p&gt;Prot introduced a new set of link parameters specifically for Denote.
The file&amp;rsquo;s Denote identifier is used to refer to the file you want to link to &lt;code&gt;[[denote:20230708T141810][Books]]&lt;/code&gt; and the title of the file is the description.
I have seen some Emacs users complain that these links are not portable, but for me they are very useful as the links continue to work even when I move files to different subdirectories.&lt;/p&gt;
&lt;p&gt;I modified the included &lt;code&gt;denote-link-ol-export&lt;/code&gt; so that links to private notes or drafts are not exported, but links to public notes are exported as Hugo relative links.
There is only one change from the original function, in which I use &lt;code&gt;my/denote-markdown-export&lt;/code&gt; to determine which type of note the link refers to and format it accordingly.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-link-ol-export&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34; Modified version of &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`denote-link-ol-export&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Replace markdown export with &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`my/denote-markdown-export&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Original docstring below:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Export a &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`denote:&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; link from Org files.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;The LINK, DESCRIPTION, and FORMAT are handled by the export
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;backend.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;path-id&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-link--ol-resolve-link-to-target&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:path-id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file-relative-name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;car&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;path-id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file-name-sans-extension&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cdr&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;path-id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;desc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;concat&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;denote:&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cond&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;eq&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;a href=\&amp;#34;%s.html\&amp;#34;&amp;gt;%s&amp;lt;/a&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;eq&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;latex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;\\href{%s}{%s}&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;replace-regexp-in-string&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;[\\{}$%&amp;amp;_#~^]&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;\\\\\\&amp;amp;&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;eq&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;texinfo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;@uref{%s,%s}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;eq&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;ascii&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;[%s] &amp;lt;denote:%s&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;desc&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;; NOTE 2022-06-16: May be tweaked further&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;eq&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;md&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/denote-markdown-export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-markdown-export&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Format the way Denote links are exported to markdown.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  If LINK is considered private or a draft, return DESC.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  If LINK is considered a public note, format it as a Hugo relative link. &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-get-path-by-id&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;string-match&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;/blog&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;%s&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;string-match&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;_draft&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;%s&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;[%s]({{&amp;lt; relref \&amp;#34;%s\&amp;#34; &amp;gt;}})&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;nv&#34;&gt;desc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-sluggify-title&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-retrieve-filename-title&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-link-set-parameters&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;denote&amp;#34;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:export&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;#&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/denote-link-ol-export&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With that, I am able to covert the following Org-Mode links:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This is a private note: [[&lt;span class=&#34;na&#34;&gt;denote:20230708T141810&lt;/span&gt;][&lt;span class=&#34;nt&#34;&gt;Books&lt;/span&gt;]]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This is a draft blog post: [[&lt;span class=&#34;na&#34;&gt;denote:20240323T143034&lt;/span&gt;][&lt;span class=&#34;nt&#34;&gt;Hacking on Denote and Hugo&lt;/span&gt;]]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This is a published blog post: [[&lt;span class=&#34;na&#34;&gt;denote:20231104T134226&lt;/span&gt;][&lt;span class=&#34;nt&#34;&gt;A DWIM fullscreen function for Emacs and Sway&lt;/span&gt;]]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Into this Markdown in which only public notes are exported:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This is a private note: Books
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This is a draft blog post: Hacking on Denote and Hugo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This is a published blog post: [&lt;span class=&#34;nt&#34;&gt;A DWIM fullscreen function for Emacs and Sway&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;{{&amp;lt; relref &amp;#34;a-dwim-fullscreen-function-for-emacs-and-sway&amp;#34; &amp;gt;}}&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;moving-between-the-three-stages&#34;&gt;Moving between the three stages&lt;/h2&gt;
&lt;p&gt;The following code requires Denote version 2.3.0 as &lt;code&gt;my/insert-hugo-export-file-name&lt;/code&gt; makes use of the &lt;code&gt;denote-sluggify-title&lt;/code&gt;, if you are using an earlier version of Denote, you can replace that function with &lt;code&gt;denote-sluggify&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Changing a note from a  draft is quite simple.
&lt;code&gt;my/denote-convert-note-to-blog-post&lt;/code&gt; is a wrapper for simple functions that do the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Move file to &lt;code&gt;/blog&lt;/code&gt; subdirectory&lt;/li&gt;
&lt;li&gt;Add Denote keyword &lt;strong&gt;draft&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;#+hugo_draft: t&lt;/code&gt; to file metadata&lt;/li&gt;
&lt;li&gt;Sluggify Denote title and add &lt;code&gt;#+export_file_name&lt;/code&gt; to file metadata&lt;/li&gt;
&lt;/ol&gt;
&lt;!--listend--&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/insert-hugo-draft-status&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Add metadata to current org-mode file marking it as a Hugo draft.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;search-forward&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;filetags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;end-of-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;insert&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;\n#+hugo_draft: t &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/insert-hugo-export-file-name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Add metadata to current org-mode file containing export file name.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  Export File Name is returned by &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`denote-retrieve-title-value&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;search-forward&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;filetags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;end-of-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;insert&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;s&#34;&gt;&amp;#34;\n#+export_file_name: %s.md&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-sluggify-title&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-retrieve-title-value&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;org&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/move-current-buffer-file-to-subdirectory&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;subdirectory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Move file of current buffer to SUBDIRECTORY seamlessy.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  There should be no discernable difference in the buffer&amp;#39;s appearance.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;input-file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;output-file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;concat&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-directory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;nv&#34;&gt;subdirectory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file-relative-name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;window-pos&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;window-start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;cursor-pos&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;save-buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rename-file&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;input-file&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;output-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;find-file&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;output-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;set-window-start&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;selected-window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;window-pos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cursor-pos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;kill-buffer&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;get-file-buffer&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;input-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-convert-note-to-blog-post&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Mark file of current Denote buffer to be marked as a draft blog post.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/move-current-buffer-file-to-subdirectory&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;blog/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-keywords-add&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;draft&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/insert-hugo-draft-status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/insert-hugo-export-file-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To change a note from a draft to a public note, &lt;code&gt;my/denote-publish-hugo-post&lt;/code&gt; is another wrapper around simple functions that do the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Format current date and add &lt;code&gt;#+hugo_publishdate&lt;/code&gt; to file metadata&lt;/li&gt;
&lt;li&gt;Remove Org-Mode &lt;strong&gt;draft&lt;/strong&gt; tag&lt;/li&gt;
&lt;li&gt;Remove &lt;code&gt;#+hugo_draft: t&lt;/code&gt; from file metadata&lt;/li&gt;
&lt;li&gt;Rename file and remove &lt;strong&gt;draft&lt;/strong&gt; from Denote keywords&lt;/li&gt;
&lt;/ol&gt;
&lt;!--listend--&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/insert-hugo-published-date&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s&#34;&gt;&amp;#34;Format the current date and add it to Org-Mode metadata.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;search-forward&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;filetags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;end-of-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;insert&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;concat&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;\n#+hugo_publishdate: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format-time-string&lt;/span&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;%Y-%m-%d&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-remove-draft-tag-from-metadata&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Remove \&amp;#34;draft\&amp;#34; tag from Org-Mode metadata.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;search-forward&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;filetags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;search-forward-regexp&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;:draft\\|draft:&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;line-end-position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;replace-match&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;looking-at&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;:$\\|: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;looking-back&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;delete-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-remove-hugo-draft-status&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Remove Hugo draft entry from Org-Mode metadata.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;search-forward&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;#+hugo_draft: t&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;beginning-of-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;kill-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;kill-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-remove-keyword-from-filename&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;keyword&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Remove Denote keyword \&amp;#34;draft\&amp;#34; from filename of current file.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-rename-file&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-retrieve-filename-title&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;delete&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;keyword&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                              &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-retrieve-keywords-value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;org&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                      &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-publish-hugo-post&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Mark file of current &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`denote&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; buffer to be published as a blog post.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/insert-hugo-published-date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/denote-remove-hugo-draft-status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/denote-remove-draft-tag-from-metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/denote-remove-keyword-from-filename&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;draft&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Are these tweaks going to make me a prolific blogger?
Probably not, but they gave me a good opportunity to craft a comfy setup while also practising some Emacs Lisp.&lt;/p&gt;
&lt;h2 id=&#34;update-2026-04-03&#34;&gt;Update - 2026/04/03&lt;/h2&gt;
&lt;p&gt;An update to Denote broke my &lt;code&gt;my/denote-convert-note-to-blog-post&lt;/code&gt; and &lt;code&gt;my/denote-publish-hugo-post&lt;/code&gt; functions. Here is an updated version. Everything else should work the same.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/insert-hugo-draft-status&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Add metadata to current org-mode file marking it as a Hugo draft.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;search-forward&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;filetags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;end-of-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;insert&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;\n#+hugo_draft: t &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/insert-hugo-export-file-name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Add metadata to current org-mode file containing export file name.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Export File Name is returned by &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`denote-retrieve-title-value&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;search-forward&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;filetags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;end-of-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;insert&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;concat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;\n#+export_file_name: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-sluggify-title&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-retrieve-title-value&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;org&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             &lt;span class=&#34;s&#34;&gt;&amp;#34;.md&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/move-current-buffer-file-to-subdirectory&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;subdirectory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Move file of current buffer to SUBDIRECTORY seamlessy.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;There should be no discernable difference in the buffer&amp;#39;s appearance.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;input-file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;output-file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;concat&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-directory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                             &lt;span class=&#34;nv&#34;&gt;subdirectory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                             &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file-relative-name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;window-pos&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;window-start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;cursor-pos&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;save-buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rename-file&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;input-file&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;output-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;find-file&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;output-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;set-window-start&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;selected-window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;window-pos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cursor-pos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;kill-buffer&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;get-file-buffer&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;input-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/move-denote-file-to-blog-subdirectory&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/move-current-buffer-file-to-subdirectory&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;blog/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/insert-hugo-published-date&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Format the current date and add it to Org-Mode metadata.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;search-forward&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;filetags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;end-of-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;insert&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;concat&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;\n#+hugo_publishdate: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format-time-string&lt;/span&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;%Y-%m-%d&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-remove-draft-tag-from-metadata&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Remove \&amp;#34;draft\&amp;#34; tag from Org-Mode metadata.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;search-forward&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;filetags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;search-forward-regexp&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;:draft\\|draft:&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;line-end-position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;replace-match&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;looking-at&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;:$\\|: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;looking-back&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;delete-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-remove-hugo-draft-status&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Remove Hugo draft entry from Org-Mode metadata.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;search-forward&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;#+hugo_draft: t&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;beginning-of-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;kill-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;kill-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-remove-draft-keyword-from-filename&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Remove denote keyword \&amp;#34;draft\&amp;#34; from filename of current file.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-get-title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;keywords&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;delete&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;draft&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-get-tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;identifier&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-retrieve-filename-identifier&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-rename-file&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;keywords&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;identifier&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-convert-note-to-blog-post&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Mark file of current &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`denote&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; buffer to be marked as a draft blog post.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;keywords&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;append&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-get-tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;quote&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;draft&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-get-title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;identifier&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-retrieve-filename-identifier&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;denote-rename-file&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;keywords&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;identifier&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/move-current-buffer-file-to-subdirectory&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;blog/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/insert-hugo-draft-status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/insert-hugo-export-file-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;save-buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/denote-publish-hugo-post&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Mark file of current &lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;`denote&amp;#39;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; buffer to be published as a blog post.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/insert-hugo-published-date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/denote-remove-hugo-draft-status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/denote-remove-draft-tag-from-metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/denote-remove-draft-keyword-from-filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;save-buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>A DWIM fullscreen function for Emacs and Sway</title>
      <link>https://jiewawa.me/2023/11/a-dwim-fullscreen-function-for-emacs-and-sway/</link>
      <pubDate>Mon, 06 Nov 2023 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2023/11/a-dwim-fullscreen-function-for-emacs-and-sway/</guid>
      <description>&lt;p&gt;For several years now, I have been using the method that Pavel Korytov describes in &lt;a href=&#34;https://sqrtminusone.xyz/posts/2021-10-04-emacs-i3/&#34;&gt;this post&lt;/a&gt; to gain a consistent set of keybindings between Emacs and &lt;a href=&#34;https://swaywm.org/&#34;&gt;Sway&lt;/a&gt;. I have been extremely happy with the setup and I decided that if I ever move away from Sway, I will need to replicate this setup in another window manager.&lt;/p&gt;
&lt;p&gt;I mostly work on a 14 inch laptop screen, so being able to make applications fullscreen is something I find very useful. Previously I had been using the below function for fullscreening windows in Emacs, but having seen how frictionless window management between Emacs and Sway could be, I decided to try a new approach.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;toggle-maximize-buffer&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Toggle maximize buffer&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;one-window-p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my-saved-point&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;set-window-configuration&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my-saved-window-configuration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my-saved-point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my-saved-window-configuration&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;current-window-configuration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;delete-other-windows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To achieve the desired results, it is first necessary to to know what window is active at any time and if it is fullscreen. I will be referring to Emacs as fullscreen if there is only one window in the current frame. To tell if Emacs meets my definition of fullscreen, we can use the built-in &lt;code&gt;one-window-p&lt;/code&gt; function, and I have also written functions to determine if Emacs is the active window, and if Sway is in fullscreen mode.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defconst&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/sway-get-fullscreen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;swaymsg -t get_tree | jq &amp;#39;.. | select(.type?) | select(.focused==true).fullscreen_mode&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defconst&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/sway-get-active-app&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;swaymsg -t get_tree | jq &amp;#39;.. | select(.type?) | select(.focused==true).app_id&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/sway-get-active-app&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Return name of active window in Sway Window Manager as a string.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;shell-command-to-string&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/sway-get-active-app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;string-match&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;\&amp;#34;\\(.+\\)\&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;match-string&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/sway-emacs-active-p&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Return non-nil if Emacs is active window in Sway Window Manager.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;equal&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/sway-get-active-app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;emacs&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/sway-fullscreen-p&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Return non-nil if current Window is fullscreen in Sway Window Manager.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;fullscreen&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;shell-command-to-string&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/sway-get-fullscreen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;eq&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;string-to-number&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fullscreen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The Sway IPC protocol allows for commands to be run from the shell, which means that we can call them from Emacs. I am using the &lt;code&gt;call-process&lt;/code&gt; function to toggle Sway&amp;rsquo;s fullscreen mode and I also wrote a simple function that toggles fullscreen for both Sway and Emacs at the same time as this is the desired outcome when neither are in fullscreen mode or both are in fullscreen mode.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/sway-toggle-fullscreen&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Toggle fullscreen mode in Sway Window Manager.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;call-process&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;swaymsg&amp;#34;&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;fullscreen&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/toggle-emacs-and-sway-fullscreen&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Toggles fullscreen for both Emacs and Sway window manager.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/sway-toggle-fullscreen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;toggle-maximize-buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally, it&amp;rsquo;s just a simple matter of putting everything together in the main function.&lt;/p&gt;
&lt;p&gt;The logic is as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the active window does not belong to Emacs, then call Sway&amp;rsquo;s inbuilt fullscreen command.&lt;/li&gt;
&lt;li&gt;If the active window belongs to Emacs, then do one of the following depending on combinations of Sway and Emacs being fullscreened
&lt;ul&gt;
&lt;li&gt;If both Emacs and Sway are fullscreened or neither are fullscreened, toggle fullscreen for both.&lt;/li&gt;
&lt;li&gt;If Emacs is fullscreened and Sway is not, make Sway fullscreen.&lt;/li&gt;
&lt;li&gt;If Sway is fullscreened and Emacs is not, make Emacs fullscreen.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--listend--&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;my/toggle-fullscreen-dwim&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Fullscreen function to be called from Sway Window Manger.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;If the active window does not belong to Emacs, then call Sway&amp;#39;s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;inbuilt fullscreen command.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;If the active window belongs to Emacs, then do one of the following
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;depending on combinations of Sway and Emacs being fullscreened:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;If both Emacs and Sway are fullscreened or neither are fullscreened,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;toggle fullscreen for both.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;If Emacs is fullscreened and Sway is not, make Sway fullscreen.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;If Sway is fullscreened and Emacs is not, make Emacs fullscreen.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ea&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/sway-emacs-active-p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ef&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;one-window-p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;sf&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/sway-fullscreen-p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;;; emacs not active&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cond&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ea&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/sway-toggle-fullscreen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;c1&#34;&gt;;; both fullscreen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ef&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;sf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/toggle-emacs-and-sway-fullscreen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;c1&#34;&gt;;; emacs fullscreen, sway not fullscreen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ef&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;sf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/sway-toggle-fullscreen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;c1&#34;&gt;;; sway fullscreen, emacs not fullscreen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;sf&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;toggle-maximize-buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;c1&#34;&gt;;; neither fullscreen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;sf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;my/toggle-emacs-and-sway-fullscreen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I then made sure to bind the function in my Sway config.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cfg&#34; data-lang=&#34;cfg&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;bindsym $mod+f exec emacsclient -e &amp;#39;(my/toggle-fullscreen-dwim)&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I have been using this approach for a few days now and I am happy with how it has turned out. As much as I like doing everything in Emacs, there are definitely times where it is impractical. With this approach, I am getting consistent binding across all my applications and I no longer really need to consider what the application is. I can treat them all the same now.&lt;/p&gt;
&lt;h2 id=&#34;caveats&#34;&gt;Caveats&lt;/h2&gt;
&lt;p&gt;The only problem that I have had, is one that I have had ever since I started combining keybindings between Sway and Emacs. When I first turn my PC on, Emacs is not able to locate the Sway socket. In fact, I am unable to run any &lt;code&gt;swaymsg&lt;/code&gt; command from within Emacs. I&amp;rsquo;m sure that it could be fixed, but for now I simply restart Emacs once before I start working in it.&lt;/p&gt;
&lt;p&gt;If anyone has found ways of getting around this or has any further suggestions, I would love to hear them by email or on Mastodon.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>2023/24 Premier League Predictions</title>
      <link>https://jiewawa.me/2023/08/2023/24-premier-league-predictions/</link>
      <pubDate>Thu, 10 Aug 2023 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2023/08/2023/24-premier-league-predictions/</guid>
      <description>&lt;p&gt;I want to get back into the habit of posting on my blog, and I thought a simple post like this would be good in terms of getting me back on track. I didn&amp;rsquo;t spend too much time thinking it through and my opinions could change completely as the transfer window doesn&amp;rsquo;t close for another three weeks.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Manchester City&lt;/li&gt;
&lt;li&gt;Arsenal&lt;/li&gt;
&lt;li&gt;Liverpool&lt;/li&gt;
&lt;li&gt;Chelsea&lt;/li&gt;
&lt;li&gt;Manchester United&lt;/li&gt;
&lt;li&gt;Aston Villa&lt;/li&gt;
&lt;li&gt;Tottenham Hotspur&lt;/li&gt;
&lt;li&gt;Newcastle United&lt;/li&gt;
&lt;li&gt;West Ham United&lt;/li&gt;
&lt;li&gt;Brighton and Hove Albion&lt;/li&gt;
&lt;li&gt;Bournemouth&lt;/li&gt;
&lt;li&gt;Brentford&lt;/li&gt;
&lt;li&gt;Burnley&lt;/li&gt;
&lt;li&gt;Everton&lt;/li&gt;
&lt;li&gt;Crystal Palace&lt;/li&gt;
&lt;li&gt;Fulham&lt;/li&gt;
&lt;li&gt;Nottingham Forrest&lt;/li&gt;
&lt;li&gt;Wolverhampton Wanderers&lt;/li&gt;
&lt;li&gt;Luton Town&lt;/li&gt;
&lt;li&gt;Sheffield United&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>An image sharing menu for swaywm with imv</title>
      <link>https://jiewawa.me/2023/08/an-image-sharing-menu-for-swaywm-with-imv/</link>
      <pubDate>Mon, 07 Aug 2023 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2023/08/an-image-sharing-menu-for-swaywm-with-imv/</guid>
      <description>&lt;p&gt;Recently, I have been wanting to include more images within the notes that I take in Emacs org-mode. Previously I had been using &lt;a href=&#34;https://robbyzambito.me/posts/tips-and-tricks-for-taking-screenshots-and-selecting-text-from-images-on-sway/&#34;&gt;this script&lt;/a&gt; to take screenshots, but it was something that I never really used it to its full potential. I bound the script in my sway config as below:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cfg&#34; data-lang=&#34;cfg&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;bindsym print exec ~/bin/screenshot.sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I had the idea to implement a photo sharing menu similar to what you get on an iPhone. I wanted to be able to see the image and take actions on it with a single key-press. I knew that my current image viewer &lt;code&gt;imv&lt;/code&gt; could be configured with custom key-bindings, so I decided that this would be the best way to approach the problem.&lt;/p&gt;
&lt;p&gt;A quick reference to the &lt;code&gt;imv&lt;/code&gt; manpage revealed that running the program with the &lt;code&gt;-w&lt;/code&gt; flag allows for a custom window title which made it trivial to run custom window rules and enable a centred floating window.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cfg&#34; data-lang=&#34;cfg&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;for_window [title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;imv floating&amp;#34;] {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  floating enable}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For my use case, I realised that it was better for me to save all files to disk and remove the option of copying images directly to the clipboard, so I removed all the necessary options from the file that Robbie wrote above.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;shotdir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/screenshots
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;shotdir&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/screenshot-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date +&lt;span class=&#34;s1&#34;&gt;&amp;#39;%Y-%m-%d-%H%M%S.png&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;screenshot_area_to_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Screenshot area to file&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;screenshot_window_to_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Screenshot focused window to file&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;screenshot_monitor_to_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Screenshot focused monitor to file&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Store each option in a single string seperated by newlines.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$screenshot_window_to_file&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$screenshot_area_to_file&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$screenshot_monitor_to_file&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Prompt the user with tofi.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;choice&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$options&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tofi&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$choice&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$screenshot_area_to_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        grim -g &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;slurp&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        imv -w &lt;span class=&#34;s2&#34;&gt;&amp;#34;imv floating&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$screenshot_window_to_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        grim -g &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;swaymsg -t get_tree &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -j &lt;span class=&#34;s1&#34;&gt;&amp;#39;.. | select(.type?) | select(.focused).rect | &amp;#34;\(.x),\(.y) \(.width)x\(.height)&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        imv -w &lt;span class=&#34;s2&#34;&gt;&amp;#34;imv floating&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$screenshot_monitor_to_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        grim -o &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;swaymsg -t get_outputs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.[] | select(.focused) | .name&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        imv -w &lt;span class=&#34;s2&#34;&gt;&amp;#34;imv floating&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With this done, I could now start defining the commands that I want to use from my menu.&lt;/p&gt;
&lt;h2 id=&#34;the-commands&#34;&gt;The commands&lt;/h2&gt;
&lt;p&gt;At the moment, I only have three commands, and I have been using the first two on a daily basis.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cfg&#34; data-lang=&#34;cfg&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[binds]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Rotate the currently open image by 90 degrees by pressing &amp;#39;R&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;&amp;lt;Shift+R&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;exec mogrify -rotate 90 &amp;#34;$imv_current_file&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Delete and then close an open image by pressing &amp;#39;X&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;&amp;lt;Shift+X&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;exec rm &amp;#34;$imv_current_file&amp;#34;; quit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;fullscreen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;exec wl-copy &amp;#34;[[&amp;#34;&amp;#34;$imv_current_file&amp;#34;&amp;#34;]]&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;e&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;exec sh ~/bin/imv-dired-jump.sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;exec tesseract &amp;#34;$imv_current_file&amp;#34; - | wl-copy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;The first command simply copies a link to the file&amp;rsquo;s location in an org-mode format&lt;/li&gt;
&lt;li&gt;The second runs a script that shows the image in &lt;code&gt;dired&lt;/code&gt; mode in emacs as it is my preferred file manager&lt;/li&gt;
&lt;/ul&gt;
&lt;!--listend--&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Proxy the `swaymsg` command to the focused window.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;imv &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;imv_pid&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$imv_current_file&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;emacsclient -e -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;(dired-jump nil \&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$file&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;\&amp;#34;)&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;killall imv-wayland
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;future-ideas&#34;&gt;Future ideas&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A script for taking an image containing hard coded Chinese subtitles and performing image optimizations with &lt;code&gt;imagemagick&lt;/code&gt; before running running OCR with &lt;code&gt;tesseract&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write an emacs lisp function that automatically an image inline when a link to a buffer is pasted into the buffer&lt;/p&gt;
&lt;p&gt;If you have any further ideas, please let me know by email or on Mastodon.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>My First Ten Chinese Books</title>
      <link>https://jiewawa.me/2022/12/my-first-ten-chinese-books/</link>
      <pubDate>Fri, 30 Dec 2022 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2022/12/my-first-ten-chinese-books/</guid>
      <description>&lt;p&gt;I have been studying Chinese for over 15 years now, but it was only in the last year that I started reading Chinese books. At first, I found it really difficult and I couldn&amp;rsquo;t read more than a few pages before my brain physically started hurting. Over time, I have managed to build up much more endurance and there are even times when I can read for a few hours straight if time allows.&lt;/p&gt;
&lt;p&gt;I regret not starting to read books in my target language earlier as I have seen the impact that it&amp;rsquo;s had not just on my reading but all parts of my language (I tried speaking in an imitation of Gu Long whilst I was reading his novel).&lt;/p&gt;
&lt;p&gt;Now that I have read ten books in Chinese, I thought that I would share some of my thoughts on the books that I read. I will be using a similar system to the one that Olle Linge used in &lt;a href=&#34;https://www.hackingchinese.com/25-books-i-read-in-chinese-last-year/&#34;&gt;this post&lt;/a&gt;, but I will be listing them in the order that I read them.&lt;/p&gt;
&lt;h2 id=&#34;家-巴金-the-family-by-pa-chin&#34;&gt;《家》 巴金 - The Family by Pa Chin&lt;/h2&gt;
&lt;p&gt;Looking back, this book was probably not an ideal first book. The language wasn&amp;rsquo;t particularly difficult, but a combination of its length, the length of its chapters and the fact that the author used a lot of dialect and some homonyms that are different from what is used today, make it a book that I would recommend to somebody a bit further into their reading journey.&lt;/p&gt;
&lt;p&gt;When I was reading it, I remember thinking how amazing it must have felt to be reading it at the time it came out as it felt very revolutionary. The book was a great introspective into Chinese familial roles and it gave me a better understanding of the culture.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it?  &lt;strong&gt;Yes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;Not difficult, but not a good first book&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;凶画-周浩晖-xiong-hua-by-zhou-haohui&#34;&gt;《凶画》 周浩晖 - Xiong Hua by Zhou Haohui&lt;/h2&gt;
&lt;p&gt;I saw this book recommended online and thought that I&amp;rsquo;d try it out as it was a short book, and I was interested in trying out some detective fiction. There were two POVs in the story and I found that one of them was much more interesting than the other. Also, I was not happy with how the book ended. The two detectives essentially dumped all the answers on the reader in the final chapter through lots of exposition.&lt;/p&gt;
&lt;p&gt;In terms of language, the only thing that confused me was all the terminology related to monks and temples.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it? &lt;strong&gt;Not particularly&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it? &lt;strong&gt;Fairly easy&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;鬼望坡-周浩晖-gui-wang-po-by-zhou-haohui&#34;&gt;《鬼望坡》 周浩晖 - Gui Wang Po by Zhou Haohui&lt;/h2&gt;
&lt;p&gt;This was my first time listening to an audio book in Chinese and it was a good experience as far as that aspect went. Whilst being a sequel to 凶画, it could easily be treated as a standalone novel. This book only followed the story of 罗飞, who I found to be the less interesting of the two main characters in the previous instalment. Having said that, I had a much better time with this book.&lt;/p&gt;
&lt;p&gt;It was an interesting story in which the detective helps a man suffering with amnesia solve the mysteries of his past which seem to be somehow related to several deaths on a small island.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it? &lt;strong&gt;More than the last book&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it? &lt;strong&gt;Fairly easy&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;活着-余华-to-live-by-yu-hua&#34;&gt;《活着》 余华 - To Live by Yu Hua&lt;/h2&gt;
&lt;p&gt;After becoming a father, this was my first book back after a long time away from reading Chinese. This book had been recommended to me so many times and it is generally recommended as a good first novel to read in Chinese. The author, Yu Hua, is considered to be one of China&amp;rsquo;s greatest living authors and as most of the characters he writes about our poorly educated, he writes in a very simple and accessible style.&lt;/p&gt;
&lt;p&gt;This book follows the life of Xu Fugui and we see him go from a young man obsessed with gambling and prositutes and we see how the Cultural Revolution affected him and the people around him. It definitely made me want to read more from the author, although I have heard some people saying that Yu Hua&amp;rsquo;s works can be too depressing for them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it? &lt;strong&gt;Yes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it? &lt;strong&gt;Easy&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;撒哈拉的故事-三毛-the-stories-of-the-sahara-by-echo-chan&#34;&gt;《撒哈拉的故事》 三毛 - The Stories of the Sahara by Echo Chan&lt;/h2&gt;
&lt;p&gt;This is another book that had been recommended to me a lot and it was also my first time reading non-fiction in Chinese. In fact, I believe that I have never read any books from this genre in English either.&lt;/p&gt;
&lt;p&gt;That is actually my biggest problem with this book. I wouldn&amp;rsquo;t have read it if it was in English. I felt the need to complete it as it was good reading practice and not because I genuinely enjoyed it. There were some chapters that I really enjoyed. The final chapter, 哭泣的骆驼 was a particular highlight, and there were also some chapters that I found dreadfully dull.&lt;/p&gt;
&lt;p&gt;I can see the appeal of this book, but it just wasn&amp;rsquo;t for me.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it? &lt;strong&gt;If you like this sort of book, then yes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it? &lt;strong&gt;Probably the hardest so far&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;许三观卖血记-余华-chronicle-of-a-blood-merchant-by-yu-hua&#34;&gt;《许三观卖血记》 余华 - Chronicle of a blood merchant by Yu Hua&lt;/h2&gt;
&lt;p&gt;This was my favourite book I read all year in either English or Chinese. I had not seen this book recommended anywhere near as much as To Live, which is by the same author. I simply picked it up because I thought it had an interesting title.&lt;/p&gt;
&lt;p&gt;The book isn&amp;rsquo;t specifically about a man&amp;rsquo;s experiences selling blood, it is instead about the general experiences of a man who occasionally sells his blood to the local hospital to make ends meet. This book is set in a similar time frame to Yu Hua&amp;rsquo;s other book I have read. What really made this book shine for me was the characters and in particular the relationship between the main character Xu Sanguan and his wife and children.&lt;/p&gt;
&lt;p&gt;This is a book that I will definitely read again in the future and it is a book that I have recommended to friends who have don&amp;rsquo;t even have an interest in China. It had that much of an impact on me and it has stuck with me ever since I read it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it?  &lt;strong&gt;Absolutely&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it?  &lt;strong&gt;Quite easy.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;龙族-1-火之晨曦-江南-dragon-raja-1-the-blazing-dawnlight-by-jiang-nan&#34;&gt;《龙族》 1: 火之晨曦 江南 - Dragon Raja 1: The Blazing Dawnlight by Jiang Nan&lt;/h2&gt;
&lt;p&gt;Jiang Nan is considered one of the top fantasy writers in China and the Dragon Raja series is often considered the &amp;ldquo;Chinese Harry Potter&amp;rdquo;, or at least that is how it is marketed.&lt;/p&gt;
&lt;p&gt;It wasn&amp;rsquo;t bad, but I just found the novel to be a bit juvenile and boring. I am no longer at the stage of my life where I would read Harry Potter for fun and I think it is the same for this series. I researched it a bit online before starting reading and most of the people talking about it were remeniscing about how they read it in junior high. This made it seem like a good choice for me as it wouldn&amp;rsquo;t be too difficult. It wasn&amp;rsquo;t difficult, but I also hadn&amp;rsquo;t taken into account that all of the characters would essentially act like thirteen year olds as that was the target audience.&lt;/p&gt;
&lt;p&gt;I have heard that the series gets better, but it&amp;rsquo;s still a big time investment and considering that I didn&amp;rsquo;t particularly enjoy it, I can&amp;rsquo;t see myself continuing with the series anytime soon.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it? &lt;strong&gt;No&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it? &lt;strong&gt;Intermediate&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;流星-蝴蝶-剑-古龙-meteor-butterfly-sword-by-gu-long&#34;&gt;《流星- 蝴蝶- 剑》 古龙 - Meteor, Butterfly, Sword by Gu Long&lt;/h2&gt;
&lt;p&gt;I loved this book. It has been called a ripoff of The Godfather in a Wuxia setting, and that is completely true, but I still loved it. This book was my introduction to Wuxia and I am definitely going to read more books from this genre.&lt;/p&gt;
&lt;p&gt;This was probably the first book that I read in Chinese that I could consider a real &amp;ldquo;page turner&amp;rdquo;. I would often read chapters at a time and just ignore the mental fatigue that comes from reading in a foreign language.&lt;/p&gt;
&lt;p&gt;For a language learner, Gu Long&amp;rsquo;s writing style is great. He uses lots of short sentences, repetition and rhetorical questions. His writing style has also had a big impact on me and I keep wanting to go and read more of his books.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it? &lt;strong&gt;Very much so&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it? &lt;strong&gt;Not difficult&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;紫川-老猪-zichuan-by-lao-zhu&#34;&gt;《紫川》 老猪 - Zichuan by Lao Zhu&lt;/h2&gt;
&lt;p&gt;This is the longest book that I have read in Chinese. In fact, as it was a long running web-novel, I am only about 20% through the novel, but as the printed version is published in ten volumes, I thought it was worth including on this list (and counting as two entries). When I finish it, it will probably be the longest book that I have read. Period.&lt;/p&gt;
&lt;p&gt;The language was not overly difficult and the author tries to keep it light and use lots of humour, but after reading Gu Long, it took me a while to adjust to such long sentences and such a different style. The story was easy to follow and very enjoyable, but I had just watched the cartoon based on the novel before beginning.&lt;/p&gt;
&lt;p&gt;I am definitely going to be aiming to finish this novel next year.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I recommend it? &lt;strong&gt;Yes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How difficult was it? &lt;strong&gt;Quite difficult&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I am happy with the progress that I have been making recently. Particularly in the second half of 2022.&lt;/p&gt;
&lt;p&gt;I spent the last month or so of the year finishing off a few English books that I had on the go, so that I am now able to give Chinese my full attention. I read just over one million characters last year, but I plan to do significantly more than that in 2023. Hopefully it won&amp;rsquo;t be too long before I publish about the next ten books that I read.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>How I track my Chinese reading speed</title>
      <link>https://jiewawa.me/2022/10/how-i-track-my-chinese-reading-speed/</link>
      <pubDate>Mon, 31 Oct 2022 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2022/10/how-i-track-my-chinese-reading-speed/</guid>
      <description>&lt;p&gt;Earlier this year, I read several interesting posts on &lt;a href=&#34;https://www.chinese-forums.com/&#34;&gt;Chinese Forums&lt;/a&gt; in which users recorded their Chinese speed. It was fascinating to see the progress that the users had made and I was curious to try it for myself.&lt;/p&gt;
&lt;p&gt;Most of the users had a workflow that consisted of recording their time in a time tracking application and then manually inputting all times into a spreadsheet. I have come up with my own method which after some tweaking, I now believe to be vastly superior and essentially friction free.&lt;/p&gt;
&lt;p&gt;The key to all of this, rather surprisingly, is &lt;a href=&#34;https://orgmode.org/&#34;&gt;Org-Mode&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You may be wondering what is Org-Mode. This is a difficult question to answer as it is such a powerful tool. However, it is essentially a plain-text system built into Emacs for managing whatever you may need it too.&lt;/p&gt;
&lt;p&gt;Now before you go clicking off, my technique does not rely on Emacs, and I still believe that this system can work well for people who don&amp;rsquo;t use Emacs. In fact, it was important for me that my way of recording could be portable. I don&amp;rsquo;t want to have to keep my laptop at hand when I read.&lt;/p&gt;
&lt;p&gt;I am a big fan of &lt;a href=&#34;https://beorgapp.com/&#34;&gt;Beorg&lt;/a&gt;, a very useful Org-Mode app for iOS. There is a paid extension for tracking time which is essential to how I track many things in my life.&lt;/p&gt;
&lt;p&gt;Even though the way of going about things has changed, the tools that I am using have been a great fit for the job since the very begining. I now want to show you how my technique has evolved and highlight just how powerful and flexible Org-Mode and this technique can be.&lt;/p&gt;
&lt;h2 id=&#34;the-first-attempt&#34;&gt;The first attempt&lt;/h2&gt;
&lt;p&gt;My initial technique was admittedly not great. I made a simple Org heading and just kept clocking every reading session as I went.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;gs&#34;&gt; 活着&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once I finished the book, I worked out how many characters were in the book and then divide that by the time spent reading for my reading speed. In this case I read ~76000 characters in 472 minutes, giving me a reading speed of 161 characters per minute.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-nil&#34; data-lang=&#34;nil&#34;&gt;* DONE 活着
CLOSED: [2022-02-23 Wed 13:41]
:LOGBOOK:
CLOCK: [2022-02-23 Wed 12:59]--[2022-02-23 Wed 13:37] =&amp;gt;  0:38
CLOCK: [2022-02-22 Tue 22:00]--[2022-02-22 Tue 22:08] =&amp;gt;  0:08
CLOCK: [2022-02-22 Tue 21:28]--[2022-02-22 Tue 21:52] =&amp;gt;  0:24
CLOCK: [2022-02-22 Tue 21:08]--[2022-02-22 Tue 21:28] =&amp;gt;  0:20
CLOCK: [2022-02-22 Tue 13:55]--[2022-02-22 Tue 14:21] =&amp;gt;  0:26
CLOCK: [2022-02-22 Tue 12:31]--[2022-02-22 Tue 13:12] =&amp;gt;  0:41
CLOCK: [2022-02-18 Fri 07:55]--[2022-02-18 Fri 08:22] =&amp;gt;  0:27
CLOCK: [2022-02-12 Sat 13:47]--[2022-02-12 Sat 15:04] =&amp;gt;  1:17
CLOCK: [2022-02-12 Sat 13:29]--[2022-02-12 Sat 13:42] =&amp;gt;  0:13
CLOCK: [2022-02-12 Sat 11:41]--[2022-02-12 Sat 11:59] =&amp;gt;  0:18
CLOCK: [2022-02-11 Fri 15:33]--[2022-02-11 Fri 15:34] =&amp;gt;  0:01
CLOCK: [2022-02-09 Wed 20:00]--[2022-02-09 Wed 20:09] =&amp;gt;  0:09
CLOCK: [2022-02-07 Mon 21:00]--[2022-02-07 Mon 21:39] =&amp;gt;  0:39
CLOCK: [2022-01-29 Sat 15:19]--[2022-01-29 Sat 15:46] =&amp;gt;  0:27
CLOCK: [2022-01-29 Sat 14:29]--[2022-01-29 Sat 14:36] =&amp;gt;  0:07
CLOCK: [2022-01-29 Sat 13:33]--[2022-01-29 Sat 13:42] =&amp;gt;  0:09
CLOCK: [2022-01-28 Fri 21:30]--[2022-01-28 Fri 21:54] =&amp;gt;  0:24
CLOCK: [2022-01-28 Fri 20:45]--[2022-01-28 Fri 21:23] =&amp;gt;  0:38
CLOCK: [2022-01-28 Fri 16:20]--[2022-01-28 Fri 16:30] =&amp;gt;  0:10
CLOCK: [2022-01-28 Fri 16:13]--[2022-01-28 Fri 16:16] =&amp;gt;  0:03
CLOCK: [2022-01-28 Fri 15:59]--[2022-01-28 Fri 16:12] =&amp;gt;  0:13
:END:
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This technique was okay, but there were a couple of problems I had with it.&lt;/p&gt;
&lt;p&gt;My main issue is that I don&amp;rsquo;t like how I need to wait so long in order to get back one useful piece of data. It&amp;rsquo;s impossible to know if I&amp;rsquo;m making progress while in the middle of the book. I also used this technique for the second book I read this year, and it took me the best part of a month to realise that I had essentially made no progress.&lt;/p&gt;
&lt;h2 id=&#34;the-second-technique&#34;&gt;The second technique&lt;/h2&gt;
&lt;p&gt;In order to combat this issue, I decided to record my data more regularly, and I was quite happy that I managed to generate 10 data points for this book. I continued using Beorg to record the times and manually copied them over to the following spreadsheet (Yes. Org-Mode can deal with plain-text spreasheets. Also, yes. That is a spreadsheet formula at the bottom.)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt; DONE&lt;/span&gt; 许三观卖血记
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;| Chapter | Time (m) | Characters | Reading speed (cpm) |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;|---------+----------+------------+---------------------|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;|       1 |       30 |       5491 |                 183 |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;|       3 |       54 |      10241 |                 189 |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;|       7 |       99 |      19298 |                 194 |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;|      10 |      126 |      24441 |                 193 |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;|      11 |      139 |      26591 |                 191 |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;|      15 |      173 |      33558 |                 193 |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;|      20 |      226 |      45048 |                 199 |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;|      25 |      295 |      67591 |                 229 |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;|      27 |      348 |      83303 |                 239 |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;|     end |      443 |     105101 |                 237 |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+TBLFM&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: $4=&amp;#39;(/ $3 $2);N&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This new way of doing things wasn&amp;rsquo;t without its own problems. The main one is that it now required a lot more manual input, and that means that I was much more likely to make mistakes while inputting.&lt;/p&gt;
&lt;p&gt;Another problem is that the data is slightly misleading. As the time and character counts represent cumulative counts for the whole book up until that time, the reading speed also represents the speed for the whole book up until that point and is not representative of each reading session. For example my speed for the penultimate entry would have been 296 cpm, but that is not obvious at a glance.&lt;/p&gt;
&lt;h2 id=&#34;the-final-technique&#34;&gt;The final technique&lt;/h2&gt;
&lt;p&gt;The key to my final technique was learning to take advantage of the &lt;code&gt;:PROPERTIES:&lt;/code&gt; attribute in Org-Mode. The following is an example of a single chapter that I read recently.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;gs&#34;&gt; 紫川&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt; DONE&lt;/span&gt; 第1集 第1章
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;CLOSED: &lt;/span&gt;&lt;span class=&#34;cs&#34;&gt;[2022-08-30 Tue 16:16]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 13510
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- &lt;/span&gt;State &amp;#34;DONE&amp;#34;       from &amp;#34;TODO&amp;#34;       [2022-08-30 Tue 16:16]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:LOGBOOK:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;CLOCK: [2022-08-30 Tue 15:56]--[2022-08-30 Tue 16:13] =&amp;gt;  0:17
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;CLOCK: [2022-08-30 Tue 15:33]--[2022-08-30 Tue 15:37] =&amp;gt;  0:04
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;CLOCK: [2022-08-30 Tue 15:13]--[2022-08-30 Tue 15:26] =&amp;gt;  0:13
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;CLOCK: [2022-08-30 Tue 12:36]--[2022-08-30 Tue 13:20] =&amp;gt;  0:44
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I have written two Python scripts for analysing my reading data.&lt;/p&gt;
&lt;p&gt;The first script takes an &lt;code&gt;.epub&lt;/code&gt; file as input and returns a skeleton of the book in which each chapter has a character count attached.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;gs&#34;&gt;  撒哈拉的故事&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 沙漠中的饭店
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 2655
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 结婚记
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 4239
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 悬壶济世
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 4226
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 娃娃新娘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 3874
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 荒山之夜
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 6238
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 沙漠观浴记
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 4208
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 爱的寻求
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 5055
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 芳 邻
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 4457
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 素人渔夫
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 5586
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 死果
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 7161
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 天 梯
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 6983
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 白手成家
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 14393
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 收魂记
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 5054
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 沙巴军曹
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 6980
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 搭车客
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 8138
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 哑 奴
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 8054
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;**&lt;/span&gt; 哭泣的骆驼
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:PROPERTIES:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;:characters: 18123
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;:END:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The second script uses &lt;a href=&#34;https://orgparse.readthedocs.io/en/latest/&#34;&gt;orgparse&lt;/a&gt; to extract all the data from the Org document and extract lots of useful information from it.&lt;/p&gt;
&lt;p&gt;I plan to cover this in a separate post when I have my graphs in a state where I am happier with them. But for now, I would like to share some simple statistics as I just passed one million characters for the year.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Chars tracked: 1006996
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Time recorded: 3 days, 9 hours, and 59 minutes.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Average speed: 205 cpm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I have published the code for both of my scripts on &lt;a href=&#34;https://github.com/jiewawa/org-chinese-reading&#34;&gt;Github&lt;/a&gt;. Hopefully there may be at least one other person in the world who may be interested in such a niche topic.&lt;/p&gt;
&lt;p&gt;Next time I will talk about my data visualisation techniques for this project and then I will write summaries of all the Chinese books that I&amp;rsquo;ve read closer to the end of the year.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>How I use Nitter</title>
      <link>https://jiewawa.me/2022/06/how-i-use-nitter/</link>
      <pubDate>Mon, 06 Jun 2022 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2022/06/how-i-use-nitter/</guid>
      <description>&lt;p&gt;I have made it clear that I am a big fan of Mastodon and the wider fediverse. As far as I&amp;rsquo;m concerned they provide a superior social media experience to traditional platforms.&lt;/p&gt;
&lt;p&gt;My favourite thing about the fediverse is the interesting people I&amp;rsquo;ve met and the fascinating conversations that I&amp;rsquo;ve taken part in. For the longest time, there weren&amp;rsquo;t many football fans to chat with and nowhere to get my football news. Two months ago, I was the only person to have used the Everton hashtag, but now there are at least four other toffees here.&lt;/p&gt;
&lt;p&gt;I am hopeful that in the future, there will be even more people coming in the future. There are times however, when there are things you want to see that aren&amp;rsquo;t posted on the fediverse. There are some local news sources near me who exclusively post on Twitter, and there are a few communities that I am still interested in checking out from time to time.&lt;/p&gt;
&lt;p&gt;There are tools like BirdsiteLIVE, an ActivityPub sever which allow you to follow Twitter accounts seamlessly, and I do use it to follow a select few accounts. It comes with its own drawbacks though. Through no fault of its own, it&amp;rsquo;s an underwhelming experience dealing with accounts that retweet or quote tweet a lot. This is not a deal-breaker for me and I&amp;rsquo;d prefer not to have it on my main timeline. I don&amp;rsquo;t want to use Mastodon as a Twitter client. Likewise, I don&amp;rsquo;t want to pollute my RSS reader with many short tweets and retweets.&lt;/p&gt;
&lt;h2 id=&#34;enter-nitter&#34;&gt;Enter Nitter&lt;/h2&gt;
&lt;p&gt;Nitter describes itself as a &amp;ldquo;free and open source alternative Twitter front-end focused on privacy and performance&amp;rdquo;. I have known about Nitter for a long time, but I had put off using it properly as I was waiting for the developer to implement account following as they have planned on the road map.&lt;/p&gt;
&lt;p&gt;It was recenly brought to my attention that you can display multiple accounts at once by putting a comma between the handles. I mostly browse social media on my iPhone and I wanted to do the same with Nitter. The problem is that editing URLs in safari is a horrible experience everytime I want to follow or unfollow somebody.&lt;/p&gt;
&lt;p&gt;Siri Shortcuts is a powerful automation tool on iOS. I recommend checking it out if you haven&amp;rsquo;t already. I use two simple shortcuts and a note called Nitter in the default Apple Notes application to make managing my subscriptions a much more pleasant experience.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://jiewawa.me/ox-hugo/nitter.jpg&#34;
			alt=&#34;Figure 1: Screenshot showing the Siri Shortcuts described in this blog post&#34;&gt;&lt;figcaption&gt;
			&lt;p&gt;&lt;span class=&#34;figure-number&#34;&gt;Figure 1: &lt;/span&gt;Screenshot showing the Siri Shortcuts described in this blog post&lt;/p&gt;
		&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&#34;open-nitter&#34;&gt;Open Nitter&lt;/h3&gt;
&lt;p&gt;My Nitter note is a list of accounts that I want to follow. Each username is on a new line and there are no &amp;ldquo;@&amp;rdquo; symbols.&lt;/p&gt;
&lt;p&gt;The first shortcut I made combines each username with a comma as a separator, then appends that to the Nitter instance of my choice before opening with Safari. I have to run the extension every time I make a change to my Nitter Note, but it&amp;rsquo;s the best solution that I could think of at the time.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.icloud.com/shortcuts/d419afc7696f454d8177e95dbdff8ac7&#34;&gt;My Nitter shortcut on iCloud&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;follow-on-nitter&#34;&gt;Follow on Nitter&lt;/h3&gt;
&lt;p&gt;Siri Shortcuts is a really interesting solution on iOS and I wanted to play around with it some more. My second shortcut was really more about seeing what I could do within a shortcut.&lt;/p&gt;
&lt;p&gt;Say I&amp;rsquo;m browing Nitter in safari and I come across and profile that I&amp;rsquo;d like to follow. Now I can open the share menu and press the &amp;ldquo;Follow on Nitter&amp;rdquo; button and the user&amp;rsquo;s username is instantly appended to my Nitter note. After following a new account, I still need to run my first shortcut for everything to be updated.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.icloud.com/shortcuts/a14051541c9e437db73cadf822471f4c&#34;&gt;My Nitter Follow Shortcut on iCloud&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;For the final few years before I deleted Twitter, I hardly ever posted. I was so annoyed with the official app, too. It seemed as though only one in five tweets was something that I was actually interested in, with the rest being adverts or &amp;ldquo;such and such liked so and so&amp;rsquo;s tweet&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;My experience with Nitter has been overwhelmingly positive. I wouldn&amp;rsquo;t have thought it possible to extract all the value from Twitter, while removing all the rubbish and packaging it into such a wonderful tool.&lt;/p&gt;
&lt;p&gt;As much as I&amp;rsquo;d like for the fediverse to be able to meet 100% of my social media needs, it&amp;rsquo;s just not quite there yet. I&amp;rsquo;m okay with that though because I have such a great tool for browsing Twitter.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Summer 2022 TBR</title>
      <link>https://jiewawa.me/2022/03/summer-2022-tbr/</link>
      <pubDate>Thu, 31 Mar 2022 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2022/03/summer-2022-tbr/</guid>
      <description>&lt;p&gt;I said that I wanted to read eight books in the first three months of 2022, and I did manage to finish eight. However three of them were leftovers from last year.&lt;/p&gt;
&lt;p&gt;I have been quite busy recently and haven&amp;rsquo;t done as much reading as I would have liked. Also, I noticed that I don&amp;rsquo;t really have the time for listening to audiobooks for long stretches during the day. I was mostly listening to them in bed, and it got to the point where I thought that I might as well be reading on my Kindle.&lt;/p&gt;
&lt;h2 id=&#34;spring-summary&#34;&gt;Spring summary&lt;/h2&gt;
&lt;p&gt;The Greenbone Saga by Fonda Lee is already up there with my all time favourite series. It had so many things that appealed to me. I really enjoyed all the scheming and clan politics and I could really get into the minds of the characters.&lt;/p&gt;
&lt;p&gt;I timed myself reading 活着, and I read it in just under 8 hours. At ~120,000 characters, that gives me a respectable Chinese reading speed of ~250cpm. This book is considered by Chinese learners to be a very easy book. In fact I recently read that the author did this deliberately as the main character who narrates the book has never received formal education.&lt;/p&gt;
&lt;p&gt;I knew that I would enjoy reading River Town by Peter H&lt;/p&gt;
&lt;h2 id=&#34;summer-2022-tbr-list&#34;&gt;Summer 2022 TBR list&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Lord of Chaos by Robert Jordan&lt;/li&gt;
&lt;li&gt;Getting Things Done - the art of stress-free productivity by David Allen&lt;/li&gt;
&lt;li&gt;The Blade Itself by Joe Abercrombie&lt;/li&gt;
&lt;li&gt;Before They Are Hanged by Joe Abercrombie&lt;/li&gt;
&lt;li&gt;Last Argument of Kings by Joe Abercrombie&lt;/li&gt;
&lt;li&gt;1984 by George Orwell&lt;/li&gt;
&lt;li&gt;撒哈拉的故事 by 三毛&lt;/li&gt;
&lt;li&gt;许三观卖血记 by 余华&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There are two books that have jumped from my last TBR to this one. I think I am going to slow down with the Wheel of Time books. During the last three months, there have been times when I&amp;rsquo;ve wanted to revisit this world, but it doesn&amp;rsquo;t have the same pulling power that it did in the past.&lt;/p&gt;
&lt;p&gt;The First Law series by Joe Abercrombie is one that seems to be a bit like marmite. Either it&amp;rsquo;s not for you, or it&amp;rsquo;s one of your favourites of all time. I have seen reviews by people who recommended other books that I like and I think it could be right up my street.&lt;/p&gt;
&lt;p&gt;1984 has been on my Kindle pretty much ever since I got it. I read Animal Farm again last year after reading it in school and it was like seeing it from a different lens. This is one of those books where I&amp;rsquo;d awkwardly nod and pretend to understand what was going on, but it&amp;rsquo;s become such a big part of our culture that I really should give it a go.&lt;/p&gt;
&lt;p&gt;The Chinese book I read last month was not the first I have read. I think I read four last year, but each one was quite an arduous read. After finishing 活着, I was impressed with how natural it felt. I want to read more Chinese books now that I seem to have had a breakthrough. One of these is by the same author as my previous book, while the other is another book that has been recommended by Chinese learners.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Writing a simple CV in Org-Mode</title>
      <link>https://jiewawa.me/2022/03/writing-a-simple-cv-in-org-mode/</link>
      <pubDate>Sun, 13 Mar 2022 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2022/03/writing-a-simple-cv-in-org-mode/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;
&lt;p&gt;The first time I wrote a CV, it was in Microsoft word. Getting the relevant information onto the page was not particularly difficult or time consuming. The difficult part was the formatting. Going in and changing all the margins, font sizes and table properties nearly drove me insane.&lt;/p&gt;
&lt;p&gt;A few years went by and I got sick of having to spend so long formatting after making any simple change, so I tried converting my CV to LaTeX. I had no experience of LaTex at the time, but after several hours of searching online, I had manage to recreate my old CV, and the only visible difference were the fonts.&lt;/p&gt;
&lt;p&gt;Nowadays, whenever I&amp;rsquo;m writing documents, I&amp;rsquo;m using Org-Mode in Emacs. I don&amp;rsquo;t think that there should be any difference for my CV, and now thanks to Org-Mode&amp;rsquo;s ability to export to LaTex, there doesn&amp;rsquo;t need to be. I&amp;rsquo;m quite happy with how it turned out.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://jiewawa.me/ox-hugo/20220311_13h57m06s_grim.png&#34;
			alt=&#34;Figure 1: Screenshot of a sample CV made in Org-mode&#34;&gt;&lt;figcaption&gt;
			&lt;p&gt;&lt;span class=&#34;figure-number&#34;&gt;Figure 1: &lt;/span&gt;Screenshot of a sample CV made in Org-mode&lt;/p&gt;
		&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;how-you-can-do-the-same&#34;&gt;How you can do the same&lt;/h2&gt;
&lt;p&gt;My technique makes heavy use of tables. Luckily for us, Org-Mode has excellent support for plain text tables. This was actually the main reason that I decided to make this conversion in the first place. Tables in LaTeX can be very powerful, but I find that Org-Mode&amp;rsquo;s tables can do everything I need while being much more pleasant to write and manage.&lt;/p&gt;
&lt;p&gt;One thing worth noting is that because I wanted cells in the right hand column to be two or three rows tall, I have to add a physical line break as seen below.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+ATTR_LATEX&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: :environment tabular :align {L!{\VRule}R}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s&#34;&gt;|---------------+-------------------------------------------------------|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s&#34;&gt;| 09/2021-      | *Job title, Company name*                             |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s&#34;&gt;|               | Something I did whilst working for the company        |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s&#34;&gt;|---------------+-------------------------------------------------------|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s&#34;&gt;| 10/20-08/2021 | *Another title, Another company*                      |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s&#34;&gt;|               | A description of what my role at the company entailed |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s&#34;&gt;|               | My achievements within that role                      |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s&#34;&gt;|---------------+-------------------------------------------------------|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;the-latex&#34;&gt;The LaTeX&lt;/h2&gt;
&lt;p&gt;The only packages that need to be installed on top of the standard &lt;code&gt;texlive-core&lt;/code&gt; I got from my package manager are &lt;code&gt;titlesec&lt;/code&gt; and &lt;code&gt;titling&lt;/code&gt;. I installed them with &lt;code&gt;tllocalmgr&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I keep all of the necessary LaTeX in a seperate org file that I call as a setup file, but you could also have them in the header of your main file. Most of this was directly transferred from my old CV.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+DATE&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+OPTIONS&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: toc:nil num:nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_CLASS&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: article&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_CLASS_OPTIONS&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: [8pt,a4paper]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Hide page number&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \pagenumbering{gobble}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Setup packages to be used&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \usepackage{array, xcolor, bibentry}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \usepackage[margin=2cm]{geometry}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \usepackage{titlesec}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \usepackage{titling}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Table aesthetics&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \definecolor{lightgray}{gray}{0.8}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \newcolumntype{L}{&amp;gt;{\raggedleft}p{0.14\textwidth}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \newcolumntype{R}{p{0.78\textwidth}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \newcommand\VRule{\color{lightgray}\vrule width 0.5pt}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \renewcommand{\hline}{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Indentation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \setlength{\parindent}{0pt}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Subtitles&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+latex_header&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \titleformat{\section}{\bfseries}{}{0em}{}[\titlerule]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \titlespacing{\section}{0pt}{5pt}{5pt}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Header&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+LaTeX_HEADER&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: \renewcommand{\maketitle}{\begin{center}{\LARGE\bfseries \theauthor} \vspace{5pt} \smallbreak \thetitle \end{center}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I had to make two small additions to get my desired output. These are the two instances of &lt;code&gt;\renewcommand&lt;/code&gt; that you can see above.&lt;/p&gt;
&lt;p&gt;Because of how I had set up my tables, the exporter wanted to draw a horizontal line between each row. I didn&amp;rsquo;t have these in my old LaTeX document, and I found that the easiest way to solve this issue was to set &lt;code&gt;\hline&lt;/code&gt; to do nothing.&lt;/p&gt;
&lt;p&gt;The other change is a bit more of a hack and it involves the displaying of the header at the top of the document. I ended up putting some personal information as the title of the document, and while it is not ideal it is the simplest way of dealing with it. I probably could have done it as a subtitle, but I&amp;rsquo;m happy enough with how I&amp;rsquo;ve done it here, even if it is a hack.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# -*- eval: (org-cv-local-variables)  -*-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+TITLE&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: My address --- My email address --- My phone number&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+AUTHOR&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: Jiewawa&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cs&#34;&gt;#+SETUPFILE&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;: ~/notes/setup/cv_setup.org&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally, there are a few variables that I wanted to set when loading the file. I hadn&amp;rsquo;t installed any additional packages ontop of the default &lt;code&gt;texlive-core&lt;/code&gt; from my package manager. Disabling the two variables below allow the document to compile without errors.&lt;/p&gt;
&lt;p&gt;The other option is more a matter of personal preference. I normally have &lt;code&gt;olivetti-mode&lt;/code&gt; enabled in Org-Mode buffers as I like having a narrow and central column for writing, but I decided to disable it for this current file because some of the tables exceed the text body width.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;org-cv-local-variables&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq-local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;org-latex-with-hyperref&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;setq-local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;org-latex-default-packages-alist&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;olivetti-mode&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;why-would-you-want-to-do-this&#34;&gt;Why would you want to do this?&lt;/h2&gt;
&lt;p&gt;Besides wanting to spend as much time as possible within Org-Mode, generating a CV this way has many practical uses. I feel as though I&amp;rsquo;m finally at a point where the next time I need to update my CV, I won&amp;rsquo;t need to completely change the format and can just make the necessary changes in a few minutes and get on with more important things, like configuring Emacs.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Spring 2022 TBR</title>
      <link>https://jiewawa.me/2022/01/spring-2022-tbr/</link>
      <pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2022/01/spring-2022-tbr/</guid>
      <description>&lt;p&gt;2021 was the year in which I became a reader. I read more books last year than I probably had in the last ten years combined.&lt;/p&gt;
&lt;p&gt;Having said that, there are still parts of my reading workflow that I would like to change. Throughout the year, there were times when I had more than one book on the go, but I would say that it was more common that I was reading one book at a time.&lt;/p&gt;
&lt;p&gt;There is nothing wrong with this, but I know that I am the sort of person who spends a lot of time researching things of little significance. Because of this, there were several times when I had finished reading a book and would then spend a day or two deciding what to read next.&lt;/p&gt;
&lt;p&gt;I want to remedy this by choosing all the books that I want to read for the next three months ahead of time and getting them ready so that I can reduce the amount of time where I have no book on the go.&lt;/p&gt;
&lt;p&gt;There are two books that I started reading before the end of last year that I haven&amp;rsquo;t finished yet. I won&amp;rsquo;t be including these in the list.&lt;/p&gt;
&lt;h2 id=&#34;the-list&#34;&gt;The list&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Lord of Chaos by Robert Jordan&lt;/li&gt;
&lt;li&gt;A Crown of Swords by Robert Jordan&lt;/li&gt;
&lt;li&gt;Jade City by Fonda Lee&lt;/li&gt;
&lt;li&gt;Jade War by Fonda Lee&lt;/li&gt;
&lt;li&gt;Jade Legacy by Fonda Lee&lt;/li&gt;
&lt;li&gt;Getting Things Done - the art of stress-free productivity by David Allen&lt;/li&gt;
&lt;li&gt;River Town by Peter Hessler&lt;/li&gt;
&lt;li&gt;活着 by 余华&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I really enjoyed the first three books in the Wheel of Time series, but the last two haven&amp;rsquo;t been home runs with me, so if I don&amp;rsquo;t enjoy these two, I doubt that I will continue with the rest of the series. It&amp;rsquo;s pretty weird to feel that I&amp;rsquo;m already too far in to give up, but I&amp;rsquo;m only one third of the way in. I guess that was to be expected with a series of this size.&lt;/p&gt;
&lt;p&gt;The Greenbone Saga by Fonda Lee is a series that I keep on hearing amazing things about. I&amp;rsquo;m excited to start reading it and I expect it to be right up my alley.&lt;/p&gt;
&lt;p&gt;I recently purchased a paper copy of Getting Things Done, which is unusual for me, as I do most of my reading digitally. This is a book that I plan on taking lots of notes from and hopefully I can learn some new things to add to my org-mode workflow.&lt;/p&gt;
&lt;p&gt;My last two books are both China related. A friend of mine is a big Peter Hessler fan and has recommended his books to me on numerous occasions. 活着 is a modern(ish) classic of Chinese literature, some readers might know it better as To Live, which was later adapted to film by Zhang Yimou. It&amp;rsquo;s a book that I have started reading on more than one occasion, but I was never able to string together consistent reading sessions and never got past the twenty percent mark.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Premier League 2020/21 Predictions</title>
      <link>https://jiewawa.me/2021/08/premier-league-2020/21-predictions/</link>
      <pubDate>Thu, 12 Aug 2021 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2021/08/premier-league-2020/21-predictions/</guid>
      <description>&lt;p&gt;A new season of the Premier League is nearly upon us with the first match of the season between Brentford and Arsenal kicking off this Friday evening. Because of this, I thought it would be a good time to make some predicitons for the upcoming season so we can all have a laugh about how much I got wrong come next May.&lt;/p&gt;
&lt;p&gt;There are still over two weeks until the transfer window closes, so I will be updating my predictions at the end of the month, and I will perhaps go into more details for the reasons behind my choices.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;Team&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;Man City&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;Chelsea&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;Man Utd&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;Liverpool&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;5&lt;/td&gt;
					&lt;td&gt;Leicester&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6&lt;/td&gt;
					&lt;td&gt;Tottenham&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;7&lt;/td&gt;
					&lt;td&gt;Arsenal&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;8&lt;/td&gt;
					&lt;td&gt;Aston Villa&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;9&lt;/td&gt;
					&lt;td&gt;Everton&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10&lt;/td&gt;
					&lt;td&gt;Leeds&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11&lt;/td&gt;
					&lt;td&gt;West Ham&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;12&lt;/td&gt;
					&lt;td&gt;Crystal Palace&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;13&lt;/td&gt;
					&lt;td&gt;Wolves&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;14&lt;/td&gt;
					&lt;td&gt;Brighton&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;15&lt;/td&gt;
					&lt;td&gt;Brentford&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;16&lt;/td&gt;
					&lt;td&gt;Southampton&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;17&lt;/td&gt;
					&lt;td&gt;Burnley&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;18&lt;/td&gt;
					&lt;td&gt;Newcastle&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;19&lt;/td&gt;
					&lt;td&gt;Watford&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;20&lt;/td&gt;
					&lt;td&gt;Norwich&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
</description>
    </item>
    
    <item>
      <title>Six months in - How are my goals for the year going?</title>
      <link>https://jiewawa.me/2021/07/six-months-in-how-are-my-goals-for-the-year-going/</link>
      <pubDate>Sun, 04 Jul 2021 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2021/07/six-months-in-how-are-my-goals-for-the-year-going/</guid>
      <description>&lt;p&gt;We&amp;rsquo;re half way through the year now, so I think it is as good as time as any to reflect upon the goals that I set for myself in 2021.
There are some areas in which I am proud of the progress that I made, there are some areas in which I could have done better and there are some that I didn&amp;rsquo;t bother with at all.&lt;/p&gt;
&lt;p&gt;I wanted to see if setting quantifiable and gamified goals would make me more likely to achieve my goals.&lt;/p&gt;
&lt;p&gt;I know that when I set my list of goals, I was being very optimistic.
There were many areas in which I wanted to make improvements in my life and it was unrealistic for me to expect to make so many changes stick.
I knew that and set the bar high on purpose because I was interested to see how I would do with the challenge.&lt;/p&gt;
&lt;p&gt;Without further ado, let&amp;rsquo;s take a look at how I did in each of my categories.
If you would like a reminder of my goals or the thought process behind my system, please read the following link.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://jiewawa.me/blog/2021goals&#34;&gt;My goals for 2021&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;reading&#34;&gt;Reading&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Task&lt;/th&gt;
					&lt;th&gt;Avaliable Points&lt;/th&gt;
					&lt;th&gt;Points so far&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Read 18 English books&lt;/td&gt;
					&lt;td&gt;18&lt;/td&gt;
					&lt;td&gt;15&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Read 6 Chinese books&lt;/td&gt;
					&lt;td&gt;12&lt;/td&gt;
					&lt;td&gt;4&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The reading habit I&amp;rsquo;ve managed to develop in 2021 is the runaway success story of the year.
I have already managed to read more books in the first half of the year than I probably managed to in the last few years combined.&lt;/p&gt;
&lt;p&gt;There were several secrets to my success, but these are the ones that I think helped me the most:&lt;/p&gt;
&lt;h3 id=&#34;build-a-habit-of-reading-every-day&#34;&gt;Build a habit of reading every day&lt;/h3&gt;
&lt;p&gt;I try and take my Kindle with me wherever I go and any time I have the desire to take out my phone as I have been programmed to over the years, I instead take out my Kindle and read a few pages of a book I have on the go.&lt;/p&gt;
&lt;p&gt;I also read every night before bed and it has been a great way of getting in the few final pages of a chapter.
Swapping my phone for a book before bed, has seen the quality of my sleep increase too.&lt;/p&gt;
&lt;h3 id=&#34;embrace-audiobooks&#34;&gt;Embrace audiobooks&lt;/h3&gt;
&lt;p&gt;The best discovery of the year for me has got to be audiobooks.
It took me a while to get into them, but now that I&amp;rsquo;ve gotten used to listening to them, they are my preffered listening material.&lt;/p&gt;
&lt;p&gt;To be honest, I don&amp;rsquo;t know why I didn&amp;rsquo;t get into them sooner.
My friends and family are probably all annoyed at how much I&amp;rsquo;ve been recommending them lately.&lt;/p&gt;
&lt;p&gt;The next step for me is to listen to a Chinese audiobook.
It will be difficult to keep concentration for such a long stretch of time, but I&amp;rsquo;m excited to give it a try.&lt;/p&gt;
&lt;h3 id=&#34;have-more-than-one-book-on-the-go-at-all-times&#34;&gt;Have more than one book on the go at all times&lt;/h3&gt;
&lt;p&gt;This is particularly useful for reading books in a second language.
When reading Chinese books, I generally feel tired after one chapter  and don&amp;rsquo;t want to read another.
The times that I have tried reading a second chapter, I find that I normally don&amp;rsquo;t really take any of it in and have to reread it once I&amp;rsquo;m feeling refereshed.&lt;/p&gt;
&lt;p&gt;I generally like to have one novel, one audiobook and either a non-fiction or Chinese book on the go at any time.&lt;/p&gt;
&lt;p&gt;You can see what books I have read on my Bookwyrm profile.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bookwyrm.social/user/jiewawa/books/read&#34;&gt;My reading list on Bookwyrm&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;blog-posts&#34;&gt;Blog posts&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Task&lt;/th&gt;
					&lt;th&gt;Avaliable Points&lt;/th&gt;
					&lt;th&gt;Points so far&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Write 18 English blog posts&lt;/td&gt;
					&lt;td&gt;18&lt;/td&gt;
					&lt;td&gt;8&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Write 6 Chinese blog posts&lt;/td&gt;
					&lt;td&gt;12&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This is the area of my goals in which I am most dissapointed with my progress.
I&amp;rsquo;ve done a lot of writing but besides my monthly football updates, I&amp;rsquo;ve not really been inclined to share anything.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been wanting everything that I write to be perfect, and I&amp;rsquo;m spending so long writing and rewriting my posts that I never get around to publishing them.
My post about the fediverse took me three months from when I started writing it to when I published it and many, many hours in between.&lt;/p&gt;
&lt;p&gt;The book, Show your Work by Austin Kleon provided me with lots of inspiration for how to go about putting things out there on the internet, but I still worry about people not enjoying my writing even though I know that nobody is reading it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“On the spectrum of creative work, the difference between the mediocre and the good is vast. Mediocrity is, however, still on the spectrum; you can move from mediocre to good in increments. The real gap is between doing nothing and doing something.” &amp;ndash; Clay Shirky&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://bookwyrm.social/book/102208&#34;&gt;Show Your Work on Bookwyrm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I would still like to do more writing and I plan to take part in a #100daystooffload challenge at some point, but it will have to be some way in the future as I have some upcoming commitments that will take up a lot of my time.&lt;/p&gt;
&lt;h2 id=&#34;exercise&#34;&gt;Exercise&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Task&lt;/th&gt;
					&lt;th&gt;Avaliable Points&lt;/th&gt;
					&lt;th&gt;Points so far&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Score 100 goals&lt;/td&gt;
					&lt;td&gt;10&lt;/td&gt;
					&lt;td&gt;3&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;TBD&lt;/td&gt;
					&lt;td&gt;10&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;As of writing this post I&amp;rsquo;m on 32 goals for the year.
It&amp;rsquo;s not bad at all considering that when I wrote my initial post setting my objectives, I was playing football twice a week and now I&amp;rsquo;m only playing once a week and have been limited to 15 games through injury and other commitments.&lt;/p&gt;
&lt;p&gt;Even though I doubt that I will reach my target of 100 goals, this is most likely the one target/resolution (using the word goal in this section was geting confusing) that I will directly transfer to next year and try again.&lt;/p&gt;
&lt;p&gt;With regards to the TBD, I didn&amp;rsquo;t start a new sport this year and doubt that I will in the second half of the year.
This is one that will have to roll over to next year too.&lt;/p&gt;
&lt;h2 id=&#34;programming&#34;&gt;Programming&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Task&lt;/th&gt;
					&lt;th&gt;Avaliable Points&lt;/th&gt;
					&lt;th&gt;Points so far&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Write a Linux application&lt;/td&gt;
					&lt;td&gt;5&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Receive a pull request&lt;/td&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Get 10 stars&lt;/td&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I&amp;rsquo;ve been learning Python on and off for a few years now and have never really done anything of note with it.
My original plan for the year was to write a graphical front end for Beancount, the plain text accounting software, for the Pinephone.&lt;/p&gt;
&lt;p&gt;However I ended up cancelling my order for the Pinephone when my main phone which I need to use for work needed replacing.
I have also recently stopped using Beancount, so this is one project that is not going to see the light of day from me at least.&lt;/p&gt;
&lt;p&gt;After reading the great book, Atomic Habits by James Clear, I realised that my second two goals were really poorly set up.
Basing your habits on the input of other people is just setting yourself up to fail.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s impossible to predict how people online will react to your creative work so it&amp;rsquo;s best to just do it as if nobody is going to see it and just get on with doing it for yourself.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bookwyrm.social/book/37961&#34;&gt;Atomic Habits on Bookwyrm&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;private&#34;&gt;Private&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Task&lt;/th&gt;
					&lt;th&gt;Avaliable Points&lt;/th&gt;
					&lt;th&gt;Points so far&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Private&lt;/td&gt;
					&lt;td&gt;10&lt;/td&gt;
					&lt;td&gt;5&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The biggest change in my life so far this year is that I got engaged.
The proposal itself is something I am quite proud of and it required lots of planning.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://jiewawa.me/blog/engaged&#34;&gt;Post about my engagement&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I gave myself five points for this and I still have a further five points available for private objectives I don&amp;rsquo;t want to reveal just yet.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Task&lt;/th&gt;
					&lt;th&gt;Avaliable Points&lt;/th&gt;
					&lt;th&gt;Points so far&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Total&lt;/td&gt;
					&lt;td&gt;100&lt;/td&gt;
					&lt;td&gt;35&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Overall, I&amp;rsquo;m very happy with 35 points this year.
If I&amp;rsquo;m to get closer to my target by the end of the year, then writing more blog posts is the area in which I need to work the most.&lt;/p&gt;
&lt;p&gt;Having said that, work is starting to get quite busy and I expect that my free time will be limited in the second half of the year.
Reading and football are the two areas which will probably see the biggest impact.&lt;/p&gt;
&lt;p&gt;I expect that come December, I will have accrued more points in the first half of the year than in the second.
Now I just need to keep chipping away at the challenges that I&amp;rsquo;ve set for myself and see how I do.&lt;/p&gt;
&lt;p&gt;There will be an end of year update published in December, that will talk about my progress, what I have learnt and what I plan to do next year.
Having initially set the bar so high for myself and knowing that I would not be able to achive 100 points, I would be happy with 60 points this year.
A solid 2:1.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>An introduction to the Fediverse</title>
      <link>https://jiewawa.me/2021/05/an-introduction-to-the-fediverse/</link>
      <pubDate>Sun, 16 May 2021 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2021/05/an-introduction-to-the-fediverse/</guid>
      <description>&lt;p&gt;When we talk about new social media platforms, people may often refer to them as &amp;ldquo;Facebook Killers&amp;rdquo; or &amp;ldquo;Twitter Slayers&amp;rdquo;.
Generally, I think this is a pretty moot point for comparison.
However, I believe that what I will be introducing to you in this post, the Fediverse, perhaps has a better chance to replace these sites which already have millions and billions of users than any other alternative that I have seen.&lt;/p&gt;
&lt;p&gt;Having said that, I&amp;rsquo;m almost certain that this collection of interconnected services, will get no way near the number of users that Facebook has.
The beautiful thing is that it doesn&amp;rsquo;t have to.&lt;/p&gt;
&lt;p&gt;Take a moment to imagine what it would take to topple these social media giants.
Facebook has already killed enough of the internet, that a &amp;ldquo;Facebook Killer&amp;rdquo; would just be another Facebook.
A much better solution would be to have tens of thousands of smaller community run social media websites that can communicate with each other.
That is the Fediverse in a nutshell.&lt;/p&gt;
&lt;p&gt;The magic of the Fediverse is that its success is not based on how many users it has, how much money it can make advertising to its users, or by selling their data to the highest bidder.
The success of the Fediverse is determined by the communities that are built and the interactions they have.
This was the original promise of social media, before it became easier to say &amp;ldquo;everyone you know is already here&amp;rdquo; and if you&amp;rsquo;re not here you&amp;rsquo;ll miss out.&lt;/p&gt;
&lt;p&gt;People who post on the Fediverse share because they want to share in a way that&amp;rsquo;s different from those on Twitter and Instagram.
On Mastodon and Pixelfed, nobody is trying to go viral or reach certain like counts.
In fact, Pixelfed has recently disabled public like counts and allows you to hide your follower count.
I think this is a great move as young people see social media as a popularity contest and it&amp;rsquo;s widely know the impact that comparing themselves with others online can have on their mental health.&lt;/p&gt;
&lt;h2 id=&#34;what-is-the-fediverse&#34;&gt;What is the Fediverse?&lt;/h2&gt;
&lt;p&gt;Technically speaking, the Fediverse is a collective term for a series of decentralised social networking/media platforms.
By decentralised, I mean that everything is not stored on the servers of one company.
There are thousands of servers that make up the Fediverse, and anyone can set up their own server and join the network.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve seen people making a comparison with email when talking about the distributed nature of these platforms.
Nowadays, we often take it for granted that Gmail users can engage with Outlook users who can in turn have conversations with people on their work&amp;rsquo;s own email system, and they can all have grouped conversations with each other.&lt;/p&gt;
&lt;p&gt;When it comes to social media, there are new platforms popping up all the time, and you may feel you need to join all of them if you want to stay connected with all your friends.
In fact you can quickly find you&amp;rsquo;re spreading yourself thin if you try to keep up with what everybody&amp;rsquo;s posting on their app of choice.
Now imagine if the people you want to follow could just use their favourite site and you could just use yours.&lt;/p&gt;
&lt;p&gt;Facebook is actually already working on (or perhaps has already implemented) a way for Facebook, Instagram and Whatsapp users to talk freely with each other.
It&amp;rsquo;s a good idea in theory, but the way they&amp;rsquo;re going about it, namely breaking Whatsapp&amp;rsquo;s end-to-end encryption is a big problem.
However, I won&amp;rsquo;t talk about it here as I don&amp;rsquo;t want this post to go to off-topic.&lt;/p&gt;
&lt;p&gt;The Fediverse however, was designed with this sort of functionality in mind.
Not only can users of Mastodon, a Twitter parallel, interact with users of other Mastodon servers, they can also follow and engage with users of Pixelfed, the Fediverse&amp;rsquo;s Instagram alternative.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://jiewawa.me/ox-hugo/_20210208_1433171612765684.png&#34;
			alt=&#34;Figure 1: I can respond to a post on Mastodon and it shows up as a comment on Pixelfed&#34;&gt;&lt;figcaption&gt;
			&lt;p&gt;&lt;span class=&#34;figure-number&#34;&gt;Figure 1: &lt;/span&gt;I can respond to a post on Mastodon and it shows up as a comment on Pixelfed&lt;/p&gt;
		&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;There are already thousands of communities for you to join.
Or you can set up your own for you and your mates, or based on any of your interests and you will still be able to follow and interact with the millions of users already using compatible software.&lt;/p&gt;
&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;
&lt;p&gt;This all sounds great, but I have two questions.
Can I poke people?
And does it have stories?&lt;/p&gt;
&lt;p&gt;As the Fediverse is many different platforms that use the same underlying technology, there is nothing stopping a developer from building a platform with these features.
In fact, Pixelfed already has stories.&lt;/p&gt;
&lt;p&gt;Developers can choose what features to add to their software, but there are some that are more or less constant across the Fediverse.&lt;/p&gt;
&lt;p&gt;These services generally avoid many of the problems that users of traditional social media face.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fediverse platforms are free of adverts&lt;/li&gt;
&lt;li&gt;They don&amp;rsquo;t spy on and track your every move&lt;/li&gt;
&lt;li&gt;They&amp;rsquo;re not designed to keep you on their websites for as long as possible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On a technical level, these are some of the main advantages of the Fediverse.
However, I believe that the biggest feature of the Fediverse is the communities it fosters, the wealth of knowledge available and the willingness of people to share it.&lt;/p&gt;
&lt;h2 id=&#34;fediverse-platforms&#34;&gt;Fediverse platforms&lt;/h2&gt;
&lt;p&gt;Many of the popular services that make up the Fediverse take advantage of the ActivityPub protocol.
In theory, this means that developers can design new tools without having to reinvent the wheel, whilst bringing the added benefit of interoperability between servers regardless of exactly which software they&amp;rsquo;re running.&lt;/p&gt;
&lt;p&gt;I have the most experience with the following three platforms:&lt;/p&gt;
&lt;h3 id=&#34;mastodon&#34;&gt;Mastodon&lt;/h3&gt;
&lt;p&gt;Without question, Mastodon is the granddaddy of the fediverse.
The closest comparison would be with Twitter.
For the most part I would say that it is a fair comparison, but Mastodon is closer to what Twitter was like a few years ago.&lt;/p&gt;
&lt;p&gt;For my personal use case, Mastodon is superior to Twitter in almost every way.&lt;/p&gt;
&lt;p&gt;I feel as though Twitter has been turning into Facebook lately, both in terms of features as well as content.
Perhaps I will talk about that more in a future post.&lt;/p&gt;
&lt;p&gt;Mastodon generally has a 500 character limit per post, but this can be changed by each server&amp;rsquo;s administator.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://joinmastodon.org/&#34;&gt;Join Mastodon&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;pixelfed&#34;&gt;Pixelfed&lt;/h3&gt;
&lt;p&gt;Instagram users should feel right at home on Pixelfed.
It&amp;rsquo;s another great service and one that you should definitely consider.&lt;/p&gt;
&lt;p&gt;The developer seems to be aiming for feature parity with Instagram and I think that is great for new users.
I&amp;rsquo;m excited for the launch of the official Pixelfed mobile app as it should be able to bring lots of new users on board.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pixelfed.org/&#34;&gt;Join Pixelfed&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;bookwyrm&#34;&gt;Bookwyrm&lt;/h3&gt;
&lt;p&gt;This is the newest service that I&amp;rsquo;ve started using.
It can be considered an alternative to GoodReads.
Bookwyrm is definitely a young platform, but I believe it has great potential.&lt;/p&gt;
&lt;p&gt;I have never used GoodReads, so I can&amp;rsquo;t make a direct comparison of features or look and feel.
All I can say is that I have been impressed with this piece of software in the short amount of time I have spent with it.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m trying to build a good reading habit this year, and I think it&amp;rsquo;s great that there&amp;rsquo;s a place where I can engage in discussion on books.
Bookwyrm also has good integration with Mastodon, even at this early stage.&lt;/p&gt;
&lt;p&gt;Despite Bookwyrm still being in its infancy, this is a service that I&amp;rsquo;m going to keep on using and hopefully it can continue to grow in popularity.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://joinbookwyrm.com/&#34;&gt;Join Bookwyrm&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;others&#34;&gt;Others&lt;/h3&gt;
&lt;p&gt;There are so many great projects that make up this network and I have not had a chance to use them all.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Peertube: A video sharing platform similar to Youtube&lt;/li&gt;
&lt;li&gt;Lemmy: A link aggregator similar to Reddit&lt;/li&gt;
&lt;li&gt;Friendica: Similar to Facebook or Myspace&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://fediverse.party/en/miscellaneous&#34;&gt;A list of software that makes up the fediverse&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;on-choosing-an-instance&#34;&gt;On choosing an instance&lt;/h2&gt;
&lt;p&gt;An instance is the name used to describe a server that makes up part of the fediverse network.
Each network has their own rules, and their own specialities.
The great things is that making an account on an instance does not bind you to that instance.
There are great tools for exporting your posts and following list so you can upload them to your new home, or you can directly migrate your account to another server and your followers won&amp;rsquo;t even notice.&lt;/p&gt;
&lt;p&gt;In my time on the fediverse, I have had accounts on three Mastodon servers.
Why did I decide to move?&lt;/p&gt;
&lt;p&gt;My first instance, that I used for over a year, was a great introduction to Mastodon.
It had a great local community who were passionate about topics I am interested in and I started building up a list of people I follow on this instance and many others.&lt;/p&gt;
&lt;p&gt;The main problem was that it was very slow for me.
I understand that this is based on the geographic proximity, so I went looking for a new home.&lt;/p&gt;
&lt;p&gt;After having a look online, I found a relatively large instance with incredibly fast loading times for where I am.
However, the problem with this instance was that I saw a lot less posts that I was interested in on the local timeline.&lt;/p&gt;
&lt;p&gt;Finally, I joined my current instance - mastodon.online.
It strikes a good balance between being fast, and despite it being more of an all-purpose instance, I find that after setting up some filters, there is a lot of interesting post on my local timeline.&lt;/p&gt;
&lt;p&gt;Here is a link to my instance and my profile:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mastodon.online&#34;&gt;My Mastodon instance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mastodon.online/@jiewawa&#34;&gt;My Mastodon profile&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Similarly to when I ditched Windows in favour of Linux, when I left Facebook, reduced the amount of time I spent on other platforms and made an account on Mastodon, I knew that there was going to be some degree of sacrifice.
This definitely was the case, as I didn&amp;rsquo;t know anybody on the platform, and it was initially quite unusual and daunting.&lt;/p&gt;
&lt;p&gt;However, just like with my switch to Linux, I&amp;rsquo;ve realised that this switch was the right decsion for me.
There are so many things about the way that the fediverse works, that make it a superior choice for me, and I could never see myself moving back.&lt;/p&gt;
&lt;p&gt;I must have stopped posting on Facebook and Twitter in 2010 and 2015 respectively, and ever since then I just haven&amp;rsquo;t really wanted to share anything online.
The only real online presence I have had in the last five years or so was being part of the social media team for my old football team.&lt;/p&gt;
&lt;p&gt;However, I now feel as though I&amp;rsquo;ve managed to find a home on the internet.
I&amp;rsquo;ve been lurking on Mastodon for almost three years, but as I&amp;rsquo;ve gotten deeper into the fediverse, it inspired me to want to start posting more, it inspired me to set up my own website and start writing more in a way that nothing had managed to before.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Is this a better way of doing New Year&#39;s Resolutions?</title>
      <link>https://jiewawa.me/2020/12/is-this-a-better-way-of-doing-new-years-resolutions/</link>
      <pubDate>Wed, 30 Dec 2020 00:00:00 +0000</pubDate><guid>https://jiewawa.me/2020/12/is-this-a-better-way-of-doing-new-years-resolutions/</guid>
      <description>&lt;h2 id=&#34;new-year-new-me&#34;&gt;New Year, New Me&lt;/h2&gt;
&lt;p&gt;As the year draws to a close, it&amp;rsquo;s once again time for everyone to consider what changes they want to make in their lives.
I&amp;rsquo;m sure that nobody could have predicted how 2020 would have panned out.
Most people probably found themselves with more free time than they had in previous years.
I know I did, but still I feel as though I didn&amp;rsquo;t really make the best use of this free time.&lt;/p&gt;
&lt;p&gt;Last year, my New Year&amp;rsquo;s Resolutions were pretty generic.
Read more.
Do more exercise.
So on and so forth.&lt;/p&gt;
&lt;p&gt;I was reading everyday for the first week or so, until I went to visit the in-laws and my E-Reader ran out of battery and they didn&amp;rsquo;t have any spare chargers.
After that, I more or less read three books in the whole year.
To be honest, that is probably not that different from the year before, so it could be argued that I stuck to my resolution.&lt;/p&gt;
&lt;h2 id=&#34;new-year-s-goal-system&#34;&gt;New Year&amp;rsquo;s Goal System&lt;/h2&gt;
&lt;p&gt;Thinking about this I have realised that I need to implement a whole new style of resolution.
I know that I look at numbers everywhere I go, so I think it would be best for me to set quantifiable goals.
I have heard of people &amp;ldquo;gamifying&amp;rdquo; their lives and I think that this is a great idea too.&lt;/p&gt;
&lt;p&gt;Over the years, I have started so many projects by myself, but I have given up after I lose interest.
Without trying to sound too &amp;ldquo;Fifty Shades of Grey&amp;rdquo;, I have many uncommon interests.
Most of them are the sort of thing I can&amp;rsquo;t start a conversation about down the pub.
I plan to post occasional updates about my goals on this blog.
I want to be able to use this new system to keep me on my toes.&lt;/p&gt;
&lt;h2 id=&#34;point-system&#34;&gt;Point System&lt;/h2&gt;
&lt;p&gt;I have come up with a system in which I have 100 points to be awarded for completing various tasks within certain categories.
Perhaps I will place bets with family and friends about how many points I can achieve before then end of the year.&lt;/p&gt;
&lt;h3 id=&#34;reading&#34;&gt;Reading&lt;/h3&gt;
&lt;p&gt;I have probably read four or five books cover to cover each year for the past few years.
It&amp;rsquo;s not great but it&amp;rsquo;s probably not uncommon either.&lt;/p&gt;
&lt;h4 id=&#34;points--30-points&#34;&gt;Points (30 points)&lt;/h4&gt;
&lt;p&gt;My goal for 2021 is to read at least 24 books, with at least 6 of those being Chinese.
2 books a month doesn&amp;rsquo;t sound too bad does it.
I don&amp;rsquo;t have to read one book every two weeks.
I could read 6 Chinese books starting January 1st, and then spend the rest of the year reading English books to make up the slack.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 point for every English book.&lt;/li&gt;
&lt;li&gt;2 points for every Chinese book.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I may award some bonus points, but I haven&amp;rsquo;t really thought about how I&amp;rsquo;ll do that yet.&lt;/p&gt;
&lt;h3 id=&#34;blog-posts&#34;&gt;Blog Posts&lt;/h3&gt;
&lt;p&gt;This is the first post on this blog, but I have been working on, or more accurately, putting off this blog for a long time now.
Procrastination is one of my worst habits, and it&amp;rsquo;s something I need to work on.
I hope to be able to build a good writing habit over this year and to carry it into the future.&lt;/p&gt;
&lt;h4 id=&#34;points--30-points&#34;&gt;Points (30 points)&lt;/h4&gt;
&lt;p&gt;My goal for 2021 is to write at least 24 blog posts, with at least 6 of those being Chinese.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 point for every English blog post.&lt;/li&gt;
&lt;li&gt;2 points for every Chinese blog post.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;24 blog posts is actually not that many.
I follow people who post more than that in a month.
As this is my first year doing any significant writing for a long time, I decided to aim low and if I surpass it, that&amp;rsquo;s great.&lt;/p&gt;
&lt;p&gt;I am almost certain that I will not be awarding any bonus points for this section.&lt;/p&gt;
&lt;h3 id=&#34;exercise&#34;&gt;Exercise&lt;/h3&gt;
&lt;p&gt;For my exercise portion, I want to split this into two points.&lt;/p&gt;
&lt;h4 id=&#34;football--10-points&#34;&gt;Football (10 points)&lt;/h4&gt;
&lt;p&gt;My goal for 2021 is to score 100 goals in all competitions.
I play a 5-a-side or 7-a-side match a few times a month and a casual kickabout most weekends.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 point for every 10 goals scored&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Is 100 goals in a year reasonable?
It&amp;rsquo;s definitely achievablie.
I scored four last night.
Maybe I shouldn&amp;rsquo;t be including goals scored in my kickabout, but if Pelé can do it, so can I.&lt;/p&gt;
&lt;h4 id=&#34;other-exercise--10-points&#34;&gt;Other exercise (10 points)&lt;/h4&gt;
&lt;p&gt;I want to take up a new sport in the new year, but I haven&amp;rsquo;t decided what I want to do yet.
Because of this, I will leave this section blank for now.
I will update this post once I have decided.&lt;/p&gt;
&lt;h3 id=&#34;programming&#34;&gt;Programming&lt;/h3&gt;
&lt;p&gt;I have been learning to program for the last year.
The language I have been learning is Python, which has many usecases.&lt;/p&gt;
&lt;p&gt;Again, my procrastination has been a problem for me, so I want to give myself some meaningful objectives.&lt;/p&gt;
&lt;h4 id=&#34;points--10-points&#34;&gt;Points (10 points)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;5 points for writing a useful, graphical application for Linux&lt;/li&gt;
&lt;li&gt;3 points if I receive a pull request&lt;/li&gt;
&lt;li&gt;2 points if a project of mine receives 10 stars&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are tasks that rely on other people, so I&amp;rsquo;m not sure if they will actually be completed.
I have started using git lately.
In fact, this blog is the first git project I have published&lt;/p&gt;
&lt;h3 id=&#34;private&#34;&gt;Private&lt;/h3&gt;
&lt;p&gt;While I think it&amp;rsquo;s a good idea to post my objectives publicly so that people can keep me on the right path, I am still a very private person and like to keep a few of these points for private tasks that I am not yet ready to reveal.
When I eventually do an end of year review, I should be able to share these tasks with you then.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Task&lt;/th&gt;
					&lt;th&gt;Points&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Read 18 English books&lt;/td&gt;
					&lt;td&gt;18&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Read 6 Chinese books&lt;/td&gt;
					&lt;td&gt;12&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Write 18 English blog posts&lt;/td&gt;
					&lt;td&gt;18&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Write 6 Chinese blog posts&lt;/td&gt;
					&lt;td&gt;12&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Score 100 goals&lt;/td&gt;
					&lt;td&gt;10&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;TBD&lt;/td&gt;
					&lt;td&gt;10&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Write a Linux application&lt;/td&gt;
					&lt;td&gt;5&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Receive a pull request&lt;/td&gt;
					&lt;td&gt;3&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Get 10 stars&lt;/td&gt;
					&lt;td&gt;2&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Private&lt;/td&gt;
					&lt;td&gt;10&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Hopefully, having published this blog post, my friends and family will also be able to hold me accountible.
I expect my friends to ask how many goals I have scored this year at football, or for a general update.&lt;/p&gt;
&lt;p&gt;I feel optimistic about this upcoming year, and I think that having a system like this in place will help keep me from getting distracted.
Perhaps, this time next year, I will be doing a similar post and implementing improvements to this system.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
