<?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 Ozbem</title><link>https://www.ozbem.com/tags/tech/emacs/</link><description>Recent content in Emacs on Ozbem</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>info@ozbem.com (ebeem)</managingEditor><webMaster>info@ozbem.com (ebeem)</webMaster><copyright>© 2026 ebeem</copyright><lastBuildDate>Mon, 03 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.ozbem.com/tags/tech/emacs/rss.xml" rel="self" type="application/rss+xml"/><item><title>1- Emacs Terminology (Emacs Survival Guide)</title><link>https://www.ozbem.com/posts/tech/emacs/emacs-survival-guide-01/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><author>info@ozbem.com (ebeem)</author><guid>https://www.ozbem.com/posts/tech/emacs/emacs-survival-guide-01/</guid><description>&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;Calling Emacs simply a text editor is like calling Windows a text editor just because it happens to ship with &lt;code&gt;Notepad&lt;/code&gt;. At its core, Emacs is an interactive Emacs Lisp (&lt;code&gt;Elisp&lt;/code&gt;) environment layered on top of a &lt;code&gt;C&lt;/code&gt; engine. On top of this runtime environment, an entire ecosystem is built: a text editor, web browser, calculator, calendar, mail and news reader, RSS reader, IRC client, Tetris game, and countless other utilities. While all of these tools come built into Emacs out of the box, the community has also created thousands of third-party packages using that very same environment.&lt;/p&gt;&#10;&lt;p&gt;&#10;Emacs is best described as an &lt;code class="verbatim"&gt;extensible&lt;/code&gt;, &lt;code class="verbatim"&gt;self-documenting&lt;/code&gt;, and primarily &lt;code class="verbatim"&gt;keyboard-driven&lt;/code&gt; computing environment:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Extensible&lt;/code&gt;: Virtually all built-in tools, workflows, and core components can be customized or entirely replaced.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Self-documenting&lt;/code&gt;: All the help and reference material you need is available directly inside &lt;code&gt;Emacs&lt;/code&gt;. You can explore, inspect, and learn Emacs using its own introspection tools.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Keyboard-driven&lt;/code&gt;: While mouse support is available, Emacs is designed to be driven entirely by the keyboard. Investing in a good ergonomic split keyboard and learning touch typing is very rewarding.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure&gt;&#10;&lt;p&gt;&#10;&lt;img src="./imgs/Emacs Architecture.svg" alt="./imgs/Emacs Architecture.svg" title="./imgs/Emacs Architecture.svg" /&gt;&lt;/p&gt;&#10;&lt;figcaption&gt;&#10;Diagram of the Emacs architecture: built-in and third-party tools layered over the Elisp runtime and core C engine&#10;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&#10;This section might seem boring at first, but understanding Emacs terminology is essential. It clarifies how Emacs is structured, making it far easier to master its commands and navigate its documentation.&lt;/p&gt;&#10;&lt;p&gt;&#10;Emacs was developed in the 1970s and it predates modern graphical desktop conventions by more than a decade. Its vocabulary can feel counterintuitive to newcomers used to modern operating systems. To bridge that gap, this guide maps Emacs terms to their counterparts in &lt;code&gt;VSCode&lt;/code&gt;. &lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; These comparisons help you understand the terminology, but you should adopt native Emacs terminology by calling components by their proper names which will make manuals and community tutorials much easier to follow.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;Frame&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;p&gt;A &lt;strong&gt;Frame&lt;/strong&gt; is an independent operating system window. Just as you can open multiple &lt;code&gt;VSCode&lt;/code&gt; windows across different monitors, you can spawn multiple Emacs &lt;strong&gt;Frames&lt;/strong&gt; across your screens.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Window&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;An Emacs &lt;strong&gt;Window&lt;/strong&gt; is a pane inside a &lt;strong&gt;Frame&lt;/strong&gt;. Just as you can split your &lt;code&gt;VSCode&lt;/code&gt; editor area into vertical or horizontal panes to view different files side by side, you can split an Emacs &lt;strong&gt;Frame&lt;/strong&gt; into multiple &lt;strong&gt;Windows&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Buffer&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;A &lt;strong&gt;Buffer&lt;/strong&gt; is an in-memory object containing text or binary data. You can think of it as an open file/tab inside &lt;code&gt;VSCode&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;Emacs buffers fall into three primary categories:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;File-Visiting Buffers:&lt;/strong&gt; Associated with persistent files on disk, such as source code files and notes.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Process Buffers:&lt;/strong&gt; Driven by underlying system processes, such as terminal emulators and compilation outputs.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Internal Buffers:&lt;/strong&gt; Utilities maintained directly by Emacs, typically named with surrounding asterisks (such as &lt;code class="verbatim"&gt;*scratch*&lt;/code&gt; for Elisp scratchpads and &lt;code class="verbatim"&gt;*Messages*&lt;/code&gt; for runtime logs).&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Mode Line&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;A &lt;strong&gt;Mode Line&lt;/strong&gt; is a status bar displayed at the bottom of every Emacs &lt;strong&gt;Window&lt;/strong&gt;. It functions like the status bar in &lt;code&gt;VSCode&lt;/code&gt;, reporting diagnostics such as modification state, current line number, and file encoding. Unlike &lt;code&gt;VSCode&lt;/code&gt;&amp;#39;s single global bar, every active window in Emacs has its own dedicated &lt;strong&gt;Mode Line&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;Echo Area&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;p&gt;The &lt;strong&gt;Echo Area&lt;/strong&gt; is a single-line output display at the bottom of the Emacs &lt;strong&gt;Frame&lt;/strong&gt;. It displays short status updates, error alerts, and function output, serving a purpose similar to the bottom output or notification panel in modern editors.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;Minibuffer&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;&lt;p&gt;The &lt;strong&gt;Minibuffer&lt;/strong&gt; is an interactive prompt at the bottom of the frame that activates whenever Emacs needs user input. It functions similarly to &lt;code&gt;VSCode&lt;/code&gt;&amp;#39;s Command Palette, prompting for commands, file names, or search queries.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;Major Mode&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;p&gt;Every buffer has exactly one &lt;strong&gt;Major Mode&lt;/strong&gt; active at any time. It governs fundamental behaviors including syntax highlighting, indentation rules, and language-specific keybindings like Python mode, Rust mode, and Org mode.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-3"&gt;&#10;&lt;h3 id="headline-9"&gt;&#10;Minor Mode&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-3"&gt;&#10;&lt;p&gt;&lt;strong&gt;Minor Modes&lt;/strong&gt; are modular, optional features layered on top of the&#10;active major mode. Multiple minor modes can run concurrently in a single buffer, providing granular functionality such as line numbers, on-the-fly spell checking, and auto-saving.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-2"&gt;&#10;&lt;h2 id="headline-10"&gt;&#10;Discovery and Completion&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-2"&gt;&#10;&lt;p&gt;I still remember very well the first time I downloaded and ran &lt;code&gt;Emacs&lt;/code&gt; back in 2008. I&amp;#39;m certain I said something along the lines of, &amp;#34;Meh, this definitely isn&amp;#39;t my type of text editor.&amp;#34; Out of the box, Emacs is plain and confusing for newcomers, it also has a steep learning curve. However, there is a good reason so many developers stick with it and treat it almost as a way of life, there simply is no other tool that offers what &lt;code&gt;Emacs&lt;/code&gt; provides.&lt;/p&gt;&#10;&lt;figure&gt;&#10;&lt;p&gt;&#10;&lt;img src="imgs/emacs-vanilla-vs-customized.png" alt="imgs/emacs-vanilla-vs-customized.png" title="imgs/emacs-vanilla-vs-customized.png" /&gt;&lt;/p&gt;&#10;&lt;figcaption&gt;&#10;On the left is a customized Emacs setup; on the right is vanilla Emacs without any customizations.&#10;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&#10;I prepared a minimal helpful starter kit. For now, do not worry about the Lisp syntax or how every detail works under the hood. We will break down package management and configuration step by step in future articles. The goal right now is simply to give you a polished and modern environment.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-11" class="outline-3"&gt;&#10;&lt;h3 id="headline-11"&gt;&#10;Locating Your Configuration File&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-11" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;Emacs stores its user configuration in a file called &lt;code class="verbatim"&gt;init.el&lt;/code&gt;. If this file does not exist yet, you can create it in the following locations depending on your operating system:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Linux &amp;amp; macOS:&lt;/strong&gt; &lt;code class="verbatim"&gt;~/.emacs.d/init.el&lt;/code&gt; or &lt;code class="verbatim"&gt;~/.config/emacs/init.el&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Windows:&lt;/strong&gt; &lt;code class="verbatim"&gt;%APPDATA%/.emacs.d/init.el&lt;/code&gt; (typically &lt;code class="verbatim"&gt;C:/Users/&amp;lt;Username&amp;gt;/AppData/Roaming/.emacs.d/init.el&lt;/code&gt;)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Open or create &lt;code class="verbatim"&gt;init.el&lt;/code&gt;, replace its contents with the configuration below, and restart Emacs. If the file was loaded successfully, you will notice your Emacs became dark themed.&lt;/p&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;;; init.el --- Minimal configuration for Emacs 30+ -*- lexical-binding: t; -*-&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;;; Package management&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;package&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-to-list&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;package-archives&lt;/span&gt; &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gnu&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;https://elpa.gnu.org/packages/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-to-list&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;package-archives&lt;/span&gt; &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;nongnu&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;https://elpa.nongnu.org/nongnu/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-to-list&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;package-archives&lt;/span&gt; &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;melpa&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;https://melpa.org/packages/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;package-initialize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;use-package&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;;; typography&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;set-face-attribute&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;default&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;;; :family &amp;#34;Iosevka&amp;#34; ;; Uncomment and set your preferred font&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:height&lt;/span&gt; &lt;span class="mi"&gt;160&lt;/span&gt; &lt;span class="c1"&gt;;; Font size (1/10 pt, e.g., 160 = 16pt)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:weight&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;regular&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;;; theme&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;use-package&lt;/span&gt; &lt;span class="nv"&gt;modus-themes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:ensure&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:config&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;load-theme&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;modus-vivendi-tinted&lt;/span&gt; &lt;span class="nb"&gt;:no-confirm&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;;; which-key: in-buffer keybinding cheat sheet (built-in starting in emacs 30)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;use-package&lt;/span&gt; &lt;span class="nv"&gt;which-key&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:ensure&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:init&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;which-key-mode&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;;; vertico: vertical minibuffer completion ui&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;use-package&lt;/span&gt; &lt;span class="nv"&gt;vertico&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:ensure&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:init&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;vertico-mode&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;;; orderless: out-of-order space-separated fuzzy pattern matching&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;use-package&lt;/span&gt; &lt;span class="nv"&gt;orderless&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:ensure&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:custom&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;completion-styles&lt;/span&gt; &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;orderless&lt;/span&gt; &lt;span class="nv"&gt;basic&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;completion-category-defaults&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;completion-category-overrides&lt;/span&gt; &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;styles&lt;/span&gt; &lt;span class="nv"&gt;partial-completion&lt;/span&gt;&lt;span class="p"&gt;)))))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;;; marginalia: contextual annotations in minibuffer margins&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;use-package&lt;/span&gt; &lt;span class="nv"&gt;marginalia&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:ensure&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;:init&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;marginalia-mode&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;;; sensible ui defaults&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;inhibit-startup-screen&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;menu-bar-mode&lt;/span&gt; &lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;tool-bar-mode&lt;/span&gt; &lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;scroll-bar-mode&lt;/span&gt; &lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;;; init.el ends here&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-12" class="outline-2"&gt;&#10;&lt;h2 id="headline-12"&gt;&#10;What&amp;#39;s Next?&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-12" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;Understanding the separation between frames, windows, buffers, and modes establishes a solid foundation for everything that follows.&lt;/p&gt;&#10;&lt;p&gt;&#10;In &lt;a href="../emacs-survival-guide-02/"&gt;Part 2: User Input &amp;amp; Text Navigation&lt;/a&gt;, we explore the Emacs input hierarchy, modifier chords, and motion primitives.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Emacs Vanilla vs Flavors (Spacemacs and Doom Emacs)</title><link>https://www.ozbem.com/posts/tech/emacs/vanilla-vs-flavors/</link><pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate><author>info@ozbem.com (ebeem)</author><guid>https://www.ozbem.com/posts/tech/emacs/vanilla-vs-flavors/</guid><description>&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Where to Begin?&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;Emacs is not just a text editor, it is a Lisp machine that happens to edit text. When stepping into the Emacs ecosystem, new users are immediately faced with a choice: build from scratch (&lt;code class="verbatim"&gt;Vanilla Emacs&lt;/code&gt;) or use a pre-configured starter kit like &lt;code class="verbatim"&gt;Doom Emacs&lt;/code&gt; or &lt;code class="verbatim"&gt;Spacemacs&lt;/code&gt;. Each approach has distinct pros and cons, and understanding them can save you months of configuration frustration.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;The Batteries-Included Flavors&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;Starter kits are fantastic for package discovery. They show you exactly what Emacs is capable of right out of the box, coming pre-configured with themes, completion frameworks, and integrations for almost every programming language.&lt;/p&gt;&#10;&lt;p&gt;&#10;However, this convenience comes at a cost. &amp;#34;Batteries-included&amp;#34; setups reduce your visibility into the underlying mechanics. When something breaks, or when you want to change a core behavior, deep customization becomes harder. You often find yourself fighting the framework&amp;#39;s design rather than just configuring Emacs.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Spacemacs&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10; &lt;img src="imgs/spacemacs-screenshot.png" alt="imgs/spacemacs-screenshot.png" title="imgs/spacemacs-screenshot.png" /&gt;&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;code class="verbatim"&gt;Spacemacs&lt;/code&gt; revolutionized the community by popularizing mnemonic, space-bar-driven keybindings and excellent &lt;code class="verbatim"&gt;Vim&lt;/code&gt; emulation. However, it relies heavily on configuration &amp;#34;layers.&amp;#34;&lt;/p&gt;&#10;&lt;p&gt;&#10;These layers add a massive amount of abstraction on top of the base editor. While this makes it incredibly easy to toggle features on and off, migrating your configuration from &lt;code class="verbatim"&gt;Spacemacs&lt;/code&gt; to &lt;code class="verbatim"&gt;Vanilla Emacs&lt;/code&gt; becomes an extremely difficult task. Because of the heavy abstraction, you end up learning the &amp;#34;Spacemacs way&amp;#34; rather than the &amp;#34;Emacs way.&amp;#34;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Doom Emacs&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;&lt;img src="imgs/doom-emacs-screenshot.png" alt="imgs/doom-emacs-screenshot.png" title="imgs/doom-emacs-screenshot.png" /&gt;&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;code class="verbatim"&gt;Doom Emacs&lt;/code&gt; takes a different philosophical approach. It still provides a beautiful, feature-rich out-of-the-box experience, but it significantly reduces the layers between the user&amp;#39;s configuration and the core Emacs configuration.&lt;/p&gt;&#10;&lt;p&gt;&#10;It utilizes clever macros to keep startup times incredibly fast and maintains a structure much closer to standard Emacs Lisp. If you want to peek under the hood and see how a feature is implemented, &lt;code class="verbatim"&gt;Doom&lt;/code&gt; makes it highly visible and accessible.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-2"&gt;&#10;&lt;h2 id="headline-5"&gt;&#10;Vanilla Emacs&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;&lt;img src="imgs/vanilla-emacs-screenshot.png" alt="imgs/vanilla-emacs-screenshot.png" title="imgs/vanilla-emacs-screenshot.png" /&gt;&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;code class="verbatim"&gt;Vanilla Emacs&lt;/code&gt; is exactly what you get when you download the software from the GNU website. It is a completely blank slate.&lt;/p&gt;&#10;&lt;p&gt;&#10;The primary advantage here is total ownership. You understand every single line in your configuration file because you put it there. You learn standard Emacs Lisp, making it straightforward to read official documentation and leverage community packages. The major downside is the steep learning curve. You are fully responsible for setting up your own package manager, user interface, completion frameworks, and language servers.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-2"&gt;&#10;&lt;h2 id="headline-6"&gt;&#10;The Keybinding&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;Your choice of flavor is often heavily tied to your preferred typing style and hardware setup.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;Evil Mode (Vim Bindings)&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;If you are a user coming from &lt;code class="verbatim"&gt;vi&lt;/code&gt; or &lt;code class="verbatim"&gt;Vim&lt;/code&gt;, &lt;code class="verbatim"&gt;Evil mode&lt;/code&gt; (which powers both &lt;code class="verbatim"&gt;Spacemacs&lt;/code&gt; and &lt;code class="verbatim"&gt;Doom&lt;/code&gt; by default) is practically magic. It flawlessly brings the language of Vim text objects into Emacs. However, modal editing can sometimes feel like a second-class citizen in niche Emacs packages, requiring extra translation packages (like &lt;code class="verbatim"&gt;evil-collection&lt;/code&gt;) to make third-party tools play nicely.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;Vanilla Bindings (Emacs Bindings)&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;Standard Emacs keybindings (using &lt;code class="verbatim"&gt;Ctrl&lt;/code&gt; and &lt;code class="verbatim"&gt;Meta&lt;/code&gt;). They are deeply integrated into the entire Emacs ecosystem. Everything just works, seamlessly and consistently without any translation layers.&lt;/p&gt;&#10;&lt;p&gt;&#10;The common complaint is that they require uncomfortable hand stretching. However, if you use a high-quality split ergonomic keyboard, you can easily map modifiers to your thumb clusters. With good hardware, the chances are high that you will not need anything but the standard vanilla keybindings.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-3"&gt;&#10;&lt;h3 id="headline-9"&gt;&#10;Meow (Middle Ground)&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;If you want the ergonomic benefits of modal editing without straying too far from the standard ecosystem, the &lt;code class="verbatim"&gt;meow&lt;/code&gt; package is a fantastic alternative. Packages like &lt;code class="verbatim"&gt;meow&lt;/code&gt; try to sit right in the middle. It allows modal editing but does not fight the default Emacs environment the way &lt;code class="verbatim"&gt;Evil&lt;/code&gt; sometimes does, keeping your experience much closer to vanilla Emacs.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-2"&gt;&#10;&lt;h2 id="headline-10"&gt;&#10;My Recommendation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;For newcomers to &lt;code class="verbatim"&gt;Emacs&lt;/code&gt;, I highly recommend starting with &lt;code class="verbatim"&gt;Doom Emacs&lt;/code&gt;. It offers a polished, out-of-the-box experience that lets you get real work done immediately while showing you what Emacs is truly capable of. Later on, as you pick up Emacs Lisp and learn more about the popular packages, you will want to configure things exactly your way, you&amp;#39;ll be well-prepared to drop the starter kit and craft your own &lt;code class="verbatim"&gt;Vanilla Emacs&lt;/code&gt; configuration from scratch.&lt;/p&gt;&#10;&lt;p&gt;&#10;If you&amp;#39;re already a &lt;code class="verbatim"&gt;vim&lt;/code&gt; user or just want to explore modal editing, &lt;code class="verbatim"&gt;evil-mode&lt;/code&gt; provides a fantastic experience. If you want the benefits of modal editing but aren&amp;#39;t tied to traditional vim bindings, &lt;code class="verbatim"&gt;meow&lt;/code&gt; is an excellent alternative. I do believe everyone should learn vim keybindings eventually as they are invaluable when you find yourself on a machine without Emacs. However, as a modal editing package, I prefer &lt;code class="verbatim"&gt;meow&lt;/code&gt; over &lt;code class="verbatim"&gt;evil-mode&lt;/code&gt; because it&amp;#39;s lightweight and integrates much more naturally with the native Emacs ecosystem. If you type on a solid ergonomic split keyboard, I strongly suggest sticking to standard vanilla Emacs keybindings.&lt;/p&gt;&#10;&lt;p&gt;&#10;My personal progression went from &lt;code class="verbatim"&gt;Spacemacs&lt;/code&gt; to &lt;code class="verbatim"&gt;Doom Emacs&lt;/code&gt;, and finally to vanilla. If I go back in time I would skip &lt;code class="verbatim"&gt;Spacemacs&lt;/code&gt;, it didn&amp;#39;t teach me much about how things work under the hood. My editing journey followed a similar path: &lt;code class="verbatim"&gt;evil-mode&lt;/code&gt; to &lt;code class="verbatim"&gt;meow&lt;/code&gt; to vanilla. I am incredibly glad I spent time with &lt;code class="verbatim"&gt;evil-mode&lt;/code&gt;, as it left me highly proficient and comfortable with vim keybindings.&lt;/p&gt;&#10;&lt;p&gt;&#10; Useful Resources&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/doomemacs/doomemacs"&gt;Doom Emacs GitHub&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.spacemacs.org/"&gt;Spacemacs Official Website&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/meow-edit/meow"&gt;Meow - Modal Editing for Emacs&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;</description></item></channel></rss>