2023-03 Austin Emacs Meetup

There was another meeting a couple of weeks ago of EmacsATX, the Austin Emacs Meetup group. For this month we had no predetermined topic. However, as always, there was mention of new modes, packages, technologies and websites that I had never heard of, and some of this may be of interest to you as well.

#1 was one of the organizers; he used to live in Austin and now lives in East Texas.
#2 was a programming instructor in NYC.
#3 was The Artist Known as Number Three, the Esteemed Gentleman From Oklahoma.
#4 was a devops engineer for a quantum computing company in Madison, WI (he is in Madison, but the company is based elsewhere).
#5 was the other organizer, formerly working for the City of Austin.
#6 was our professor, the Other Esteemed Gentleman From Oklahoma.

When I dialed in the guys were talking about how to keep their kids out of their home offices, although some allow them to go in sometimes. #3 said his kids are adults, and they still do not go into his office. His adult daughter will not cross that yellow line.

#4 talked about the company he works for and his use of Emacs. They make quantum computers by using lasers to trap atoms in a vacuum. I asked him if he worked for Rigetti Computing, but he said it was another company. I guessed Rigetti because 1. It is the only quantum computing company I could name, and 2. Whenever someone on the web asks who uses Common Lisp, a Rigetti person mentions they use Common Lisp. I assume a company that uses Common Lisp would have a lot of Emacs users. He explained that Rigetti makes a chip, while making a quantum computer with trapped ions is a completely different process. #4 said he does not know too much about the lasers and that there is an engineering team that configures them. He said that the configurations are stored in Org files and the process can be run multple times from the same configuration.

Still, I think it is interesting that Emacs can be used to control lasers. And because there were some snarky comments in the chat, he was compelled to point out the lasers are not mounted on sharks.

#4 did know more about lasers than the average person (like what the can and cannot cut through), and he and #3 spent a few minutes discussing lasers. #3 worked with lasers in the Navy. I remarked that #3 seemed like a Renaissance Man: He uses Emacs, he was in the military, he shoots lasers, he has had some music from different genres on in the backround during meetings.

#2 introduced himself. He found out about the group from #4. They met through the nanofiction community. #2 has been using Emacs for 2 years, and came to Emacs from Vim because he thought Vim was too limited. #4 came to Emacs from SciTE.

I mentioned that I wished the developer from Dallas (who was last month’s #2) was on the call. He was speaking to a newcomer who was having a hard time getting into Emacs that many people see Emacs as an editor, tool, or IDE, and while it is those things, ultimately it is a Lisp REPL. My power went out, and I wished I heard him finish the thought. A few people said he went on for several minutes. This led into a rehashing of some of last month’s topics, including Verb mode. #2 thought we said “Bird mode”. It turns out there is a Bird mode; none of us had heard of it or could tell what it does from the sparse Readme.

The two words sound very similar. The word for last month’s mode is “verb”, and connotes action. The word for this month’s mode, on the other hand, has a more avian flare to it. The word for this month’s mode is an ornithogical expression, as it were. What is the word? My friends, “bird” is the word. (According to Wikipedia, it took four people to write that song.)

#4 shared link to RDE, a Scheme repo for reproducible development environments. He and #2 talked for a few moments about Guix, which uses Scheme for configuration.

I asked about an issue I was having with REPLs in CIDER: It would hang when I hit return. The solution was to add this to the Emacs configuration:


(define-key paredit-mode-map (kbd "RET") nil)

This solution was also suggested at Emacs Redux. But when I added it, I kept getting this error:


Symbol's value as variable is void: paredit-mode-map

#4 said it was because it was trying to set paredit-mode-map before paredit was loaded. I am not sure why that would be happening, since I put this at the end of my file. He suggested I change it to this:


(with-eval-after-load 'paredit (define-key paredit-mode-map (kbd "RET") nil))

That worked. I do not know why I was getting the error even though I put the “define-key” towards the end. Perhaps it is time to read Mastering Emacs, the Emacs manual, or perhaps both. Anyway, devops for the win.

I edited my config, and tried out the solution while the conversation continued. When I came back, they were talking about configs and start-up times.

Then talk shifted to startup time. #3 and #6 finally met up in OKC, and #3 helped #6 with his Emacs init, and significantly reduced his startup time. #3 said the basic idea was to use use-package to defer what you need until you need it. Now #6 loads his packages at the beginning using add-to-list to add packages and then configures them with use-package. He has about 155 packages.

Now that I think about it, use-package used to get mentioned a lot at these meetings, but lately it has not been mentioned as much.

#4 runs Emacs server on login, and then runs Emacs client when he needs to edit files, like bluetooth: it starts when you login, not when you connect a device. If #4 comes back on later, I will have to ask him if he keeps any instances going all day, starts and exits, or some combination. He also said that other people on his team use Emacs and talked about their configs, but I did not add that to my notes.

#2 asked about tiling window managers, and #3 talked about WMs that he has used. I use Emacs with the “–no-window-system” option, and just stick with the GUIs that Ubuntu and System76 give me, so some of this went over my head. #3 avoids i3wm because others use it. Not only is he a Renaissance Man, he is a Hipster Renaissance Man.

#3 mentioned he tries to live in Emacs as much as possible, but is not an extremist. He uses Gnus to check email and does a lot of things that most people do in other programs, but he admits there are some things we should do outside of Emacs. He does not play music or browse the web in Emacs. He tried does that. Checks Gnus and email in Emacs. Lives in Emacs. He tried using Emacs to access KeePassXC,but did not like it. I also tried it using keepass-mode, but I did not like the fact that I could not sort the entries in a folder alphabetically. I also tried accessing my database on the command line with keepassxc-cli and I still could not figure out how to list the entries in a group the way I wanted.

#1 talked about using Chemacs, using different profiles. #3 said there is a with-emacs shell script; I assume he was talking about this. Emacs 29 will probably make those obsolete. #3 pointed out that Chemacs can mess with some configs. He mentioned an “early init file“, which I had never heard of. I guess his work with Crafted Emacs forces him to deal with corner cases that most users never deal with.

#6 asked about blogging. He uses org2blog to publish to WordPress. I also blog with WordPress. I write the post in Org, use org-export-dispatch to export to HTML, and then copy and past the HTML into Classic Editor. I hate the Gutenberg editor, and based on the reviews for the Classic Editor plugin, I am not alone; instead of calling the new editor Gutenberg, they should have called it Torquemada. If the Classic Editor plugin gets discontinued, I might go with JBake. #3 uses WriteFreely. #4 pointed out Hugo supports Org, and mentioned write.as and Keybase. #6 also looking at a way to display inline pdfs in Org.

#3 pointed out that Emacs runs on Android. At first I don’t see the point, but #3 mentioned that Chromebooks can run Android.

#4 gave a link to a reg-ex debugger, but this site might not work with Emacs regular expressions. So with Emacs regex, you wind up having three problems. You can find a page on Emacs regular expressions here, Perl here, and Java here. There is a free regex tester that is a part of a group of sties called Dan’s Tools. A few people shared some regex horror stories. (Is “regex horror story” redundant?)

#5 had his cat say hello. #3 mentioned his dogs. I asked if there are any cat people in Oklahoma, and #3 said there are, but it is mostly a dog state.

#4 asked about Zile, GNU’s other configurable editor. Per GNU, it means “Zile Implements Lua Editors” and also “Zile is Lossy Emacs“. I guess it can be used to run a Lua editor names Zz, or an Emacs clone called Zemacs. This led to talk of other Emacsen. Many of them have fallen away, but they were specific platforms that no longer exist. Linus Torvalds uses MicroEMACS, which was last released in 1996. The source to Gosling Emacs was released recently (Github link here, Hacker News link here). #5 gave a rundown of Gosling emacs: Gosling put a wrapper around the TECO language, sold it to a company that charged for it, RMS got mad and rewrote Gosling’s Lisp.

#3 pointed out RMS does not use external packages, per RMS’s EmacsConf talk. He uses VC, and sees no point in integrating Magit into Emacs. To be fair, per the Emacs docs VC can interface with other version control systems in addition to Git.

The converstation turned to Emacs code: a lot of it is forgotten and hasn’t been looked at or changed in a long time, and that there are a lot of features people do not know about. #3 said that working on Crafted Emacs led him to find features that he had never heard of. One feature that was mentioned was Whitespace mode (see here and here). #3 and #4 also talked about proced, which can manage processes. There is no mention of it in the Emacs documentation. There is an article about it on Mastering Emacs and an article and and article here with discussion here. The source code is here, and mirrored here. You have to invoke it old-school with M-x proced. As far as I know, there is no key chord for it.

Like Dired, there are some commands you can run in the buffer:


(n)ext, (p)revious, (m)ark, (u)nmark, (k)ill, (q)uit (type ? for more help)

Using M-x describe-bindings in the proced buffer, I was able to find the proced functions:

Key Binding
RET proced-refine
C-n next-line
C-p previous-line
SPC next-line
0 .. 9 digit-argument
< beginning-of-buffer
> end-of-buffer
? proced-help
C proced-mark-children
F proced-format-interactive
M proced-mark-all
P proced-mark-parents
T proced-toggle-tree
U proced-unmark-all
d proced-mark
f proced-filter-interactive
g revert-buffer
h describe-mode
k proced-send-signal
m proced-mark
n next-line
o proced-omit-processes
p previous-line
q quit-window
r proced-renice
s Prefix Command
t proced-toggle-marks
u proced-unmark
x proced-send-signal
DEL proced-unmark-backward
S-SPC previous-line
<down> next-line
<header-line> Prefix Command
<mouse-2> proced-refine
<remap> Prefix Command
<up> previous-line
<remap> <advertised-undo> proced-undo
<remap> <undo> proced-undo
<header-line> <mouse-1> proced-sort-header
<header-line> <mouse-2> proced-sort-header
s S proced-sort-interactive
s c proced-sort-pcpu
s m proced-sort-pmem
s p proced-sort-pid
s s proced-sort-start
s t proced-sort-time
s u proced-sort-user

 

You’re welcome.

I give people numbers since I do not know if they want their names in this write-up. Think of it as the stoner’s version of the Chatham House Rule. I figured that numbers are a little clearer than “someone said this, and someone else said that, and a third person said something else”. Plus it gives participants some deniability. People’s numbers are based on the order they are listed on the call screen, and the same person may be referred to by different numbers in different months.

I am not the official spokesperson for the group. I just got into the habit of summarizing the meetings every month, and adding my own opinions about things. The participants may remember things differently, and may disagree with opinions expressed in this post. Nothing should be construed as views held by anyone’s employers past, present or future. That said, if you like something in this post, I will take credit; if you don’t, blame somebody else.

Image from Grec 224, an 11th-century manuscript housed at the National Library of France; image assumed allowed under public domain.