-
Notifications
You must be signed in to change notification settings - Fork 1
/
emacs.html
82 lines (82 loc) · 29.9 KB
/
emacs.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<!doctype html><html lang=en-uk><head><script data-goatcounter=https://ruivieira-dev.goatcounter.com/count async src=//gc.zgo.at/count.js></script><script src=https://unpkg.com/@alpinejs/intersect@3.x.x/dist/cdn.min.js></script><script src=https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js></script><script type=module src=https://ruivieira.dev/js/deeplinks/deeplinks.js></script><link rel=preload href=https://ruivieira.dev/lib/fonts/fa-brands-400.woff2 as=font type=font/woff2 crossorigin=anonymous><link rel=preload href=https://ruivieira.dev/lib/fonts/fa-regular-400.woff2 as=font type=font/woff2 crossorigin=anonymous><link rel=preload href=https://ruivieira.dev/lib/fonts/fa-solid-900.woff2 as=font type=font/woff2 crossorigin=anonymous><link rel=preload href=https://ruivieira.dev/fonts/firacode/FiraCode-Regular.woff2 as=font type=font/woff2 crossorigin=anonymous><link rel=preload href=https://ruivieira.dev/fonts/vollkorn/Vollkorn-Regular.woff2 as=font type=font/woff2 crossorigin=anonymous><link rel=stylesheet href=https://ruivieira.dev/css/kbd.css type=text/css><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><title>Emacs · Rui Vieira</title>
<link rel=canonical href=https://ruivieira.dev/emacs.html><meta name=viewport content="width=device-width,initial-scale=1"><meta name=robots content="all,follow"><meta name=googlebot content="index,follow,snippet,archive"><meta property="og:title" content="Emacs"><meta property="og:description" content="This page is a collection of Emacs related notes. The From Scratch to Emacs, The Adventurous Configurator’s Handbook page contains a step-by-step guide to configure Emacs from scratch.
Notes on EmacsMy current flavour/distribution of Emacs is DOOM Emacs spacemacs1 DOOM Emacs2. Yes, DOOM Emacs is my preferred configuration framework at the moment. I have used Spacemacs for a long time, but the performance increase by switching to DOOM Emacs is simply to great to be ignored."><meta property="og:type" content="article"><meta property="og:url" content="https://ruivieira.dev/emacs.html"><meta property="article:section" content="posts"><meta property="article:modified_time" content="2024-01-28T14:51:25+00:00"><meta name=twitter:card content="summary"><meta name=twitter:title content="Emacs"><meta name=twitter:description content="This page is a collection of Emacs related notes. The From Scratch to Emacs, The Adventurous Configurator’s Handbook page contains a step-by-step guide to configure Emacs from scratch.
Notes on EmacsMy current flavour/distribution of Emacs is DOOM Emacs spacemacs1 DOOM Emacs2. Yes, DOOM Emacs is my preferred configuration framework at the moment. I have used Spacemacs for a long time, but the performance increase by switching to DOOM Emacs is simply to great to be ignored."><link rel=stylesheet href=https://ruivieira.dev/css/styles.css><!--[if lt IE 9]><script src=https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js></script><script src=https://oss.maxcdn.com/respond/1.4.2/respond.min.js></script><![endif]--><link rel=icon type=image/png href=https://ruivieira.dev/images/favicon.ico></head><body class="max-width mx-auto px3 ltr" x-data="{currentHeading: undefined}"><div class="content index py4"><div id=header-post><a id=menu-icon href=#><i class="fas fa-eye fa-lg"></i></a>
<a id=menu-icon-tablet href=#><i class="fas fa-eye fa-lg"></i></a>
<a id=top-icon-tablet href=# onclick='$("html, body").animate({scrollTop:0},"fast")' style=display:none aria-label="Top of Page"><i class="fas fa-chevron-up fa-lg"></i></a>
<span id=menu><span id=nav><ul><li><a href=https://ruivieira.dev/>Home</a></li><li><a href=https://ruivieira.dev/blog/>Blog</a></li><li><a href=https://ruivieira.dev/draw/>Drawings</a></li><li><a href=https://ruivieira.dev/map/>All pages</a></li><li><a href=https://ruivieira.dev/search.html>Search</a></li></ul></span><br><div id=share style=display:none></div><div id=toc><h4>Contents</h4><nav id=TableOfContents><ul><li><a href=#notes-on-emacs :class="{'toc-h2':true, 'toc-highlight': currentHeading == '#notes-on-emacs' }">Notes on Emacs</a></li><li><a href=#installation :class="{'toc-h2':true, 'toc-highlight': currentHeading == '#installation' }">Installation</a></li><li><a href=#macos :class="{'toc-h3':true, 'toc-highlight': currentHeading == '#macos' }">macOS</a></li><li><a href=#homebrew :class="{'toc-h4':true, 'toc-highlight': currentHeading == '#homebrew' }">Homebrew</a></li><li><a href=#macports :class="{'toc-h4':true, 'toc-highlight': currentHeading == '#macports' }">MacPorts</a></li><li><a href=#fedora :class="{'toc-h3':true, 'toc-highlight': currentHeading == '#fedora' }">Fedora</a></li><li><a href=#ubuntu :class="{'toc-h3':true, 'toc-highlight': currentHeading == '#ubuntu' }">Ubuntu</a></li><li><a href=#from-source :class="{'toc-h3':true, 'toc-highlight': currentHeading == '#from-source' }">From source</a></li><li><a href=#dependencies :class="{'toc-h4':true, 'toc-highlight': currentHeading == '#dependencies' }">Dependencies</a></li><li><a href=#building :class="{'toc-h4':true, 'toc-highlight': currentHeading == '#building' }">Building</a></li><li><a href=#configuration :class="{'toc-h2':true, 'toc-highlight': currentHeading == '#configuration' }">Configuration</a></li><li><a href=#completion :class="{'toc-h3':true, 'toc-highlight': currentHeading == '#completion' }">Completion</a></li><li><a href=#the-important-stuff :class="{'toc-h3':true, 'toc-highlight': currentHeading == '#the-important-stuff' }">The important stuff?</a></li><li><a href=#icon :class="{'toc-h4':true, 'toc-highlight': currentHeading == '#icon' }">Icon</a></li><li><a href=#cursor :class="{'toc-h4':true, 'toc-highlight': currentHeading == '#cursor' }">Cursor</a></li><li><a href=#themes :class="{'toc-h4':true, 'toc-highlight': currentHeading == '#themes' }">Themes</a></li><li><a href=#elisp :class="{'toc-h2':true, 'toc-highlight': currentHeading == '#elisp' }">Elisp</a></li><li><a href=#command-line :class="{'toc-h2':true, 'toc-highlight': currentHeading == '#command-line' }">Command line</a></li><li><a href=#running-org-files :class="{'toc-h3':true, 'toc-highlight': currentHeading == '#running-org-files' }">Running org files</a></li><li><a href=#dynamic-modules :class="{'toc-h2':true, 'toc-highlight': currentHeading == '#dynamic-modules' }">Dynamic modules</a></li></ul></nav><h4>Related</h4><nav><ul><li class="header-post toc"><span class=backlink-count>1</span>
<a href=https://ruivieira.dev/emacs-quarkus.html>Emacs Quarkus</a></li><li class="header-post toc"><span class=backlink-count>1</span>
<a href=https://ruivieira.dev/emacs-cookbook.html>Emacs cookbook</a></li><li class="header-post toc"><span class=backlink-count>1</span>
<a href=https://ruivieira.dev/site-details.html>Site details</a></li><li class="header-post toc"><span class=backlink-count>1</span>
<a href=https://ruivieira.dev/cli.html>CLI</a></li><li class="header-post toc"><span class=backlink-count>1</span>
<a href=https://ruivieira.dev/from-scratch-to-emacs-the-adventurous-configurators-handbook.html>From Scratch to Emacs, The Adventurous Configurator's Handbook</a></li><li class="header-post toc"><span class=backlink-count>1</span>
<a href=https://ruivieira.dev/introduction-to-balanced-box-decomposition-trees.html>Introduction to Balanced Box-Decomposition Trees</a></li></ul></nav></div></span></div><article class=post itemscope itemtype=http://schema.org/BlogPosting><header><h1 class=posttitle itemprop="name headline">Emacs</h1><div class=meta><div class=postdate>Updated <time datetime="2024-01-28 14:51:25 +0000 GMT" itemprop=datePublished>2024-01-28</time>
<span class=commit-hash>(<a href=https://ruivieira.dev/log/index.html#0c79fa3>0c79fa3</a>)</span></div></div></header><div class=content itemprop=articleBody><p>This page is a collection of Emacs related notes.
The <a href=https://ruivieira.dev/from-scratch-to-emacs-the-adventurous-configurators-handbook.html>From Scratch to Emacs, The Adventurous Configurator’s Handbook</a> page contains a step-by-step guide to configure Emacs from scratch.</p><h2 id=notes-on-emacs x-intersect="currentHeading = '#notes-on-emacs'">Notes on Emacs</h2><p>My current flavour/distribution of Emacs is <del>DOOM Emacs</del> <del>spacemacs</del><sup id=fnref:1><a href=#fn:1 class=footnote-ref role=doc-noteref>1</a></sup> <a href=https://ruivieira.dev/doom-emacs.html>DOOM Emacs</a><sup id=fnref:2><a href=#fn:2 class=footnote-ref role=doc-noteref>2</a></sup>.
Yes, DOOM Emacs is my preferred configuration framework at the moment. I have used Spacemacs for a long time, but the performance increase by switching to DOOM Emacs is simply to great to be ignored.
Recently, I have also migrated to the <a href=https://mail.gnu.org/archive/html/emacs-devel/2021-09/msg02290.html>Emacs 28 branch</a> which includes Elisp <a href=https://www.emacswiki.org/emacs/GccEmacs>native compilation</a>. It is a thing of beauty in terms of speed.</p><p>This page refers to broad Emacs base configuration. For specific Emacs recipes check the <a href=https://ruivieira.dev/emacs-cookbook.html>Emacs cookbook</a>.</p><h2 id=installation x-intersect="currentHeading = '#installation'">Installation</h2><h3 id=macos x-intersect="currentHeading = '#macos'">macOS</h3><h4 id=homebrew x-intersect="currentHeading = '#homebrew'">Homebrew</h4><p>Many people swear by <code>emacs-mac</code> as the gold standard for macOS Emacs distributions.
To install it, using <code>homebrew</code> simply run</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ brew tap railwaycat/emacsmacport
</span></span><span style=display:flex><span>$ brew install --cask emacs-mac-spacemacs-icon
</span></span></code></pre></div><p>Alternatively, you can choose whatever icon you want from <a href=https://github.com/railwaycat/homebrew-emacsmacport/wiki/Icons>here</a>.
A good alternative is for instance <code>--with-emacs-big-sur-icon</code>. On Linux you can use my <a href=#icon>con</a>, if you wish.</p><p>However, <code>emacs-mac</code> is, at the time of writing, targetting Emacs 27. If you want to use Emacs 29 (and don’t want to build it from source) a good option is <code>emacs-plus</code>. To install it use:</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ brew install emacs-plus@28 <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> --with-native-comp <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> --with-modern-doom3-icon <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> --with-mailutils <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> --with-imagemagick
</span></span></code></pre></div><p>Another option is to use <code>jimeh</code>’s Emacs builds<sup id=fnref:3><a href=#fn:3 class=footnote-ref role=doc-noteref>3</a></sup>. These include nightly builds of Emacs 28 with native compilation enabled. To install it, simply run</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>brew install --cask emacs-app
</span></span></code></pre></div><p>or, if want the latest nightly build from Emacs’ master branch:</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>brew install --cask emacs-app-nightly
</span></span></code></pre></div><h4 id=macports x-intersect="currentHeading = '#macports'">MacPorts</h4><p>Recently I’ve been using MacPorts<sup id=fnref:4><a href=#fn:4 class=footnote-ref role=doc-noteref>4</a></sup> more often than Homebrew. MacPorts also includes an Emacs<sup id=fnref:5><a href=#fn:5 class=footnote-ref role=doc-noteref>5</a></sup> recipe. I tend to use the simple Emacs 28 <a href=https://ruivieira.dev/cli.html>text-only</a> one:</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ sudo port install emacs
</span></span></code></pre></div><h3 id=fedora x-intersect="currentHeading = '#fedora'">Fedora</h3><p>At the time of writing<sup id=fnref:6><a href=#fn:6 class=footnote-ref role=doc-noteref>6</a></sup>, Fedora only supports, officially, Emacs 27. If you want to try Emacs 28 (and the native compilation feature)
you need to install it using</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ sudo dnf copr <span style=color:#999>enable</span> deathwish/emacs-pgtk-nativecomp
</span></span></code></pre></div><p>and then (if Emacs is already present)</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ sudo dnf upgrade emacs
</span></span></code></pre></div><p>otherwise run</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ sudo dnf install emacs
</span></span></code></pre></div><h3 id=ubuntu x-intersect="currentHeading = '#ubuntu'">Ubuntu</h3><p>For Ubuntu (and other Linux distros, including <a href=https://ruivieira.dev/fedora.html>Fedora</a>) an option is to use the <a href=https://snapcraft.io/store>Snap store</a>.
The <a href=https://snapcraft.io/emacs>available Snap</a> can install Emacs 28 with <em>native compilation enabled</em>. To use it, simply run</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ sudo snap install emacs --edge --classic
</span></span></code></pre></div><h3 id=from-source x-intersect="currentHeading = '#from-source'">From source</h3><p>In December 2021 the <code>pgtk</code> branch of Emacs was merged into master<sup id=fnref:7><a href=#fn:7 class=footnote-ref role=doc-noteref>7</a></sup>.
Among other features this adds full Wayland support and better font rendering for the Emacs GUI.
This version can be compiled from source with just a few simple steps.</p><h4 id=dependencies x-intersect="currentHeading = '#dependencies'">Dependencies</h4><p>To build this version in Linux (I’m assuming Ubuntu and variants) you will need the following dependencies:</p><ul><li><code>autoconf</code></li><li><code>build-essential</code>, provides <code>GCC</code>, <code>make</code>, <code>libc</code>, <em>etc</em>.</li><li><code>libgtk-3-dev</code>, Gnome dependencies</li><li><code>libgnutls28-dev</code>, provides <code>libgnutls28</code></li><li><code>libtiff5-dev</code>, <code>libgif-dev</code>, <code>libjpeg-dev</code>, <code>libpng-dev</code> and <code>libxpm-dev</code> provide image support</li><li><code>libncurses-dev</code>, provides terminal support</li><li><code>texinfo</code>, for <code>Info</code> documentation</li><li><code>libxml2-dev</code> for XML support</li></ul><p>I also wanted to include Emacs’ native JSON support and Elisp native compilation, so will additionally need:</p><ul><li><code>libjansson4</code>, <code>libjansson-dev</code>, provides native JSON support</li><li><code>libgccjit0</code>, <code>libgccjit-11-dev</code>, <code>gcc-11</code> and <code>g++-11</code><sup id=fnref:8><a href=#fn:8 class=footnote-ref role=doc-noteref>8</a></sup></li></ul><p>A one-liner to install all dependencies is:</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ sudo apt update
</span></span><span style=display:flex><span>$ sudo apt install build-essential libgtk-3-dev libgnutls28-dev <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> libtiff5-dev libgif-dev libjpeg-dev libpng-dev libxpm-dev <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> libncurses-dev texinfo <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> libxml2-dev <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> jansson4 libjansson-dev <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> libgccjit0 libgccjit-11-dev gcc-11 g++-11
</span></span></code></pre></div><p>If building on Fedora, the dependency names will naturally be slightly different. In this case we would use</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ sudo dnf update
</span></span><span style=display:flex><span>$ sudo dnf install @development-tools autoconf <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> gtk3-devel gnutls-devel <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> libtiff-devel giflib-devel libjpeg-devel libpng-devel libXpm-devel <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> ncurses-devel texinfo <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> libxml2-devel <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> jansson jansson-devel <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> libgccjit libgccjit-devel
</span></span></code></pre></div><h4 id=building x-intersect="currentHeading = '#building'">Building</h4><p>We can then clone the Emacs repo and run <code>autogen</code>. The steps from now on should be the same for most GNU/Linux distributions.</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ git clone git://git.sv.gnu.org/emacs.git
</span></span><span style=display:flex><span>$ <span style=color:#999>cd</span> emacs
</span></span><span style=display:flex><span>$ ./autogen.sh
</span></span></code></pre></div><p>To use native Elisp compilation we will use <code>gcc-11</code><sup id=fnref1:8><a href=#fn:8 class=footnote-ref role=doc-noteref>8</a></sup> so before starting the build run:</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span> $ <span style=color:#999>export</span> <span style=color:teal>CC</span><span style=font-weight:700>=</span>/usr/bin/gcc-11 <span style=color:teal>CXX</span><span style=font-weight:700>=</span>/usr/bin/gcc-11
</span></span></code></pre></div><p>On Fedora, if are sure you have <code>gcc</code> 11, simply export</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span> $ <span style=color:#999>export</span> <span style=color:teal>CC</span><span style=font-weight:700>=</span>/usr/bin/gcc <span style=color:teal>CXX</span><span style=font-weight:700>=</span>/usr/bin/gcc
</span></span></code></pre></div><p>Emacs supports <code>--with-xxx</code> to enable support for feature <code>xxx</code>, which in our case will be:</p><ul><li><code>--with-pgtk</code>, native GTK support</li><li><code>--with-json</code>, native JSON support</li><li><code>--with-native-compilation</code>, native compilation support</li><li><code>--with-xml2</code>, XML support</li><li><code>--with-modules</code>, support for dynamic modules</li><li><code>--with-mailutils</code>, support for <code>mail-utils</code></li></ul><p>So we can run the configure script with</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ ./configure <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> --with-native-compilation <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> --with-json <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> --with-pgtk <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> --with-xml2 <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> --with-modules <span style=color:#b84>\
</span></span></span><span style=display:flex><span><span style=color:#b84></span> --with-mailutils
</span></span></code></pre></div><p>We can now start the build and installation (you can choose the approriate number for your machine for the parallel run, in this case <code>8</code>):</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ make -j8
</span></span><span style=display:flex><span>$ sudo make install
</span></span></code></pre></div><p>If everything completes successfully you should have Emacs 29 available in <code>/usr/local/bin</code></p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ emacs --version
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>GNU Emacs 29.0.50
</span></span><span style=display:flex><span>Copyright <span style=font-weight:700>(</span>C<span style=font-weight:700>)</span> <span style=color:#099>2021</span> Free Software Foundation, Inc.
</span></span><span style=display:flex><span>GNU Emacs comes with ABSOLUTELY NO WARRANTY.
</span></span><span style=display:flex><span>You may redistribute copies of GNU Emacs
</span></span><span style=display:flex><span>under the terms of the GNU General Public License.
</span></span><span style=display:flex><span>For more information about these matters, see the file named COPYING.
</span></span></code></pre></div><h2 id=configuration x-intersect="currentHeading = '#configuration'">Configuration</h2><ul><li><a href=https://ruivieira.dev/doom-emacs.html>Annotated DOOM Emacs config</a></li></ul><h3 id=completion x-intersect="currentHeading = '#completion'">Completion</h3><p>I recently move from <code>helm</code><sup id=fnref:9><a href=#fn:9 class=footnote-ref role=doc-noteref>9</a></sup> to <code>ivy</code>. The main reason is that apparently <code>helm</code> development has stalled.</p><h3 id=the-important-stuff x-intersect="currentHeading = '#the-important-stuff'">The important stuff?</h3><h4 id=icon x-intersect="currentHeading = '#icon'">Icon</h4><p>I’ve also made a vaporwave Emacs icon which you can find in [https://github.com/ruivieira/emacs-vaporwave-icon]<a href>here.</a></p><figure><img src=https://ruivieira.dev/pages/site/images/Emacs.png alt=Emacs.png loading=lazy></figure><h4 id=cursor x-intersect="currentHeading = '#cursor'">Cursor</h4><p>A cursor should blink, in my opinion.
For a history of the blinking cursor see <a href=https://www.inverse.com/innovation/blinking-cursor-history>The Forgotten History of the Blinking Cursor</a>.
You can instruct Emacs to blink it with the appropriate mode<sup id=fnref:10><a href=#fn:10 class=footnote-ref role=doc-noteref>10</a></sup>.</p><div class=highlight><pre tabindex=0 style=background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-lisp data-lang=lisp><span style=display:flex><span>(<span style=color:teal>blink-cursor-mode</span> <span style=color:#099>1</span>)
</span></span></code></pre></div><h4 id=themes x-intersect="currentHeading = '#themes'">Themes</h4><p>An excellent resource for Emacs themes is <a href=https://peach-melpa.org/>Peach MELPA</a>.
Some selected theme are below.</p><p>Here is a list of good themes for Emacs:</p><ul><li><a href=https://github.com/bbatsov/zenburn-emacs>zenburn</a></li><li><a href=https://github.com/jordonbiondo/ample-theme>ample</a></li><li><a href=https://github.com/alezost/alect-themes>alect</a></li><li><a href=https://github.com/n3mo/cyberpunk-theme.el>cyberpunk</a></li><li><a href=https://github.com/morhetz/gruvbox>gruvbox</a></li></ul><p>The theme that I’m currently using is <code>spacemacs-light</code>. It works really well the new <code>org-mode</code> styling.
A more detailed rundown of the specific theming can be found at <a href=https://ruivieira.dev/doom-emacs.html>DOOM Emacs</a>.</p><h2 id=elisp x-intersect="currentHeading = '#elisp'">Elisp</h2><ul><li>The main page for <a href=https://ruivieira.dev/elisp.html>Elisp</a></li><li>You can check my solutions for the Euler project in Elisp: <a href>Project Euler in Elisp</a></li></ul><h2 id=command-line x-intersect="currentHeading = '#command-line'">Command line</h2><h3 id=running-org-files x-intersect="currentHeading = '#running-org-files'">Running org files</h3><h2 id=dynamic-modules x-intersect="currentHeading = '#dynamic-modules'">Dynamic modules</h2><p>Since Emacs 25.1, Emacs can use Dynamic Modules.</p><div class=footnotes role=doc-endnotes><hr><ol><li id=fn:1><p><a href=https://www.spacemacs.org/>https://www.spacemacs.org/</a> <a href=#fnref:1 class=footnote-backref role=doc-backlink>↩︎</a></p></li><li id=fn:2><p><a href=https://github.com/hlissner/doom-emacs>https://github.com/hlissner/doom-emacs</a> <a href=#fnref:2 class=footnote-backref role=doc-backlink>↩︎</a></p></li><li id=fn:3><p><a href=https://github.com/jimeh/emacs-builds>https://github.com/jimeh/emacs-builds</a> <a href=#fnref:3 class=footnote-backref role=doc-backlink>↩︎</a></p></li><li id=fn:4><p><a href=https://www.macports.org/>https://www.macports.org/</a> <a href=#fnref:4 class=footnote-backref role=doc-backlink>↩︎</a></p></li><li id=fn:5><p><a href=https://ports.macports.org/port/emacs/>https://ports.macports.org/port/emacs/</a> <a href=#fnref:5 class=footnote-backref role=doc-backlink>↩︎</a></p></li><li id=fn:6><p>Fedora 32/33. <a href=#fnref:6 class=footnote-backref role=doc-backlink>↩︎</a></p></li><li id=fn:7><p><a href=https://mail.gnu.org/archive/html/emacs-devel/2021-12/msg01732.html>https://mail.gnu.org/archive/html/emacs-devel/2021-12/msg01732.html</a> <a href=#fnref:7 class=footnote-backref role=doc-backlink>↩︎</a></p></li><li id=fn:8><p>This also works with <code>gcc-10</code>. <a href=#fnref:8 class=footnote-backref role=doc-backlink>↩︎</a> <a href=#fnref1:8 class=footnote-backref role=doc-backlink>↩︎</a></p></li><li id=fn:9><p>The main <code>Helm</code> maintainer is Thierry Volpiatto. <a href=#fnref:9 class=footnote-backref role=doc-backlink>↩︎</a></p></li><li id=fn:10><p><a href=https://www.emacswiki.org/emacs/NonBlinkingCursor>https://www.emacswiki.org/emacs/NonBlinkingCursor</a> <a href=#fnref:10 class=footnote-backref role=doc-backlink>↩︎</a></p></li></ol></div></div></article><div id=footer-post-container><div id=footer-post><div id=nav-footer style=display:none><ul><li><a href=https://ruivieira.dev/>Home</a></li><li><a href=https://ruivieira.dev/blog/>Blog</a></li><li><a href=https://ruivieira.dev/draw/>Drawings</a></li><li><a href=https://ruivieira.dev/map/>All pages</a></li><li><a href=https://ruivieira.dev/search.html>Search</a></li></ul></div><div id=toc-footer style=display:none><nav id=TableOfContents><ul><li><a href=#notes-on-emacs>Notes on Emacs</a></li><li><a href=#installation>Installation</a><ul><li><a href=#macos>macOS</a></li><li><a href=#fedora>Fedora</a></li><li><a href=#ubuntu>Ubuntu</a></li><li><a href=#from-source>From source</a></li></ul></li><li><a href=#configuration>Configuration</a><ul><li><a href=#completion>Completion</a></li><li><a href=#the-important-stuff>The important stuff?</a></li></ul></li><li><a href=#elisp>Elisp</a></li><li><a href=#command-line>Command line</a><ul><li><a href=#running-org-files>Running org files</a></li></ul></li><li><a href=#dynamic-modules>Dynamic modules</a></li></ul></nav></div><div id=share-footer style=display:none></div><div id=actions-footer><a id=menu-toggle class=icon href=# onclick='return $("#nav-footer").toggle(),!1' aria-label=Menu><i class="fas fa-bars fa-lg" aria-hidden=true></i> Menu</a>
<a id=toc-toggle class=icon href=# onclick='return $("#toc-footer").toggle(),!1' aria-label=TOC><i class="fas fa-list fa-lg" aria-hidden=true></i> TOC</a>
<a id=share-toggle class=icon href=# onclick='return $("#share-footer").toggle(),!1' aria-label=Share><i class="fas fa-share-alt fa-lg" aria-hidden=true></i> share</a>
<a id=top style=display:none class=icon href=# onclick='$("html, body").animate({scrollTop:0},"fast")' aria-label="Top of Page"><i class="fas fa-chevron-up fa-lg" aria-hidden=true></i> Top</a></div></div></div><footer id=footer><div class=footer-left>Copyright © 2024 Rui Vieira</div><div class=footer-right><nav><ul><li><a href=https://ruivieira.dev/>Home</a></li><li><a href=https://ruivieira.dev/blog/>Blog</a></li><li><a href=https://ruivieira.dev/draw/>Drawings</a></li><li><a href=https://ruivieira.dev/map/>All pages</a></li><li><a href=https://ruivieira.dev/search.html>Search</a></li></ul></nav></div></footer></div></body><link rel=stylesheet href=https://ruivieira.dev/css/fa.min.css><script src=https://ruivieira.dev/js/jquery-3.6.0.min.js></script><script src=https://ruivieira.dev/js/mark.min.js></script><script src=https://ruivieira.dev/js/main.js></script></html>