The Arcology Garden

Why rrix Uses Emacs

LifeTechEmacsTopicsArcology

This is an exploration of why I use Emacs, and the tools I choose to use within Emacs. I work in a collaborative environment across two or more engineering offices, and pair program with colleagues both local and remote as a tool for problem solving and mentorship.

Naturally, conversation comes up around my computing systems, and this presentation is meant to be a distillation of the philosophy behind it.

This is intended to be a live presentation, roughly 45 minutes in length, with live demonstrations of the concepts and applications which are referenced, presented in the context of a team brownbag session. I probably over-prepared for it, and may pilot this to a wider audience or as long-form narrative.

It's provided in outline form for reference and for those with a vivid imagination and is viewable on the World Wide Web largely as a courtesy.

Prior art:

What is Emacs?

Emacs is a text editor. You can open a file, and modify it, and save it for use in other systems.

Emacs is a 40 year old piece of software. Emacs predates the Common User Access paradigms that personal computers made common.

Emacs is a software lisp machine. A simple C core interfaces with the OS and window manager, a simple Scheme-like language interfaces with the user.

Emacs is an application environment whose APIs are built around transforming text and data.

Emacs is a word processor, a mail client, a todo-list, a chat client, an integrated development environment, a desktop window manager, a web browser …

Emacs is The most successful malleable system in history.

Why Emacs? (1)

Let's start with some code, shall we?

(load-theme 'doom-nord-light)
(setq-local mode-line-format nil) ; disable status line in this buffer
(setq org-present-text-scale 3.5)
;; Change font size on starting up `org-present'
(add-hook 'org-present-mode-hook (lambda ()
                                   (org-present-big)
                                   (org-present-read-only)))
(add-hook 'org-present-mode-quit-hook (lambda ()
                                        (org-present-small)
                                        (org-present-read-write)))
;; Set some movement keybindings
(evil-define-key 'normal org-present-mode-keymap (kbd "n") #'org-present-next)
(evil-define-key 'normal org-present-mode-keymap (kbd "p") #'org-present-prev)
;; Jump to this buffer with <SPC>j in `evil-normal-state'
(add-to-list 'same-window-buffer-names "emacs-lnl.org")
(evil-leader/set-key (kbd "j") (lambda() (interactive)
                                 (display-buffer "emacs-lnl.org")))

This block of code, and blocks like it, are 90% of what's drawn me to Emacs. Allow me to explain.

Why Emacs? (2)

Delivers what I want:

Self-Consistency

Programmability

Integration

If everything is text, and everything is consistent, and everything is programmable, then everything can be integrated.

I can, if I choose:

What are the "killer apps"

Where does it fall short?

Questions/Comments

Where can you start?

To quote the Gnus Manual:

You know that Gnus gives you all the opportunity you'd ever want for shooting yourself in the foot. Some people call it flexibility. Gnus is also customizable to a great extent, which means that the user has a say on how Gnus behaves. Other newsreaders might unconditionally shoot you in your foot, but with Gnus, you have a choice!

Malleable Systems like Emacs provide the technically engaged end-user with a nearly endless arsenal of tools, and infinite ways to combine those tools. Emacs is not a tool so much as an workshop of ideas, a set of tools to design the ideal workshop.