The Blog of Joshua Blais.

How I use Emacs

Cover Image for How I use Emacs
Joshua Blais
Joshua Blais

A few years ago, I wrote an article about how I use org-mode to get things done. My workflow has evolved drastically from there - little did I know that I would fall into a love affair with Emacs - so, I figured it was time to update how I have integrated Emacs into nearly all of my entire computerized life.

It has become a running meme that people live inside emacs and do all of their work, writing, scheduling, and whatever else in the application. Emacs is a completely extensible text editor that wants to be an operating system.

I have fallen hard for the meme, as I do with all memes. Whoops ;)

Rationale

I truly believe in sharpening the axe so that your creative work and everyday processes can be as close to frictionless as possible. Emacs offers this ability through its extensibility and integration. If you have the skills and knowledge of lisp, you can pretty much make it whatever you want it to be: simply a tool for editing text, or your next email, RSS, and everything client.

The idea behind emacs is simplification, and follows that of those that would create an integrated computing environment via tools such as:

You then would go to the trouble of making all keybinds relevant across this environment and switching between components is easy and fast. Perhaps you would get all colors to match across the system so that everything feels and looks that same and is ’fully integrated’.

I personally built My computing environment around this rationale and had successfully used it for years.

However, emacs has most if not all of this functionality baked in (or added in with extensions), and it is more seamless, as it is completely under one roof.

Watch this video by Protesilaos to see his discussion on the Emacs mindset.

You are already a power user

Most people do not go to this extent to seamlessly integrate their computer. Quite frankly, most people don’t realize that it is possible (arguably it is not unless going down the Linux rabbit hole)

If you use linux, you are likely a power user. If you have edited a file to change how your computing environment works, you are a power user.

You could live inside this custom computing environment for the rest of your days and be very happy. I don’t think emacs is for everyone, it is for a select group of power user that wants to have this integration across all their applications and to a maximally controlled state.

I can say that I (and likely you, if you read/watch my content) am one of few that has invested the time - but my belief is that I use a computer everyday for hours on end, and the saved time is in the dozens of hours every month. I likely save more than a few weeks in working time every year because of my understanding of Emacs and lisp. YMMV.

I felt it was worth it, and I believe to be reaping dividends. Might just be my confirmation bias, who knows!

So, how do I use Emacs?

Writing

The largest selling point of Emacs I could make for those that are not programmers is that it is exceptional for writing and manipulating text. Many people in academia use emacs to write papers, easily source works, and whatever else they do in higher education. You can easily export to various formats including LaTeX, markdown, html, really whatever your heart desires.

I am using emacs to write every blog post you read, as well as my debut book. There is no faster way to write, edit, and get projects finished than emacs. I use evil mode as I come from vim, and believe that emacs and vim together is probably the greatest editing experience one can have.

Programming

Of course, you can use emacs for what it was originally intended to do, edit code. I do this, too. Macro use, multiple cursors, autocomplete, syntax highlighting, minimapping (not sure if this is useful beyond just looking cool), and anything you get in VS Code are possible.

I started using rest-client.el to test my CRUD apps and endpoints, pushing my use of postman out the window.

You can create custom snippets to quickly start functions, and the already built in yasnippets are pretty comprehensive in their own right.

Organizing my Life

I use org-mode as well as org-roam (with org-roam-ui) to document my to-do’s, my notes, my appointments, everything.

You can then take all of your relevant entries and push them into org-agenda where you can layout your day. This can be viewed in calfw for a beautiful calendered view of what your day/week/month looks like. People invite me to google calendar events, but I never use google calendar anymore, this is far better for me, as I can access it with a keychord from any of my computers. I push this agenda to my phone so I can see what I need to do daily, but I really have stopped using my phone so much.

Music

There was a point in my linux journey where I tried to setup mpd with ncmpcpp, but the truth is that I never really figured it out, and the finikyness of the setup didn’t really jive with me.

Enter EMMS - yes, I play music within Emacs now. I have nearly 15,000 songs in my media server, and EMMS allows me to quickly move through the music directory, pick something I’m in the mood for, and then play it in the background while I’m doing work.

My .config for EMMS looks something like this

;; EMMS
(emms-all)
(emms-default-players)
(emms-mode-line 1)
(emms-playing-time 1)
;; Source my music from my server:
(setq emms-source-file-default-directory "/mnt/TrueNAS/media/Music"
      emms-playlist-buffer-name "*Music*"
      emms-info-asynchronously t
      emms-source-file-directory-tree-function 'emms-source-file-directory-tree-find)
;; Keymappings in Doom Emacs:
(map! :leader
      (:prefix ("a" . "EMMS audio player")
       :desc "Play at directory tree"   "d" #'emms-play-directory-tree
       :desc "Go to emms playlist"      "a" #'emms-playlist-mode-go
       :desc "Shuffle"                  "h" #'emms-shuffle
       :desc "Emms pause track"         "x" #'emms-pause
       :desc "Emms stop track"          "s" #'emms-stop
       :desc "Emms play previous track" "p" #'emms-previous
       :desc "Emms play next track"     "n" #'emms-next))

One key chord and I select my music, another chord and I play/skip/go back. Simple, elegant.

Email

I never thought that I would be reading my email inside of Emacs, but alas, mu4e is a thing. You can open your emails, quickly mark them as read, for deletion, or to read later, as well as setup todo’s because of an email.

Just today, a client emailed me about three properties she wanted to see, and I made a todo to schedule them all within 5 seconds of the email being received.

All you need for setting up mu4e is as follows:

;; MU4E
(use-package mu4e
  :ensure nil
  :defer 20
  :config

  (load-file "~/.config/mu4e/mu4e-config.el")
  (setq mu4e-update-interval (* 10 60))
  (mu4e t))

I used mu-wizard to easily setup my email accounts without issue, syncing the database, and encrypting passwords. All my emails in one place and easy to delete, move, respond to, and tag.

RSS

Emacs has the lovely Elfeed where you can setup and filter through your various RSS feeds. It has gotten to the point that if I cannot get an RSS feed for something, I will probably not follow it. I have found that feeds also really slow down my consumption of internet - I don’t go to native Reddit or imageboards anymore - I put them in my elfeed, and then read when I have the time. All else is noise that I cannot be bothered with.

My config for elfeed looks a little something like this:

;; Elfeed
;; Setup elfeed goodies for powerline effect
(require 'elfeed-goodies)
(elfeed-goodies/setup)
(after! elfeed
  (setq elfeed-search-filter "@1-week-ago +unread -4chan -Reddit"))

;; Setup of elfeed tube
(use-package elfeed-tube
  :ensure t ;; or :straight t
  :after elfeed
  :demand t
  :config
  ;; (setq elfeed-tube-auto-save-p nil) ; default value
  ;; (setq elfeed-tube-auto-fetch-p t)  ; default value
  (elfeed-tube-setup)

  :bind (:map elfeed-show-mode-map
         ("F" . elfeed-tube-fetch)
         ([remap save-buffer] . elfeed-tube-save)
         :map elfeed-search-mode-map
         ("F" . elfeed-tube-fetch)
         ([remap save-buffer] . elfeed-tube-save)))

;; Mappings for Elfeed and ERC
(map! :leader
      (:prefix("e" . "Elfeed and ERC")
       :desc "Open elfeed"              "e" #'elfeed
       :desc "Open ERC"                 "r" #'erc
       :desc "Update elfeed"            "u" #'elfeed-update
       :desc "MPV watch video"          "v" #'elfeed-tube-mpv
       ))

In my default search (what pops up when I open elfeed and update) I have filtered out 4chan and Reddit so that I do not see them with my news and youtube feeds. They update super frequently and I don’t care to follow most of it. And yes, you can glean value from 4chan, just don’t go to / pol / or the gif boards. I suggest / ck /, / g /, / lit /, / trv /, and / x / to get you started.

Macros

Admittedly, I haven’t used macros as much as I should - they are really good. You can update thousands of lines with a couple key presses - I did this the other day with my music library. There are probably thousands of other uses, but I am at the beginning of my macros journey.

Terminal

Using vterm as the built in terminal is a great way to run programs/dev environments/update your system.

SSH with Tramp

You can remotely edit files with Tramp Mode, making deployment to servers, updating posts, or starting services or scripts super easy.

Living in Emacs

I would now say that my time on a computer is effectively spent living in emacs and a browser. There is really not much else that I do with a computer than create and run my businesses - consumption is where you will find depression, afterall!

Other things to explore for those that want to perma live in emacs:

EWW - Browser built in (I use on sites that are mere html but rarely.)

EXWM - A window manager using emacs

Subscribe for updates direct to your inbox.