Files
org_roam/output/20250214155617-wp_new_emacs_config_blorg.html
2025-12-28 20:41:18 +00:00

484 lines
16 KiB
HTML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2025-12-28 Sun 20:37 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>wp-new-emacs-config-blorg</title>
<meta name="generator" content="Org Mode" />
<style type="text/css">
#content { max-width: 60em; margin: auto; }
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #e6e6e6;
border-radius: 3px;
background-color: #f2f2f2;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: auto;
}
pre.src:before {
display: none;
position: absolute;
top: -8px;
right: 12px;
padding: 3px;
color: #555;
background-color: #f2f2f299;
}
pre.src:hover:before { display: inline; margin-top: 14px;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-authinfo::before { content: 'Authinfo'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { }
</style>
<link rel="stylesheet" href="/assets/styles/style.css" />
<link rel="stylesheet" href="/assets/styles/bigger-picture.min.css" />
<link rel="stylesheet" href="/assets/styles/media.css" />
<script src="/assets/scripts/script.js" defer></script>
<script src="/assets/scripts/search.js" defer></script>
<script src="/assets/scripts/bigger-picture.min.js" defer></script>
<script src="/assets/scripts/svg-pan-zoom.min.js" defer></script>
<script src="/assets/scripts/gallery-init.js" defer></script>
</head>
<body>
<div id="preamble" class="status">
<div class="banner-header">
<div class="banner-left">
<a href="/20241210233721-brain_moc.html"> <img src="/assets/gr.png" alt="Site Logo" class="banner-logo" /> </a>
<div id="updated">Updated: 2025-12-28 Sun 19:48</div>
</div>
<div class="banner-search">
<input id="search-box"
type="search"
placeholder="Search notes…"
aria-label="Search notes"
autocomplete="off" />
<div id="search-results"></div>
</div>
<button id="close-all">Close All</button>
</div>
</div>
<div id="stack-root">
<div class="stack-track">
<article class="stack-pane pane-root" data-url="/20250214155617-wp_new_emacs_config_blorg.html">
<div id="content" class="content">
<div class="title-section">
<div class="title-controls">
<button class="pane-fullscreen" aria-label="Fullscreen">F</button>
<button class="pane-edit" aria-label="Edit pane">E</button>
<button class="pane-close" aria-label="Close pane">×</button>
</div>
<h1 class="title">wp-new-emacs-config-blorg</h1>
<div class="title-metadata">
<span class="metadata-item">
<span class="metadata-label">planted:</span>
<span class="metadata-value">2025-02-14</span>
</span>
<span class="metadata-item">
<span class="metadata-label">last tended to:</span>
<span class="metadata-value">2025-12-28</span>
</span>
</div>
</div>
<p>
I recently spoke about what Emacs is, and how it is useful for productivity. I wanted to write this up again and dive more into the other files that were stored in the `/scripts` directory , as well as how to set it up.
</p>
<p>
## Prerequisites
</p>
<p>
Before we begin, ensure you have Emacs installed. You can install Emacs using the following commands based on your operating system:
</p>
<ul class="org-ul">
<li><b><b>Ubuntu/Debian:</b></b> `sudo apt install emacs`</li>
<li><b><b>MacOS (Homebrew):</b></b> `brew install emacs`</li>
<li><b><b>Windows:</b></b> Use [MSYS2](<a href="https://www.msys2.org/">https://www.msys2.org/</a>) or install Emacs from [GNU Emacs](<a href="https://www.gnu.org/software/emacs/">https://www.gnu.org/software/emacs/</a>).</li>
</ul>
<p>
Additionally, ensure that `git` is installed to clone repositories and manage configurations.
</p>
<p>
## Download the Configuration Files
</p>
<p>
First let&rsquo;s walk through how to set this up.
</p>
<p>
Clone the repository or manually download the provided configuration files into your `~/.emacs.d/` directory:
</p>
<p>
```sh
mkdir -p ~/.emacs.d/
cd ~/.emacs.d/
```
</p>
<p>
The following file should be copied to `~/.emacs.d/`:
</p>
<ul class="org-ul">
<li>`init.el`</li>
</ul>
<p>
And the following files should be copied into `~/.emacs.d/scripts`:
</p>
<ul class="org-ul">
<li>`auto-comp.el`</li>
<li>`custom-agenda.el`</li>
<li>`displays.el`</li>
<li>`keyboard.el`</li>
<li>`shells.el`</li>
<li>`window.el`</li>
</ul>
<p>
If you are using `git`, you can clone your repository directly:
</p>
<p>
```sh
git clone <a href="https://github.com/zainezq/dot-files/tree/main/emacs-config">https://github.com/zainezq/dot-files/tree/main/emacs-config</a>
```
## Understanding the Configuration
</p>
<p>
This configuration is modularised for easier maintenance. Each file handles a specific feature:
</p>
<p>
### `init.el`: The Core Configuration
</p>
<p>
The `init.el` file is the entry point of the configuration. It:
</p>
<ul class="org-ul">
<li>Loads package management (MELPA, `use-package`)</li>
<li>Imports additional modules (`displays`, `shells`, `auto-comp`, `window`, `keyboard`, `custom-agenda`)</li>
<li>Configures UI elements such as themes, icons, and window behavior</li>
<li>Sets up Org mode and language support</li>
<li>Enables Evil mode for Vim-like keybindings</li>
</ul>
<p>
### `auto-comp.el`: Auto-Completion Setup
</p>
<p>
This file configures `company-mode` for autocompletion in Emacs. It:
</p>
<ul class="org-ul">
<li>Loads `company-mode` and `company-box` for a better UI</li>
<li>Sets the minimum prefix length and delay before suggestions appear</li>
<li>Enables backend support for various modes</li>
</ul>
<p>
### `keyboard.el`: Custom Keybindings
</p>
<p>
This file sets up keybindings using the `general.el` package. Some useful shortcuts include:
</p>
<ul class="org-ul">
<li>`SPC .` → Open file finder</li>
<li>`SPC f c` → Open `init.el` for quick edits</li>
<li>`SPC b b` → Switch buffers</li>
<li>`SPC w 1` → Removes (not kills) all buffers except the current one</li>
<li>`SPC t n` → Toggle NeoTree file explorer</li>
</ul>
<p>
### `window.el`: Window Management
</p>
<p>
Defines functions for moving buffers between splits using `windmove`. Functions include:
</p>
<ul class="org-ul">
<li>`buf-move-up` → Swap buffers up</li>
<li>`buf-move-down` → Swap buffers down</li>
<li>`buf-move-left` → Swap buffers left</li>
<li>`buf-move-right` → Swap buffers right</li>
</ul>
<p>
### `shells.el`: Shell and Terminal Integration
</p>
<p>
Configures:
</p>
<ul class="org-ul">
<li>`vterm` as the primary terminal</li>
<li>`eshell-toggle` for quick access to Eshell</li>
<li>`vterm-toggle` for easy terminal toggling</li>
</ul>
<p>
### `custom-agenda.el`: Org Mode Enhancements
</p>
<p>
This file customises Org mode agendas. It:
</p>
<ul class="org-ul">
<li>Configures custom agenda views</li>
<li>Hides the Org agenda startup message</li>
<li>Enables extra features such as displaying scheduled tasks</li>
</ul>
<p>
### `displays.el`: UI Enhancements
</p>
<p>
This file improves the visual experience in Emacs:
</p>
<ul class="org-ul">
<li>Configures `dashboard.el` to show a custom startup screen, you may modify this to your liking, see: [Emacs Dashboard](<a href="https://github.com/emacs-dashboard/emacs-dashboard">https://github.com/emacs-dashboard/emacs-dashboard</a>)</li>
<li>Enables `neotree` for file navigation</li>
<li>Hides unnecessary UI elements for a cleaner look</li>
</ul>
<p>
## Installing Dependencies
</p>
<p>
Open Emacs and run the following command to install missing packages:
</p>
<p>
```sh
M-x package-refresh-contents
M-x package-install-selected-packages
```
</p>
<p>
Alternatively, restart Emacs, and `use-package` will automatically install any missing dependencies.
</p>
<p>
If any issues arise, check `*Messages*` buffer (`M-x view-echo-area-messages`) or start Emacs with debugging mode enabled (`emacs &#x2013;debug-init`). What I tend to do is whenever I encounter any errors, I run emacs in minimal mode: `emacs -Q`, this loads emacs without the init.el file (if I can&rsquo;t pinpoint the exact error).
</p>
<p>
## Final Notes
</p>
<p>
This configuration optimises Emacs for efficient navigation, organisation, and shell integration.
Everybodies configuration will differ based on their needs, so feel free to take and leave the parts as you wish!
</p>
<p>
For additional customisation, refer to the official package documentation:
</p>
<ul class="org-ul">
<li>[General.el (Keybindings)](<a href="https://github.com/noctuid/general.el">https://github.com/noctuid/general.el</a>)</li>
<li>[Evil Mode (Vim keybindings)](<a href="https://github.com/emacs-evil/evil">https://github.com/emacs-evil/evil</a>)</li>
<li>[Org Mode](<a href="https://orgmode.org/">https://orgmode.org/</a>)</li>
<li>[Neotree (File navigation)](<a href="https://github.com/jaypei/emacs-neotree">https://github.com/jaypei/emacs-neotree</a>)</li>
</ul>
<p class="backlinks-section" id="backlinks">
Backlinks
</p>
<ul class="org-ul backlinks-list">
<li><a href="20241217234535-web_port_notes.html#ID-348df473-6443-4f4a-b366-95397b574989">web-port-notes</a></li>
</ul>
</div>
</div></article></div></div>
<div id="postamble" class="status">
<footer>
<div class="copyright-container">
<div class="copyright">
Copyright &copy; 2022-2025 Zaine Qayyum. All rights reserved unless otherwise noted.</div></div>
<div class="generated">
Created with <a href="https://www.gnu.org/software/emacs/">Emacs</a> 30.2 (<a href="https://orgmode.org">Org</a> mode 9.7.11) on <a href="https://www.archlinux.org/">Arch</a> <a href="https://www.gnu.org">GNU</a>/<a href="https://www.kernel.org/">Linux</a>
</div>
</footer>
</div>
</body>
</html>