about summary refs log tree commit diff
path: root/web/blog/posts/emacs-is-underrated.md
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2020-06-26T19·25+0100
committertazjin <mail@tazj.in>2020-06-26T19·33+0000
commita2cbbedc65c9200fd3c2a6a698366ac431cc153d (patch)
treead3ef740c5f1fb155cc7f2d7eb5be50bc14017db /web/blog/posts/emacs-is-underrated.md
parenta46ffd85f50e75c3bcb3cac52eade6b35f4c0300 (diff)
chore(tazjin): Move //web/blog & //web/homepage to my userdir r/1087
Change-Id: I96a2620ffb1d9e98a1d8ce7d97f2c4f58c2dbfd3
Reviewed-on: https://cl.tvl.fyi/c/depot/+/603
Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'web/blog/posts/emacs-is-underrated.md')
-rw-r--r--web/blog/posts/emacs-is-underrated.md233
1 files changed, 0 insertions, 233 deletions
diff --git a/web/blog/posts/emacs-is-underrated.md b/web/blog/posts/emacs-is-underrated.md
deleted file mode 100644
index afb8dc889e53..000000000000
--- a/web/blog/posts/emacs-is-underrated.md
+++ /dev/null
@@ -1,233 +0,0 @@
-TIP: Hello, and thanks for offering to review my draft! This post
-intends to convey to people what the point of Emacs is. Not to convert
-them to use it, but at least with opening their minds to the
-possibility that it might contain valuable things. I don't know if I'm
-on track in the right direction, and your input will help me figure it
-out. Thanks!
-
-TODO(tazjin): Restructure sections: Intro -> Introspectability (and
-story) -> text-based UIs (which lead to fluidity, muscle memory across
-programs and "translatability" of workflows) -> Outro. It needs more
-flow!
-
-TODO(tazjin): Highlight more that it's not about editing: People can
-derive useful things from Emacs by just using magit/org/notmuch/etc.!
-
-TODO(tazjin): Note that there's value in trying Emacs even if people
-don't end up using it, similar to how learning languages like Lisp or
-Haskell helps grow as a programmer even without using them day-to-day.
-
-*Real post starts below!*
-
----------
-
-There are two kinds of people: Those who use Emacs, and those who
-think it is a text editor. This post is aimed at those in the second
-category.
-
-Emacs is the most critical piece of software I run. My [Emacs
-configuration][emacs-config] has steadily evolved for almost a decade.
-Emacs is my window manager, mail client, terminal, git client,
-information management system and - perhaps unsurprisingly - text
-editor.
-
-Before going into why I chose to invest so much into this program,
-follow me along on a little thought experiment:
-
-----------
-
-Lets say you use a proprietary spreadsheet program. You find that
-there are features in it that *almost, but not quite* do what you
-want.
-
-What can you do? You can file a feature request to the company that
-makes it and hope they listen, but for the likes of Apple and
-Microsoft chances are they won't and there is nothing you can do.
-
-Let's say you are also running an open-source program for image
-manipulation. You again find that some of its features are subtly
-different from what you would want them to do.
-
-Things look a bit different this time - after all, the program is
-open-source! You can go and fetch its source code, figure out its
-internal structure and wrangle various layers of code into submission
-until you find the piece that implements the functionality you want to
-change. If you know the language it is written in; you can modify the
-feature.
-
-Now all that's left is figuring out its build system[^1], building and
-installing it and moving over to the new version.
-
-Realistically you are not going to do this much in the real world. The
-friction to contributing to projects, especially complex ones, is
-often quite high. For minor inconveniences, you might often find
-yourself just shrugging and working around them.
-
-What if it didn't have to be this way?
-
--------------
-
-One of the core properties of Emacs is that it is *introspective* and
-*self-documenting*.
-
-For example: A few years ago, I had just switched over to using
-[EXWM][], the Emacs X Window Manager. To launch applications I was
-using an Emacs program called Helm that let me select installed
-programs interactively and press <kbd>RET</kbd> to execute them.
-
-This was very useful - until I discovered that if I tried to open a
-second terminal window, it would display an error:
-
-    Error: urxvt is already running
-
-Had this been dmenu, I might have had to go through the whole process
-described above to fix the issue. But it wasn't dmenu - it was an
-Emacs program, and I did the following things:
-
-1. I pressed <kbd>C-h k</kbd>[^2] (which means "please tell me what
-   the following key does"), followed by <kbd>s-d</kbd> (which was my
-   keybinding for launching programs).
-
-2. Emacs displayed a new buffer saying, roughly:
-
-   ```
-   s-d runs the command helm-run-external-command (found in global-map),
-   which is an interactive autoloaded compiled Lisp function in
-   ‘.../helm-external.el’.
-
-   It is bound to s-d.
-   ```
-
-   I clicked on the filename.
-
-3. Emacs opened the file and jumped to the definition of
-   `helm-run-external-command`. After a few seconds of reading through
-   the code, I found this snippet:
-
-   ```lisp
-   (if (get-process proc)
-       (if helm-raise-command
-           (shell-command  (format helm-raise-command real-com))
-         (error "Error: %s is already running" real-com))
-     ;; ... the actual code to launch programs followed below ...
-     )
-   ```
-
-4. I deleted the outer if-expression which implemented the behaviour I
-   didn't want, pressed <kbd>C-M-x</kbd> to reload the code and saved
-   the file.
-
-The whole process took maybe a minute, and the problem was now gone.
-
-Emacs isn't just "open-source", it actively encourages the user to
-modify it, discover what to modify and experiment while it is running.
-
-In some sense it is like the experience of the old Lisp machines, a
-paradigm that we have completely forgotten.
-
----------------
-
-Circling back to my opening statement: If Emacs is not a text editor,
-then what *is* it?
-
-The Emacs website says this:
-
-> [Emacs] is an interpreter for Emacs Lisp, a dialect of the Lisp
-> programming language with extensions to support text editing
-
-The core of Emacs implements the language and the functionality needed
-to evaluate and run it, as well as various primitives for user
-interface construction such as buffers, windows and frames.
-
-Every other feature of Emacs is implemented *in Emacs Lisp*.
-
-The Emacs distribution ships with rudimentary text editing
-functionality (and some language-specific support for the most popular
-languages), but it also brings with it two IRC clients, a Tetris
-implementation, a text-mode web browser, [org-mode][] and many other
-tools.
-
-Outside of the core distribution there is a myriad of available
-programs for Emacs: [magit][] (the famous git porcelain), text-based
-[HTTP clients][], even interactive [Kubernetes frontends][k8s].
-
-What all of these tools have in common is that they use text-based
-user interfaces (UI elements like images are used only sparingly in
-Emacs), and that they can be introspected and composed like everything
-else in Emacs.
-
-If magit does not expose a git flag I need, it's trivial to add. If I
-want a keybinding to jump from a buffer showing me a Kubernetes pod to
-a magit buffer for the source code of the container, it only takes a
-few lines of Emacs Lisp to implement.
-
-As proficiency with Emacs Lisp ramps up, the environment becomes
-malleable like clay and evolves along with the user's taste and needs.
-Muscle memory learned for one program translates seamlessly to others,
-and the overall effect is an improvement in *workflow fluidity* that
-is difficult to overstate.
-
-Also, workflows based on Emacs are *stable*. Moving my window
-management to Emacs has meant that I'm not subject to the whim of some
-third-party developer changing my window layouting features (as they
-often do on MacOS).
-
-To illustrate this: Emacs has development history back to the 1970s,
-continuous git history that survived multiple VCS migrations [since
-1985][first-commit] (that's 22 years before git itself was released!)
-and there is code[^3] implementing interactive functionality that has
-survived unmodified in Emacs *since then*.
-
----------------
-
-Now, what is the point of this post?
-
-I decided to write this after a recent [tweet][] by @IanColdwater (in
-the context of todo-management apps):
-
-> The fact that it's 2020 and the most viable answer to this appears
-> to be Emacs might be the saddest thing I've ever heard
-
-What bothers me is that people see this as *sad*. Emacs being around
-for this long and still being unparalleled for many of the UX
-paradigms implemented by its programs is, in my book, incredible - and
-not sad.
-
-How many other paradigms have survived this long? How many other tools
-still have fervent followers, amazing [developer tooling][] and a
-[vibrant ecosystem][] at this age?
-
-Steve Yegge [said it best][babel][^5]: Emacs has the Quality Without a
-Name.
-
-What I wish you, the reader, should take away from this post is the
-following:
-
-TODO(tazjin): Figure out what people should take away from this post.
-I need to sleep on it. It's something about not dismissing tools just
-because of their age, urging them to explore paradigms that might seem
-unfamiliar and so on. Ideas welcome.
-
----------------
-
-[^1]: Wouldn't it be a joy if every project just used Nix? I digress ...
-[^2]: These are keyboard shortcuts written in [Emacs Key Notation][ekn].
-[^3]: For example, [functionality for online memes][studly] that
-    wouldn't be invented for decades to come!
-[^4]: ... and some things wrong, but that is an issue for a separate post!
-[^5]: And I really *do* urge you to read that post's section on Emacs.
-
-[emacs-config]: https://git.tazj.in/tree/tools/emacs
-[EXWM]: https://github.com/ch11ng/exwm
-[helm]: https://github.com/emacs-helm/helm
-[ekn]: https://www.gnu.org/software/emacs/manual/html_node/efaq/Basic-keys.html
-[org-mode]: https://orgmode.org/
-[magit]: https://magit.vc
-[HTTP clients]: https://github.com/pashky/restclient.el
-[k8s]: https://github.com/jypma/kubectl
-[first-commit]: http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=ce5584125c44a1a2fbb46e810459c50b227a95e2
-[studly]: http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=47bdd84a0a9d20aab934482a64b84d0db63e7532
-[tweet]: https://twitter.com/IanColdwater/status/1220824466525229056
-[developer tooling]: https://github.com/alphapapa/emacs-package-dev-handbook
-[vibrant ecosystem]: https://github.com/emacs-tw/awesome-emacs
-[babel]: https://sites.google.com/site/steveyegge2/tour-de-babel#TOC-Lisp