<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Emacs on vxlabs</title>
    <link>https://vxlabs.com/tags/emacs/</link>
    <description>Recent content in Emacs on vxlabs</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 09 Dec 2023 17:20:00 +0200</lastBuildDate>
    <atom:link href="https://vxlabs.com/tags/emacs/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Charl&#39;s super hacky but often working automatic Emacs font size setting</title>
      <link>https://vxlabs.com/2023/12/09/charls-super-hacky-but-often-working-automatic-emacs-font-size-setting/</link>
      <pubDate>Sat, 09 Dec 2023 17:20:00 +0200</pubDate>
      <guid>https://vxlabs.com/2023/12/09/charls-super-hacky-but-often-working-automatic-emacs-font-size-setting/</guid>
      <description>&lt;h2 id=&#34;the-blurb&#34;&gt;The blurb&lt;/h2&gt;&#xA;&lt;p&gt;Below is the emacs-lisp code I&amp;rsquo;ve evolved over the years to setup reasonable font sizes on all the machines where I use Emacs.&lt;/p&gt;&#xA;&lt;p&gt;The main goal is to get the physical / apparent size of the font, in millimetres, to be more similar across all displays and display systems (Different screens across macOS, Windows with and without display scaling, WSL). This sounds like it should be easy, but setting font point size to the same number is in fact interpreted differently on various display systems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing hunspell 1.7.0 for Emacs 29 on Windows</title>
      <link>https://vxlabs.com/2023/11/14/fixing-hunspell-1.7.0-for-emacs-29-on-windows/</link>
      <pubDate>Tue, 14 Nov 2023 14:23:00 +0200</pubDate>
      <guid>https://vxlabs.com/2023/11/14/fixing-hunspell-1.7.0-for-emacs-29-on-windows/</guid>
      <description>&lt;h2 id=&#34;install-and-configure-hunspell&#34;&gt;Install and configure hunspell&lt;/h2&gt;&#xA;&lt;p&gt;Imagine this: For intricate reasons, you have decided to get your Emacs setup working on Windows as well, although you have a perfectly fine and working WSL2 configuration.&lt;/p&gt;&#xA;&lt;p&gt;You&amp;rsquo;re surprised by how well this goes (&lt;code&gt;winget install GNU.Emacs&lt;/code&gt; FTW!), until you decide to setup the hunspell spell checker&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;It starts pretty well, when you are able to install hunspell with a simple &lt;code&gt;winget install FSFhu.Hunspell&lt;/code&gt;, after which you download a set of English dictionaries from &lt;a href=&#34;https://extensions.libreoffice.org/en/extensions/show/english-dictionaries&#34;&gt;the LibreOffice extension&lt;/a&gt;, and then set your &lt;code&gt;DICPATH&lt;/code&gt; environment variable to point to the directory containing all of the unpacked &lt;code&gt;.aff&lt;/code&gt; and &lt;code&gt;.dic&lt;/code&gt; files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Open message:// links with mu4e or fastmail</title>
      <link>https://vxlabs.com/2023/08/08/open-message/-links-with-mu4e-or-fastmail/</link>
      <pubDate>Tue, 08 Aug 2023 12:15:00 +0200</pubDate>
      <guid>https://vxlabs.com/2023/08/08/open-message/-links-with-mu4e-or-fastmail/</guid>
      <description>&lt;p&gt;This is a small variation of the &lt;a href=&#34;https://vxlabs.com/2019/04/20/link-thunderbird-emails-from-emacs-orgmode/&#34;&gt;2019 post on linking to emails from Org mode&#xA;using Thunderbird&lt;/a&gt;, where instead we show how to open the &lt;code&gt;message://&lt;/code&gt; links&#xA;with &lt;code&gt;mu4e&lt;/code&gt; if active, or the &lt;a href=&#34;https://www.fastmail.com/&#34;&gt;fastmail&lt;/a&gt; web-app if it is not.&lt;/p&gt;&#xA;&lt;p&gt;You might remember that &lt;code&gt;message://msg-id-here&lt;/code&gt; links represent one of the better&#xA;ways to link to emails from &lt;a href=&#34;https://cpbotha.net/2023/04/11/note-taking-strategy-2023/&#34;&gt;your PKM systems&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;code&#34;&gt;Code&lt;/h2&gt;&#xA;&lt;p&gt;Below is the code. Let me know in the comments if you have any questions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modify md-roam for frontmatter-less operation</title>
      <link>https://vxlabs.com/2022/09/24/modify-md-roam-for-frontmatter-less-operation/</link>
      <pubDate>Sat, 24 Sep 2022 22:04:00 +0200</pubDate>
      <guid>https://vxlabs.com/2022/09/24/modify-md-roam-for-frontmatter-less-operation/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;My notes database consists primarily of Emacs &lt;a href=&#34;https://orgmode.org/&#34;&gt;Org mode&lt;/a&gt; files, interspersed with&#xA;a small number of markdown files, some of them from previous note-taking&#xA;systems (for example, I went through a &lt;a href=&#34;https://github.com/gollum/gollum&#34;&gt;Gollum&lt;/a&gt; stage early in 2014, according to&#xA;my notes then), and some of them for easier mobile consumption and production.&lt;/p&gt;&#xA;&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/nobiot/md-roam&#34;&gt;nobiot&amp;rsquo;s md-roam Emacs package&lt;/a&gt; which makes it possible&#xA;for these markdown files to show up (in sheep&amp;rsquo;s clothes, as it were) amongst&#xA;all of my usual &lt;a href=&#34;https://www.orgroam.com/&#34;&gt;org-roam&lt;/a&gt; nodes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TypeScript development with Emacs, tree-sitter and LSP in 2022</title>
      <link>https://vxlabs.com/2022/06/12/typescript-development-with-emacs-tree-sitter-and-lsp-in-2022/</link>
      <pubDate>Sun, 12 Jun 2022 22:00:00 +0200</pubDate>
      <guid>https://vxlabs.com/2022/06/12/typescript-development-with-emacs-tree-sitter-and-lsp-in-2022/</guid>
      <description>&lt;p&gt;In this post, I show how to setup Emacs for TypeScript and React (tsx)&#xA;development, with tree-sitter for syntax highlighting and indentation, and LSP&#xA;with the TypeScript compiler (including a plugin for faster eslint), via eglot,&#xA;for code intelligence.&lt;/p&gt;&#xA;&lt;h2 id=&#34;update-on-2022-12-27-emacs-29-has-tree-sitter-built-in&#34;&gt;Update on 2022-12-27: emacs 29 has tree-sitter built-in!&lt;/h2&gt;&#xA;&lt;p&gt;Tree-sitter was merged into Emacs core on November 23 of 2022.&lt;/p&gt;&#xA;&lt;p&gt;The post below is for the situation BEFORE the merge.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re running Emacs 29 or later (as I am at the end of 2022), you should be&#xA;using the built-in tree-sitter. Let me know if you would like to see a new post&#xA;dealing with the new merged situation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Convert Org Mode files to docx with CMake and Pandoc for mobile accessibility</title>
      <link>https://vxlabs.com/2021/09/29/convert-org-mode-files-to-docx-with-cmake-and-pandoc-for-mobile-accessibility/</link>
      <pubDate>Wed, 29 Sep 2021 10:08:00 +0200</pubDate>
      <guid>https://vxlabs.com/2021/09/29/convert-org-mode-files-to-docx-with-cmake-and-pandoc-for-mobile-accessibility/</guid>
      <description>&lt;p&gt;The wonderful Emacs Org mode is the basis for the largest part of my personal&#xA;knowledge management system.&lt;/p&gt;&#xA;&lt;p&gt;However, as I&amp;rsquo;ve &lt;a href=&#34;https://cpbotha.net/2019/09/21/note-taking-strategy-2019/#mobile&#34;&gt;mentioned before, mobile accessibility is its weakest point&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I&amp;rsquo;m going to explain my possibly unconventional new solution to&#xA;the important requirement I mentioned in that note-taking post:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Ideally, I would have easy access to my complete org database and any related&#xA;files.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;As you can easily deduce from the title of this post, the solution involves&#xA;converting all of my org database into docx files, with the main motivation&#xA;that the Dropbox mobile app has &lt;em&gt;excellent&lt;/em&gt; support both for the fast previewing&#xA;and searching through the contents of docx files, while it has none of that&#xA;sort of support for .org or .md files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configure org-roam v2 to update database only when idle</title>
      <link>https://vxlabs.com/2021/07/22/configure-org-roam-v2-to-update-database-only-when-idle/</link>
      <pubDate>Thu, 22 Jul 2021 22:31:00 +0200</pubDate>
      <guid>https://vxlabs.com/2021/07/22/configure-org-roam-v2-to-update-database-only-when-idle/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is reproduced here with permission from &lt;a href=&#34;https://orgmode-exocortex.com/2021/07/22/configure-org-roam-v2-to-update-database-only-when-idle/&#34;&gt;The OrgMode ExoCortex&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/org-roam/org-roam&#34;&gt;org-roam v2&lt;/a&gt;, which was &lt;a href=&#34;https://blog.jethro.dev/posts/org%5Froam%5Fv2/&#34;&gt;recently released&lt;/a&gt;, removed the update database on idle&#xA;functionality (which &lt;a href=&#34;https://github.com/org-roam/org-roam/pull/1032&#34;&gt;I coincidentally contributed&lt;/a&gt;) as part of its&#xA;simplification.&lt;/p&gt;&#xA;&lt;p&gt;I agree with this removal, as I think it makes the most sense to keep the&#xA;org-roam core as simple as possible.&lt;/p&gt;&#xA;&lt;p&gt;That being said, being able to have the org-roam database update only when&#xA;Emacs is idle can be helpful for some folks, like me, who &lt;code&gt;C-x C-s&lt;/code&gt; quite often&#xA;and notice a few hundred millisecond blocking delay on files of a thousand or&#xA;more lines.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Always activate CopyArrivalDate for mbsync</title>
      <link>https://vxlabs.com/2021/03/21/mbsync-copyarrivaldate-yes/</link>
      <pubDate>Sun, 21 Mar 2021 12:44:00 +0200</pubDate>
      <guid>https://vxlabs.com/2021/03/21/mbsync-copyarrivaldate-yes/</guid>
      <description>&lt;p&gt;Recently the great support folks at&#xA;&lt;a href=&#34;https://cpbotha.net/2016/08/06/moving-12-years-of-email-from-gmail-to-fastmail/&#34;&gt;FastMail&lt;/a&gt;&#xA;helped me to debug a rather irritating issue where emails that had languished&#xA;in my inbox for too long, and were then processed by me to end up in the&#xA;&lt;code&gt;Archive&lt;/code&gt; folder, would get the date of archival assigned as the main email&#xA;date, instead of the date of arrival.&lt;/p&gt;&#xA;&lt;p&gt;For example, an email with a date in November of 2020 would get a new date of&#xA;say February 21, 2021, if that&amp;rsquo;s the date that I finally got around to it and&#xA;moved it to the &lt;code&gt;Archive&lt;/code&gt; folder.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GnuPG pinentry via the Emacs minibuffer</title>
      <link>https://vxlabs.com/2021/03/21/gnupg-pinentry-via-the-emacs-minibuffer/</link>
      <pubDate>Sun, 21 Mar 2021 10:12:00 +0200</pubDate>
      <guid>https://vxlabs.com/2021/03/21/gnupg-pinentry-via-the-emacs-minibuffer/</guid>
      <description>&lt;p&gt;On the various and different platforms where I use Emacs and GnuPG encryption,&#xA;I&amp;rsquo;ve traditionally always had a bit of a struggle setting up a suitable&#xA;mechanism for private key passphrase entry, or pinentry.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I landed upon this extremely easy-to-setup and reliable solution&#xA;where Emacs and GnuPG can be configured so that Emacs requests the passphrase&#xA;via its standard minibuffer password entry mechanism, and then passes this&#xA;through to GnuPG.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fix non-display of ivy-rich switch buffer directories in Emacs</title>
      <link>https://vxlabs.com/2020/11/15/fix-ivy-rich-switch-buffer-directories-display-in-emacs/</link>
      <pubDate>Sun, 15 Nov 2020 12:36:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/11/15/fix-ivy-rich-switch-buffer-directories-display-in-emacs/</guid>
      <description>&lt;p&gt;Recently, as I replaced more of my &lt;a href=&#34;https://emacs-helm.github.io/helm/&#34;&gt;Emacs-helm&lt;/a&gt; configuration with &lt;a href=&#34;https://oremacs.com/swiper/&#34;&gt;counsel and&#xA;ivy&lt;/a&gt;, I noticed that &lt;code&gt;ivy-switch-buffer&lt;/code&gt;, when augmented by &lt;a href=&#34;https://github.com/Yevgnen/ivy-rich&#34;&gt;ivy-rich&lt;/a&gt;, was not&#xA;showing the directories of the buffers it was listing.&lt;/p&gt;&#xA;&lt;p&gt;After some Lisp spelunking, I discovered that it was because ivy-rich relies on&#xA;the presence of either the &lt;a href=&#34;https://github.com/bbatsov/projectile&#34;&gt;projectile&lt;/a&gt; package, something I do not wish to have&#xA;in my Emacs configuration, or on &lt;code&gt;project.el&lt;/code&gt;, which I also do not use.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I show how you can get full buffer filenames and project names&#xA;with the lighter-than-projectile and more-robust-than-project.el&#xA;&lt;a href=&#34;https://github.com/technomancy/find-file-in-project&#34;&gt;find-file-in-project&lt;/a&gt;, or how you can bypass the project name functionality&#xA;completely and just get buffer filenames with no extra packages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An Emacs Lisp function to convert attachment: links to file: links for ox-hugo exports</title>
      <link>https://vxlabs.com/2020/07/25/emacs-lisp-function-convert-attachment-to-file/</link>
      <pubDate>Sat, 25 Jul 2020 22:38:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/07/25/emacs-lisp-function-convert-attachment-to-file/</guid>
      <description>&lt;p&gt;You might have noticed &lt;a href=&#34;https://vxlabs.com/2020/07/23/vscode-pylance-type-mismatch-warning/#aside-ox-hugo-exports-with-org-download-screenshots&#34;&gt;the side-note in yesterday&amp;rsquo;s blog post&lt;/a&gt; where I mentioned&#xA;that exporting Orgmode notes with &lt;a href=&#34;https://github.com/abo-abo/org-download&#34;&gt;org-download&lt;/a&gt; attachment-style screenshots to&#xA;blog posts using &lt;a href=&#34;https://ox-hugo.scripter.co/&#34;&gt;ox-hugo&lt;/a&gt; required one to convert &lt;code&gt;[[attachment:...]]&lt;/code&gt;-style&#xA;links to &lt;code&gt;[[file:...][file:...]]&lt;/code&gt;-style links.&lt;/p&gt;&#xA;&lt;p&gt;Because the barrier from private note to possibly useful blog post should be as&#xA;low as possible, I made the below function that will do the required conversion&#xA;for the link under your cursor.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&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;cpb/convert-attachment-to-file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&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;Convert [[attachment:..]] to [[file:..][file:..]]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;elem&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-element-context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;eq&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;elem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;type&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-element-property&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:type&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&#xA;&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;;; only translate attachment type links&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;string=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;attachment&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;;; translate attachment path to relative filename using org-attach API&lt;/span&gt;&#xA;&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;;; 2020-11-15: org-attach-export-link was removed, so had to rewrite&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;link-end&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-element-property&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:end&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;link-begin&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-element-property&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:begin&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&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;;; :path is everything after attachment:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-element-property&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:path&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&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;;; expand that to the full filename&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;fullpath&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-attach-expand&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&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;;; then make it relative to the directory of this org file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;current-dir&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;file-name-directory&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;default-directory&lt;/span&gt;&#xA;&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;p&#34;&gt;)))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;relpath&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;nv&#34;&gt;fullpath&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;current-dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&#xA;&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 the existing link&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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-region&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;link-begin&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;link-end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;;; replace with file: link and file: description&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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 class=&#34;s&#34;&gt;&amp;#34;[[file:%s][file:%s]]&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;relpath&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;relpath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))))))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://emacs.stackexchange.com/a/49068&#34;&gt;This Stack Overflow&lt;/a&gt; answer gave me a great basis using the org-element API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Set severity override of Visual Studio Code Pylance type mismatches for better visual distinction</title>
      <link>https://vxlabs.com/2020/07/23/vscode-pylance-type-mismatch-warning/</link>
      <pubDate>Thu, 23 Jul 2020 22:57:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/07/23/vscode-pylance-type-mismatch-warning/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://devblogs.microsoft.com/python/announcing-pylance-fast-feature-rich-language-support-for-python-in-visual-studio-code/&#34;&gt;Pylance&lt;/a&gt; is Microsoft&amp;rsquo;s new and improved Python language server.&lt;/p&gt;&#xA;&lt;p&gt;I have been using this in my Visual Studio Code remote editing sessions&#xA;(editing Python codes on the machine learning Linux machine next to me, from my&#xA;laptop), and I&amp;rsquo;m enjoying its new type-checking capabilities.&lt;/p&gt;&#xA;&lt;p&gt;Today I discovered a little configuration change that improved my Pylance&#xA;experience, so I thought I&amp;rsquo;d share in case it helps anyone else.&lt;/p&gt;&#xA;&lt;h2 id=&#34;aside-ox-hugo-exports-with-org-download-screenshots&#34;&gt;Aside: ox-hugo exports with org-download screenshots&lt;/h2&gt;&#xA;&lt;p&gt;It was also an excuse to test how &lt;a href=&#34;https://ox-hugo.scripter.co/&#34;&gt;ox-hugo&lt;/a&gt; exports would work for a note&#xA;straight from my daily journal if screenshots were involved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Open WSL2 files in Windows apps using Emacs TRAMP</title>
      <link>https://vxlabs.com/2020/05/21/open-wsl2-files-in-windows-apps-using-emacs-tramp/</link>
      <pubDate>Thu, 21 May 2020 22:46:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/05/21/open-wsl2-files-in-windows-apps-using-emacs-tramp/</guid>
      <description>&lt;p&gt;From the department of how-obscure-can-you-get-really, I present you with this&#xA;neat trick to open &lt;a href=&#34;http://localhost:1313/tags/wsl/&#34;&gt;WSL2&lt;/a&gt; files in their native Windows handlers via Emacs TRAMP&#xA;connection from WSL1 to WSL2.&lt;/p&gt;&#xA;&lt;h2 id=&#34;motivation&#34;&gt;Motivation&lt;/h2&gt;&#xA;&lt;p&gt;My use case is this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On Windows, I use Emacs primarily from WSL1 to manage everything on Windows,&#xA;on WSL1 and on the WSL2 distros I use for development.&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;m often connected to WSL2 via &lt;a href=&#34;http://wikemacs.org/wiki/TRAMP&#34;&gt;TRAMP&lt;/a&gt;, for managing files with dired,&#xA;manipulating the results of simulations, and using &lt;a href=&#34;https://magit.vc/&#34;&gt;the amazing magit&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;When I open e.g. a simulation report in HTML or some other format, I would&#xA;ideally like it to open with my Windows browser.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;method&#34;&gt;Method&lt;/h2&gt;&#xA;&lt;p&gt;The code below is a slightly modified version of &lt;code&gt;crux-open-with&lt;/code&gt; from &lt;a href=&#34;https://github.com/bbatsov/crux&#34;&gt;the crux&#xA;package&lt;/a&gt;, with the one major change that it uses the relevant TRAMP mechanisms&#xA;to spawn a &lt;em&gt;remote&lt;/em&gt; process to open the file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Emacs, WSL, helm-locate and Everything</title>
      <link>https://vxlabs.com/2020/05/09/emacs-wsl-helm-locate-and-everything/</link>
      <pubDate>Sat, 09 May 2020 23:38:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/05/09/emacs-wsl-helm-locate-and-everything/</guid>
      <description>&lt;p&gt;On Windows, running Emacs on WSL (the Windows Subsystem for Linux, or rather&#xA;Linux in Windows), is faster and in my experience an altogether a better&#xA;experience than running native Windows Emacs.&lt;/p&gt;&#xA;&lt;p&gt;However, you will need to do some tweaking to use it to its maximum potential,&#xA;some of which &lt;a href=&#34;https://vxlabs.com/2020/03/15/xdg-open-wsl/&#34;&gt;I have written about before&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I show a small but useful trick to use the brilliant and&#xA;lightning fast &lt;a href=&#34;https://www.voidtools.com/&#34;&gt;Everything search tool&lt;/a&gt; to find directories and files anywhere on&#xA;your Windows system whilst using &lt;a href=&#34;https://github.com/emacs-helm/helm/wiki/Locate&#34;&gt;&lt;code&gt;helm-locate&lt;/code&gt;&lt;/a&gt; from your WSL Emacs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Voice capture org-mode notes and more using Siri Shortcuts on iOS</title>
      <link>https://vxlabs.com/2020/05/01/voice-capture-org-mode-notes-and-more-using-siri-shortcuts-on-ios/</link>
      <pubDate>Fri, 01 May 2020 23:46:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/05/01/voice-capture-org-mode-notes-and-more-using-siri-shortcuts-on-ios/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post originally appeared at &lt;a href=&#34;https://orgmode-exocortex.com/2020/04/30/voice-capture-org-mode-notes-and-more-using-siri-shortcuts-on-ios/&#34;&gt;Org Mode Exocortex&lt;/a&gt;, my Org mode-focused blog,&#xA;on April 30, 2020.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;:ID:       b3c6cee0-567e-4324-9685-f6fd9959d402&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Inspired by &lt;a href=&#34;https://orgmode-exocortex.com/2020/04/28/voice-capture-org-mode-tasks-on-android/&#34;&gt;Stéfan&amp;rsquo;s post explaining how to voice capture TODOs using Google&#xA;Assistant on Android&lt;/a&gt;, I decided to find out how one would go about hooking up&#xA;Siri dictation on iOS to Org mode.&lt;/p&gt;&#xA;&lt;p&gt;It turns out that &lt;a href=&#34;https://support.apple.com/en-us/HT209055&#34;&gt;Siri Shortcuts&lt;/a&gt; is a pretty amazing tool that can be used for&#xA;all kinds of automation on your iPhone or iPad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>xdg-open-wsl: A WSL-specific xdg-open replacement to open files and links using Windows apps.</title>
      <link>https://vxlabs.com/2020/03/15/xdg-open-wsl/</link>
      <pubDate>Sun, 15 Mar 2020 14:01:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/03/15/xdg-open-wsl/</guid>
      <description>&lt;p&gt;TL;DR: Install my WSL-specific xdg-open replacement by following the&#xA;instructions on &lt;a href=&#34;https://github.com/cpbotha/xdg-open-wsl&#34;&gt;the xdg-open-wsl github&#xA;page&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;convert-a-python-script-to-a-python-package-with-poetry&#34;&gt;Convert a Python script to a Python package with Poetry.&lt;/h2&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;https://vxlabs.com/2020/03/07/patch-emacs-org-open-file-using-advice/&#34;&gt;my previous vxlabs&#xA;post&lt;/a&gt;, I explained how to&#xA;use Emacs lisp advising to fix buggy behaviour when opening Windows files from&#xA;Emacs running on WSL.&lt;/p&gt;&#xA;&lt;p&gt;In that post I mentioned my home-grown xdg-open replacement.&lt;/p&gt;&#xA;&lt;p&gt;As I was writing that bit, I wondered how long it would take for the first&#xA;astute reader to wonder about the mentioned script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Patch Emacs org-open-file using advice.</title>
      <link>https://vxlabs.com/2020/03/07/patch-emacs-org-open-file-using-advice/</link>
      <pubDate>Sat, 07 Mar 2020 13:48:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/03/07/patch-emacs-org-open-file-using-advice/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background.&lt;/h2&gt;&#xA;&lt;p&gt;On Windows, I run Emacs on WSL 1 whilst displaying to Windows via &lt;a href=&#34;https://x410.dev/&#34;&gt;the X410&#xA;X-Server&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is currently the best compromise if one wants to interoperate with the&#xA;NTFS side, at least until the WSL 2 developers manage to fix up its &lt;a href=&#34;https://vxlabs.com/2019/12/06/wsl2-io-measurements/&#34;&gt;current&#xA;cross-OS IO performance issues&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;As part of this setup, I have written a small&#xA;&lt;a href=&#34;https://linux.die.net/man/1/xdg-open&#34;&gt;xdg-open&lt;/a&gt; replacement in Python which&#xA;does path translation. This enables me to open any links from Emacs, running on&#xA;WSL 1, using the relevant Windows file handler, no matter whether the file&#xA;finds itself on the Windows or the WSL side of the world.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Improve the plaintext email experience through format=flowed with long lines.</title>
      <link>https://vxlabs.com/2019/08/25/format-flowed-with-long-lines/</link>
      <pubDate>Sun, 25 Aug 2019 19:20:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/08/25/format-flowed-with-long-lines/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR.&lt;/h1&gt;&#xA;&lt;p&gt;In this post, I propose bending the &lt;a href=&#34;https://tools.ietf.org/html/rfc3676&#34;&gt;&lt;code&gt;format=flowed&lt;/code&gt;&#xA;RFC&lt;/a&gt; by allowing lines up to the SMTP&#xA;limit of 998 characters, in order to improve the plaintext reading experience&#xA;for users of non-compliant email clients and services, such as GMail, FastMail,&#xA;Outlook and others.&lt;/p&gt;&#xA;&lt;h1 id=&#34;background&#34;&gt;Background.&lt;/h1&gt;&#xA;&lt;p&gt;The &lt;code&gt;format=flowed&lt;/code&gt; plaintext email convention described in&#xA;&lt;a href=&#34;https://tools.ietf.org/html/rfc3676&#34;&gt;RFC3676&lt;/a&gt; is an elegant method whereby&#xA;plaintext emails can be prepared in such a way so that they are wrapped&#xA;correctly on older email clients, but they can also be reflowed by modern&#xA;clients supporting that part of the standard.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sending queued mails in the background with mu4e.</title>
      <link>https://vxlabs.com/2019/07/03/send-queued-mails-in-background-with-mu4e/</link>
      <pubDate>Wed, 03 Jul 2019 22:02:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/07/03/send-queued-mails-in-background-with-mu4e/</guid>
      <description>&lt;p&gt;These days I&amp;rsquo;m running &lt;a href=&#34;https://www.djcbsoftware.nl/code/mu/mu4e.html&#34;&gt;mu4e&lt;/a&gt;,&#xA;the mail programme that runs on the Emacs operating system (the one with the&#xA;terrible editor), on the Windows Subsystem for Linux (WSL).&lt;/p&gt;&#xA;&lt;p&gt;(Previously, see &lt;a href=&#34;https://vxlabs.com/tags/mu4e/&#34;&gt;my other mu4e posts&lt;/a&gt;, I was using it on Linux or&#xA;macOS.)&lt;/p&gt;&#xA;&lt;p&gt;I have also switched from offlineimap to &lt;a href=&#34;http://isync.sourceforge.net/mbsync.html&#34;&gt;isync&amp;rsquo;s&#xA;mbsync&lt;/a&gt; for no other reason than it&#xA;was time to try something new.&lt;/p&gt;&#xA;&lt;p&gt;In addition, and this is the topic of this post, I&amp;rsquo;ve switched from nullmailer&#xA;to Emacs&amp;rsquo;s built-in smtp and smtp queue functionality for email delivery,&#xA;because I now prefer the idea of having a second chance to evaluate whether an&#xA;email should really go out or not.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Link directly to emails from Emacs Orgmode using Thunderbird and Thunderlink</title>
      <link>https://vxlabs.com/2019/04/20/link-thunderbird-emails-from-emacs-orgmode/</link>
      <pubDate>Sat, 20 Apr 2019 21:40:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/04/20/link-thunderbird-emails-from-emacs-orgmode/</guid>
      <description>&lt;p&gt;On macOS, links of the form &lt;code&gt;message://message-id&lt;/code&gt; are by default supported by&#xA;the system.&lt;/p&gt;&#xA;&lt;p&gt;Using a tool such as&#xA;&lt;a href=&#34;https://orgmode.org/worg/org-contrib/org-mac-link.html&#34;&gt;org-mac-link&lt;/a&gt;, it is&#xA;straight-forward to link directly to relevant emails from Orgmode tasks and&#xA;notes.&lt;/p&gt;&#xA;&lt;p&gt;It does not matter if you have moved the mail around. When you open the link&#xA;from &lt;a href=&#34;https://orgmode.org/&#34;&gt;Orgmode&lt;/a&gt;, the relevant email is instantly shown in&#xA;Mac mail.&lt;/p&gt;&#xA;&lt;p&gt;Fortunately, similar functionality can be configured on Windows and Linux using&#xA;&lt;a href=&#34;https://www.thunderbird.net/&#34;&gt;the Thunderbird mail client&lt;/a&gt;, an add-on called&#xA;ThunderLink, and a touch of Emacs Lisp.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configuring Emacs, lsp-mode and Microsoft&#39;s Visual Studio Code Python language server.</title>
      <link>https://vxlabs.com/2018/11/19/configuring-emacs-lsp-mode-and-microsofts-visual-studio-code-python-language-server/</link>
      <pubDate>Mon, 19 Nov 2018 14:37:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/11/19/configuring-emacs-lsp-mode-and-microsofts-visual-studio-code-python-language-server/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://vxlabs.com/2018/06/08/python-language-server-with-emacs-and-lsp-mode/&#34;&gt;a previous post&lt;/a&gt; I showed how to get Palantir’s Python Language Server working together with Emacs and &lt;code&gt;lsp-mode&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this post, we look at the brand new elephant in the room, &lt;a href=&#34;https://blogs.msdn.microsoft.com/pythonengineering/2018/07/18/introducing-the-python-language-server/&#34;&gt;Microsoft’s arguably far more powerful own Python Language Server&lt;/a&gt;, and how to integrate it with Emacs.&lt;/p&gt;&#xA;&lt;h1 id=&#34;motivation&#34;&gt;Motivation&lt;/h1&gt;&#xA;&lt;p&gt;Since that previous post on Palantir’s language server, I’ve been using Emacs far more intensively for Python coding in tmux on remote machines with GPUs for deep learning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Importing all of your orgmode notes into Apple Notes for mobile access.</title>
      <link>https://vxlabs.com/2018/10/29/importing-orgmode-notes-into-apple-notes/</link>
      <pubDate>Mon, 29 Oct 2018 11:22:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/10/29/importing-orgmode-notes-into-apple-notes/</guid>
      <description>&lt;p&gt;Over the years, I&amp;rsquo;ve built up quite a collection of notes as &lt;a href=&#34;https://orgmode.org/&#34;&gt;Org mode&lt;/a&gt; text&#xA;files. So far, it has proven to be the &lt;strong&gt;most expressive and the most robust&#xA;note-taking modality&lt;/strong&gt; out of a long list of candidates that I&amp;rsquo;ve tried.&lt;/p&gt;&#xA;&lt;p&gt;Note-taking using Org mode has one big drawback however: Mobile accessibility.&lt;/p&gt;&#xA;&lt;p&gt;In other words, consulting one&amp;rsquo;s org mode notes database from a mobile device&#xA;is painful. This should not be the case; notes should be always and instantly&#xA;available, even on mobile.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configuring Emacs, lsp-mode and the python language server.</title>
      <link>https://vxlabs.com/2018/06/08/python-language-server-with-emacs-and-lsp-mode/</link>
      <pubDate>Fri, 08 Jun 2018 12:29:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/06/08/python-language-server-with-emacs-and-lsp-mode/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://langserver.org/&#34;&gt;language server protocol&lt;/a&gt; was proposed by Microsoft as a way for different editors and development environments to share language analysis backends&lt;/p&gt;&#xA;&lt;p&gt;This post describes how to configure Emacs, &lt;a href=&#34;https://github.com/emacs-lsp/lsp-mode&#34;&gt;lsp-mode&lt;/a&gt; and the &lt;a href=&#34;https://github.com/palantir/python-language-server&#34;&gt;palantir python-language-server&lt;/a&gt; for improved code intelligence when working on Python projects. (I&amp;rsquo;m planning a companion post for Emacs, C++ and the &lt;a href=&#34;https://github.com/cquery-project/cquery&#34;&gt;cquery language server&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;h2 id=&#34;goal&#34;&gt;Goal&lt;/h2&gt;&#xA;&lt;p&gt;Before starting, it is motivating to see what we are working towards.&lt;/p&gt;&#xA;&lt;p&gt;With a correctly configured setup, Emacs will sport, amongst others,&#xA;improved completion with interactive documentation, imenu navigation,&#xA;documentation on hover, and really snazzy find definitions (=M-.=) and&#xA;find references.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interactive programming with Fennel Lua Lisp, Emacs and Lisp Game Jam winner EXO_encounter 667</title>
      <link>https://vxlabs.com/2018/05/18/interactive-programming-with-fennel-lua-lisp-emacs-and-lisp-game-jam-winner-exo_encounter-667/</link>
      <pubDate>Fri, 18 May 2018 08:48:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/05/18/interactive-programming-with-fennel-lua-lisp-emacs-and-lisp-game-jam-winner-exo_encounter-667/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://technomancy.us/resume&#34;&gt;Phil Hagelberg&lt;/a&gt; recently won the &lt;a href=&#34;https://itch.io/jam/lisp-game-jam-2018/results&#34;&gt;Lisp Game Jam 2018&lt;/a&gt; with his entry &lt;a href=&#34;https://technomancy.itch.io/exo-encounter-667&#34;&gt;EXO_encounter 667&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;What I found most interesting however, was his interactive programming setup.&lt;/p&gt;&#xA;&lt;p&gt;He programmed his game in (and contributed new features to) a Lisp to Lua compiler called &lt;a href=&#34;https://fennel-lang.org/&#34;&gt;Fennel&lt;/a&gt;, and used the game programming library &lt;a href=&#34;https://love2d.org/&#34;&gt;Löve&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;With Emacs and some Lua thread magic, &lt;strong&gt;&lt;strong&gt;he was able to perform runtime changes and introspection to his live running game project&lt;/strong&gt;&lt;/strong&gt;. (See below for a demo!)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Asynchronous rsync with Emacs, dired and tramp.</title>
      <link>https://vxlabs.com/2018/03/30/asynchronous-rsync-with-emacs-dired-and-tramp/</link>
      <pubDate>Thu, 29 Mar 2018 22:10:06 +0000</pubDate>
      <guid>https://vxlabs.com/2018/03/30/asynchronous-rsync-with-emacs-dired-and-tramp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://truongtx.me/tmtxt-dired-async.html&#34;&gt;tmtxt-dired-async&lt;/a&gt; by &lt;a href=&#34;https://truongtx.me/about.html&#34;&gt;Trần Xuân Trường&lt;/a&gt; is an unfortunately lesser known Emacs package which extends dired, the Emacs file manager, to be able to run rsync and other commands (zip, unzip, downloading) asynchronously.&lt;/p&gt;&#xA;&lt;p&gt;This means you can copy gigabytes of directories around whilst still happily continuing with all of your other tasks in the Emacs operating system.&lt;/p&gt;&#xA;&lt;p&gt;It has a feature where you can add any number of files from different locations into a wait list with &lt;code&gt;C-c C-a&lt;/code&gt;, and then asynchronously rsync the whole wait list into a final destination directory with &lt;code&gt;C-c C-v&lt;/code&gt;. This alone is worth the price of admission.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Run code on remote ipython kernels with Emacs and orgmode.</title>
      <link>https://vxlabs.com/2017/11/30/run-code-on-remote-ipython-kernels-with-emacs-and-orgmode/</link>
      <pubDate>Thu, 30 Nov 2017 08:05:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/11/30/run-code-on-remote-ipython-kernels-with-emacs-and-orgmode/</guid>
      <description>&lt;p&gt;As is briefly &lt;a href=&#34;https://github.com/gregsexton/ob-ipython#working-with-a-remote-session&#34;&gt;documented on the ob-ipython github&lt;/a&gt;, one can run code on remote ipython kernels.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I give a little more detail, and show that this also works wonderfully for remote generation but local embedding of graphics in Emacs Org mode.&lt;/p&gt;&#xA;&lt;p&gt;As I &lt;a href=&#34;https://vxlabs.com/2017/11/24/getting-ob-ipython-to-show-documentation-during-company-completion/&#34;&gt;hinted previously&lt;/a&gt;, the jupyter notebook is a great interface for computational coding, but Emacs and Org mode offer far more flexible editing and are more robust as a documentation format.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting ob-ipython to show documentation during company completion.</title>
      <link>https://vxlabs.com/2017/11/24/getting-ob-ipython-to-show-documentation-during-company-completion/</link>
      <pubDate>Fri, 24 Nov 2017 06:18:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/11/24/getting-ob-ipython-to-show-documentation-during-company-completion/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/gregsexton/ob-ipython&#34;&gt;ob-ipython&lt;/a&gt; is an Emacs package that enables &lt;a href=&#34;http://orgmode.org/worg/org-contrib/babel/&#34;&gt;org-babel&lt;/a&gt; to talk to a running ipython kernel. The upshot of this is that you can use &lt;a href=&#34;http://orgmode.org/&#34;&gt;org-mode&lt;/a&gt; instead of the jupyter notebook for interspersing executable code, results and documentation.&lt;/p&gt;&#xA;&lt;p&gt;The screenshot from the ob-ipython github shows it in action: &lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2017/11/ob-ipython-github-screenshot.jpg?ssl=1&#34;&gt;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2017/11/ob-ipython-github-screenshot.jpg?resize=660%2C371&amp;#038;ssl=1&#34; alt=&#34;ob-ipython-github-screenshot.jpg&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Personally, I would like to use this for controlling ipython kernels on &lt;a href=&#34;https://vxlabs.com/2017/03/17/miniconda3-tensorflow-keras-on-google-compute-engine-gpu-instance-the-step-by-step-guide/&#34;&gt;remote GPU- and deep learning-capable Linux machines&lt;/a&gt;, all via Emacs on my laptop. The juyter notebook is really fantastic, but it’s not Emacs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Querying RESTful webservices into Emacs orgmode tables</title>
      <link>https://vxlabs.com/2017/06/03/querying-restful-webservices-into-emacs-orgmode-tables/</link>
      <pubDate>Sat, 03 Jun 2017 10:20:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/06/03/querying-restful-webservices-into-emacs-orgmode-tables/</guid>
      <description>&lt;p&gt;In this post, I&amp;rsquo;ll show you how you can use Emacs and orgmode to query&#xA;live data from any RESTful webservice, and then use that data in orgmode&#xA;tables, a really great way to get live table-based calculation and display&#xA;functionality in your rich orgmode-based documentation.&lt;/p&gt;&#xA;&lt;p&gt;As an example, we will query live ticker data from the Kraken cryptocurrency&#xA;exchange, and then use the current trading values of two different&#xA;cryptocurrencies to calculate a fictitious investor&amp;rsquo;s position.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing crux-open-with on Ubuntu</title>
      <link>https://vxlabs.com/2017/03/31/fixing-crux-open-with-on-ubuntu/</link>
      <pubDate>Fri, 31 Mar 2017 20:46:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/03/31/fixing-crux-open-with-on-ubuntu/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://github.com/bbatsov/crux&#34;&gt;crux package for Emacs&lt;/a&gt; contains, amongst a list of useful functions (crux does stand for &lt;em&gt;A Collection of Ridiculously Useful eXtensions for Emacs&lt;/em&gt; after all), the function &lt;code&gt;crux-open-with&lt;/code&gt;. This interactive function opens the file you currently have open, or the file under your cursor in &lt;a href=&#34;https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html&#34;&gt;dired&lt;/a&gt;, using the system application for that file.&lt;/p&gt;&#xA;&lt;p&gt;On Ubuntu 16.04, this function unfortunately does not work. It looks like the application tries to start (icon visible in the dash) and then dies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Recursive text search in project without projectile</title>
      <link>https://vxlabs.com/2017/03/11/recursive-text-search-in-project-without-projectile/</link>
      <pubDate>Sat, 11 Mar 2017 10:39:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/03/11/recursive-text-search-in-project-without-projectile/</guid>
      <description>&lt;p&gt;If you’re not using projectile, but you would like to be able to perform interactive, search-as-you-type, recursive searches through the current project, this is pretty easy to do if you have &lt;a href=&#34;https://github.com/abo-abo/swiper&#34;&gt;counsel&lt;/a&gt; and &lt;a href=&#34;https://github.com/technomancy/find-file-in-project&#34;&gt;find-file-in-project&lt;/a&gt; installed.&lt;/p&gt;&#xA;&lt;p&gt;Add the following Emacs Lisp to your init:&lt;/p&gt;&#xA;&lt;div class=&#34;org-src-container&#34;&gt;&#xA;  &lt;pre class=&#34;src src-emacs-lisp&#34;&gt;&lt;span style=&#34;color: #707183;&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #1c86ee;&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color: #cd9b1d;&#34;&gt;cpb/counsel-ag-in-project&lt;/span&gt; &lt;span style=&#34;color: #7388d6;&#34;&gt;()&lt;/span&gt;&#xA;  &lt;span style=&#34;color: #cd853f;&#34;&gt;&#34;Use `&lt;/span&gt;&lt;span style=&#34;color: #6e8b3d;&#34;&gt;ffip&lt;/span&gt;&lt;span style=&#34;color: #cd853f;&#34;&gt;&#39; and `&lt;/span&gt;&lt;span style=&#34;color: #6e8b3d;&#34;&gt;counsel-ag&lt;/span&gt;&lt;span style=&#34;color: #cd853f;&#34;&gt;&#39; for quick project-wide text searching.&#34;&lt;/span&gt;&#xA;  &lt;span style=&#34;color: #7388d6;&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #1c86ee;&#34;&gt;interactive&lt;/span&gt;&lt;span style=&#34;color: #7388d6;&#34;&gt;)&lt;/span&gt;&#xA;  &lt;span style=&#34;color: #7388d6;&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #1c86ee;&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color: #909183;&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #709870;&#34;&gt;(&lt;/span&gt;project-root &lt;span style=&#34;color: #907373;&#34;&gt;(&lt;/span&gt;ffip-project-root&lt;span style=&#34;color: #907373;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #709870;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #909183;&#34;&gt;)&lt;/span&gt;&#xA;    &lt;span style=&#34;color: #7f7f7f;&#34;&gt;;; &lt;/span&gt;&lt;span style=&#34;color: #7f7f7f;&#34;&gt;if ffip could not find project-root, it will already have&lt;/span&gt;&#xA;    &lt;span style=&#34;color: #7f7f7f;&#34;&gt;;; &lt;/span&gt;&lt;span style=&#34;color: #7f7f7f;&#34;&gt;shown an error message. We only have to check for non-nil.&lt;/span&gt;&#xA;    &lt;span style=&#34;color: #909183;&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #1c86ee;&#34;&gt;if&lt;/span&gt; project-root&#xA;        &lt;span style=&#34;color: #709870;&#34;&gt;(&lt;/span&gt;counsel-ag nil project-root nil&#xA;                    &lt;span style=&#34;color: #907373;&#34;&gt;(&lt;/span&gt;format &lt;span style=&#34;color: #8b7355;&#34;&gt;&#34;Search in PRJ %s&#34;&lt;/span&gt; project-root&lt;span style=&#34;color: #907373;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #709870;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #909183;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #7388d6;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #707183;&#34;&gt;)&lt;/span&gt;&#xA;&lt;p&gt;&lt;span style=&#34;color: #707183;&#34;&gt;(&lt;/span&gt;global-set-key &lt;span style=&#34;color: #7388d6;&#34;&gt;(&lt;/span&gt;kbd &lt;span style=&#34;color: #8b7355;&#34;&gt;&amp;ldquo;C-c s&amp;rdquo;&lt;/span&gt;&lt;span style=&#34;color: #7388d6;&#34;&gt;)&lt;/span&gt; &amp;lsquo;cpb/counsel-ag-in-project&lt;span style=&#34;color: #707183;&#34;&gt;)&lt;/span&gt;&#xA;&lt;/pre&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>From org file with local bibtex to LaTeX and PDF</title>
      <link>https://vxlabs.com/2017/02/20/from-org-file-with-local-bibtex-to-latex-and-pdf/</link>
      <pubDate>Mon, 20 Feb 2017 20:54:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/02/20/from-org-file-with-local-bibtex-to-latex-and-pdf/</guid>
      <description>&lt;figure style=&#34;width: 300px&#34; class=&#34;wp-caption alignnone&#34;&gt;&#xA;&lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2017/02/vxlabs-emacs-org-ref-pdf-example.png?ssl=1&#34;&gt;&#xA;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2017/02/vxlabs-emacs-org-ref-pdf-example-300x178.png?resize=300%2C178&amp;#038;ssl=1&#34; alt=&#34;vxlabs-emacs-org-ref-pdf-example.png&#34; data-recalc-dims=&#34;1&#34; /&gt;&#xA;&lt;/a&gt;&#xA;&lt;figcaption class=&#34;wp-caption-text&#34;&gt;Screenshot of orgmode source, PDF preview on the right, interactive citation selection in the minibuffer. Click for full resolution.&lt;/figcaption&gt;&lt;/figure&gt; &#xA;&lt;p&gt;I have (co-)written a few LaTeX documents in my time.&lt;/p&gt;&#xA;&lt;p&gt;However, as I have been writing &lt;a href=&#34;https://cpbotha.net/2016/01/05/note-taking-strategy-early-2016/&#34;&gt;my life and lab notes&lt;/a&gt; and many of my&#xA;technical blog posts in &lt;a href=&#34;http://orgmode.org/&#34;&gt;Emacs orgmode&lt;/a&gt; for the past few years, I wanted to&#xA;see how one would go about using BiBTeX references in orgmode files (using&#xA;&lt;a href=&#34;http://kitchingroup.cheme.cmu.edu/&#34;&gt;John Kitchin’s&lt;/a&gt; &lt;a href=&#34;https://github.com/jkitchin/org-ref&#34;&gt;org-ref package&lt;/a&gt;) such that they would render&#xA;correctly in orgmode’s export LaTeX and PDF.&lt;/p&gt;</description>
    </item>
    <item>
      <title>mu4e 0.9.18: E-Mailing with Emacs now even better.</title>
      <link>https://vxlabs.com/2017/02/07/mu4e-0-9-18-e-mailing-with-emacs-now-even-better/</link>
      <pubDate>Tue, 07 Feb 2017 20:48:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/02/07/mu4e-0-9-18-e-mailing-with-emacs-now-even-better/</guid>
      <description>&lt;p&gt;In this post I talk about three great new features in the latest release of &lt;a href=&#34;https://www.djcbsoftware.nl/code/mu/mu4e.html&#34;&gt;mu4e&lt;/a&gt;, an email programme that runs in Emacs. I also show my mu4e configuration as an example to others who would like a similar setup. &lt;figure style=&#34;width: 768px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2017/02/mu4e-0.9.18-screenshot-7.png?ssl=1&#34;&gt;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2017/02/mu4e-0.9.18-screenshot-7.png?resize=660%2C605&amp;#038;ssl=1&#34; alt=&#34;mu4e-0.9.18-screenshot.png&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;figcaption class=&#34;wp-caption-text&#34;&gt;mu4e 0.9.18 screenshot showing selected context (bottom right of main) and visual-line-mode (long lines) which is activated by the format=flowed support.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;After recently discovering that &lt;a href=&#34;https://cpbotha.net/2016/09/27/thunderbird-support-of-rfc-3676-formatflowed-is-half-broken/&#34;&gt;plaintext format=flowed in Thunderbird works only partially&lt;/a&gt;, it was time to check back in on mu4e after &lt;a href=&#34;https://vxlabs.com/2014/06/06/configuring-emacs-mu4e-with-nullmailer-offlineimap-and-multiple-identities/&#34;&gt;my previous happy stint using it&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Date-sorted interactive recursive search with ivy, counsel and ag</title>
      <link>https://vxlabs.com/2016/11/07/date-sorted-interactive-recursive-search-with-ivy-counsel-and-ag/</link>
      <pubDate>Mon, 07 Nov 2016 19:57:00 +0000</pubDate>
      <guid>https://vxlabs.com/2016/11/07/date-sorted-interactive-recursive-search-with-ivy-counsel-and-ag/</guid>
      <description>&lt;p&gt;A core part of &lt;a href=&#34;https://cpbotha.net/2016/01/05/note-taking-strategy-early-2016/&#34;&gt;my note-taking strategy&lt;/a&gt; is a growing collection of Emacs &lt;a href=&#34;http://orgmode.org/&#34;&gt;Org mode&lt;/a&gt; files containing my monthly lab journals, project summaries and various technical documents.&lt;/p&gt;&#xA;&lt;p&gt;Usually I rely on &lt;a href=&#34;https://github.com/bbatsov/projectile&#34;&gt;Projectile’s&lt;/a&gt; &lt;a href=&#34;https://emacs-helm.github.io/helm/&#34;&gt;Helm&lt;/a&gt; integration to perform recursive searches with &lt;a href=&#34;https://github.com/ggreer/the_silver_searcher&#34;&gt;The Silver Searcher (ag)&lt;/a&gt; using &lt;code&gt;helm-projectile-ag&lt;/code&gt; (trigged by the completely muscle-memorised &lt;code&gt;C-c p s s&lt;/code&gt;) through all of the org files in my notes hierarchy. Recursive regular expression search results are shown interactively as you type. Wonderful!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Step-by-step guide to C&#43;&#43; navigation and completion with Emacs and the Clang-based rtags</title>
      <link>https://vxlabs.com/2016/04/11/step-by-step-guide-to-c-navigation-and-completion-with-emacs-and-the-clang-based-rtags/</link>
      <pubDate>Mon, 11 Apr 2016 20:48:00 +0000</pubDate>
      <guid>https://vxlabs.com/2016/04/11/step-by-step-guide-to-c-navigation-and-completion-with-emacs-and-the-clang-based-rtags/</guid>
      <description>&lt;p&gt;If you want C++ completion and navigation (jump to definition, jump to declaration, and so forth), there are several good options for Emacs. For a QtQuick / C++ project I’m working on, I needed the best Emacs has to offer.&lt;/p&gt;&#xA;&lt;p&gt;This turned out to be the &lt;a href=&#34;https://github.com/Andersbakken/rtags&#34;&gt;Clang-based rtags system&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Rtags is not the easiest of the options to get going, hence this short tutorial. I initially configured &lt;a href=&#34;https://github.com/Sarcasm/irony-mode&#34;&gt;irony-mode&lt;/a&gt;, which is also Clang-based and was significantly easier to get going, but it soon started hanging on the completion of for example &lt;code&gt;QStringList&lt;/code&gt; methods in my project. Because it also doesn’t support navigation, I decided to try rtags. So far, rtags has been working quite well on a Qt 5.x project of slightly under 200K lines of C++.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Up and running with ECL and Emacs SLIME in four easy steps</title>
      <link>https://vxlabs.com/2016/03/05/up-and-running-with-ecl-and-slime-in-4-easy-steps/</link>
      <pubDate>Sat, 05 Mar 2016 22:14:00 +0000</pubDate>
      <guid>https://vxlabs.com/2016/03/05/up-and-running-with-ecl-and-slime-in-4-easy-steps/</guid>
      <description>&lt;p&gt;ECL is of course &lt;a href=&#34;https://common-lisp.net/project/ecl/&#34;&gt;Embeddable Common Lisp&lt;/a&gt;, a small but quite complete Common Lisp implementation that can be easily embedded in your C applications to act as dynamic extension language, but it is also a fine stand-alone implementation. It includes an interpreter and a compiler, and can even produce compact binaries. Read &lt;a href=&#34;https://chriskohlhepp.wordpress.com/embedding-lisp-in-cplusplus-a-recipe/&#34;&gt;this blog post by Chris Kohlhepp&lt;/a&gt; for a brief and practical overview.&lt;/p&gt;&#xA;&lt;p&gt;SLIME is &lt;a href=&#34;https://common-lisp.net/project/slime/&#34;&gt;the Superior Lisp Interaction Mode for Emacs&lt;/a&gt;, a great Emacs environment within which one can write code for a number of Common Lisp implementations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sending emails with math and source code</title>
      <link>https://vxlabs.com/2015/01/28/sending-emails-with-math-and-source-code/</link>
      <pubDate>Wed, 28 Jan 2015 07:33:00 +0000</pubDate>
      <guid>https://vxlabs.com/2015/01/28/sending-emails-with-math-and-source-code/</guid>
      <description>&lt;p&gt;Org mode is great for authoring rich documents with syntax highlighted source code, LaTeX math and images. It even supports &lt;a href=&#34;http://vxlabs.com/2014/12/04/inline-graphviz-dot-evaluation-for-graphs-using-emacs-org-mode-and-org-babel/&#34;&gt;evaluating live snippets&lt;/a&gt; of code embedded in the text. It does all of this whilst remaining a plain text format.&lt;/p&gt;&#xA;&lt;p&gt;Imagine how useful it would be to author programming-related or technical emails using this functionality?&lt;/p&gt;&#xA;&lt;p&gt;Imagine no more! &lt;code&gt;org-mime&lt;/code&gt;, part of the org mode contrib, does this for a number of emacs-based mail clients. However, our preference is for mu4e, which is not part of that list.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inline GraphViz DOT evaluation for graphs using Emacs, org-mode and org-babel</title>
      <link>https://vxlabs.com/2014/12/04/inline-graphviz-dot-evaluation-for-graphs-using-emacs-org-mode-and-org-babel/</link>
      <pubDate>Thu, 04 Dec 2014 09:25:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/12/04/inline-graphviz-dot-evaluation-for-graphs-using-emacs-org-mode-and-org-babel/</guid>
      <description>&lt;p&gt;With Emacs, &lt;a href=&#34;http://orgmode.org/&#34;&gt;org mode&lt;/a&gt; and org-babel, it’s possible to evaluate source code samples embedded in your org files and have the output of said evaluation appear inline. This makes for a beautiful literate programming environment. It also enables one to include graphs in one’s documents (org mode, PDF, HTML presentations or blog posts) by using for example GraphViz.&lt;/p&gt;&#xA;&lt;p&gt;This blog post (&lt;a href=&#34;http://vxlabs.com/2014/05/25/emacs-24-with-prelude-org2blog-and-wordpress/&#34;&gt;obviously authored using Emacs and Org mode&lt;/a&gt;) contains short instructions for doing so.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting EmacsKeys working with QtCreator 3.1.2</title>
      <link>https://vxlabs.com/2014/06/25/getting-emacskeys-working-with-qtcreator-3-1-2/</link>
      <pubDate>Wed, 25 Jun 2014 20:01:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/06/25/getting-emacskeys-working-with-qtcreator-3-1-2/</guid>
      <description>&lt;p&gt;Today, &lt;a href=&#34;http://blog.qt.digia.com/blog/2014/06/25/qt-5-3-1-released/&#34;&gt;Qt 5.3.1 was released&lt;/a&gt; along with Qt Creator 3.1.2. Unfortunately, nsf’s EmacsKeys plugin, &lt;a href=&#34;https://qt.gitorious.org/qt-creator/qt-creator/commit/8560036d96d309fe83910&#34;&gt;merged into the Qt trunk a few months ago&lt;/a&gt;, was not a part of this release (it should be included in Qt Creator 3.2).&lt;/p&gt;&#xA;&lt;p&gt;Because the Emacs keybindings are hardwired into my fingers, and I’m using QtCreator for a project at the moment, I spent some time figuring out how to get the plugin built for Qt Creator 3.1.2. This post explains how you too can build it, but, if you’re on Ubuntu 14.04 with Qt 5.3.1 x64, you can just download my binaries and the keymap file (see under &lt;strong&gt;requirements&lt;/strong&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configuring Emacs mu4e with nullmailer, offlineimap and multiple identities</title>
      <link>https://vxlabs.com/2014/06/06/configuring-emacs-mu4e-with-nullmailer-offlineimap-and-multiple-identities/</link>
      <pubDate>Fri, 06 Jun 2014 07:00:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/06/06/configuring-emacs-mu4e-with-nullmailer-offlineimap-and-multiple-identities/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.djcbsoftware.nl/code/mu/mu4e.html&#34;&gt;mu4e&lt;/a&gt; is a mail user agent for your Emacs. After &lt;a href=&#34;http://cpbotha.net/2013/09/15/dear-usa-my-data-has-left-your-building/&#34;&gt;leaving GMail&lt;/a&gt; a few months ago, this is the first MUA that I am loving even more. The major reasons for this are the &lt;em&gt;faster than GMail&lt;/em&gt; real-time search (e.g. press &lt;code&gt;s&lt;/code&gt;, then &lt;code&gt;from:buddy flag:attach design review&lt;/code&gt; and watch it search my 68 thousand email archive in a fraction of a second), its Emacs foundation (the more I use it, the better I get at customizing it) and the observation that having my email in an uncluttered, by default text-only interface, somehow helps me to maintain the feeling of control. &lt;figure style=&#34;width: 300px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modify Emacs Deft for recursive directory search</title>
      <link>https://vxlabs.com/2014/06/04/modify-emacs-deft-for-recursive-directory-search/</link>
      <pubDate>Wed, 04 Jun 2014 19:53:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/06/04/modify-emacs-deft-for-recursive-directory-search/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Update 2014-11-18&lt;/strong&gt; I’ve forked the original Deft, added this recursive directory listing feature as well as support for multiple different file extensions, and pushed it all to &lt;a href=&#34;https://github.com/cpbotha/deft-turbo&#34;&gt;github as deft-turbo&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://jblevins.org/projects/deft/&#34;&gt;Deft&lt;/a&gt; is a neat Emacs mode for the Notational Velocity-inspired searching, browsing and editing of a directory of text files. In short, this means that simply start typing, and Deft finds the note that you were looking for. It supports straight text searching and regular expression searching, almost like my own baby &lt;a href=&#34;https://github.com/cpbotha/nvpy&#34;&gt;nvpy&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Publish to WordPress with Emacs 24 and org2blog</title>
      <link>https://vxlabs.com/2014/05/25/emacs-24-with-prelude-org2blog-and-wordpress/</link>
      <pubDate>Sun, 25 May 2014 10:33:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/05/25/emacs-24-with-prelude-org2blog-and-wordpress/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently discovered the absolute joy that is writing and publishing&#xA;wordpress blog posts using Emacs 24 and &lt;a href=&#34;https://github.com/punchagan/org2blog&#34;&gt;org2blog&lt;/a&gt;. Because it took me a&#xA;while to get everything (including source code syntax highlighting by the&#xA;WordPress SyntaxHighlighter plugin) going, I wanted to document the whole&#xA;procedure step-by-step, using org2blog of course!&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m using Emacs 24.3 (from the PPA) with Prelude on Ubuntu 12.04.4.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installing-required-packages&#34;&gt;Installing required packages&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;org-mode&lt;/code&gt; is already installed in Emacs 24 with Prelude. However,&#xA;we need to install &lt;code&gt;org2blog&lt;/code&gt; and some extra dependencies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Syntax-highlighting markdown fenced code blocks in Emacs</title>
      <link>https://vxlabs.com/2014/04/08/syntax-highlighting-markdown-fenced-code-blocks-in-emacs/</link>
      <pubDate>Tue, 08 Apr 2014 07:12:37 +0000</pubDate>
      <guid>https://vxlabs.com/2014/04/08/syntax-highlighting-markdown-fenced-code-blocks-in-emacs/</guid>
      <description>&lt;p&gt;The syntax-highlighted fenced code blocks in GitHub flavored markdown, or GFM, are a beautiful and useful invention. One starts a code block with three or more backticks or tildes, followed by the name of the language, and then proceeds to show one’s code, which, at least on GitHub, is then syntax highlighted.&lt;/p&gt;&#xA;&lt;p&gt;In other words, something like this in your markdown:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: plain; light: true; title: ; notranslate&#34; title=&#34;&#34;&gt;```python&#xD;&#xA;def computer_says(no):&#xD;&#xA;    print(&#34;computer says %s&#34; % (no,))&#xD;&#xA;```&#xD;&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;Would become this in the preview:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
