Sunday, 1 March 2026
I have raised dibs on hosting the Emacs (Blog) Carnival for March of 2026
Blog Carnival?
A blog carnival is a form of independent, personally curated content aggregation, often hosted by different people in rotation, in which the host would write a post linking to any posts submitted on the chosen topic.As many of the preceding hosts have already done, I’ll also quote Christian Tietze, who summarized it as:
A blog carnival is a fun way to tie together a community with shared writing prompts, and marvel at all the creative interpretations of the topic of the month.
My prompt is “Mistakes and Misconceptions”: I want to encourage contributors to reflect on their own learning experience and comment on what they recall things like:
I am aware that this is a more negative spin that what had been the case in the previous months, but that doesn’t mean we have to go around insulting each other. Being able to recognise mistakes, be in in your own behaviour or that of others is important for personal growth. Trying to pin-point these experiences and deriving a general lesson, ideally one you can even share with others is well worth throwing aside the veneer friendly relativism!
(This is actually a second take on a HN comment I wrote a few months back.)
I don’t have a specific memory of using compile for the first time. I do remember when I started learning Emacs, that a blog post recommended binding the command to C-c k (or was it C-c C-k?) which is still my key binding up until this day.
For those who are not familiar, when you start compile the first line in the *compilation* buffer is something like:
-*- mode: compilation; default-directory: "~/Source/emacs/" -*-
Compilation started at Wed Feb 25 21:50:08
make -k -j6
...
“Why this noise, I just want the output of the compile command?”, I recall wondering. Teenage minimalism, I guess. Only later did I find out that these were “file variables”: In this case setting the major mode of the current buffer to compilation-mode and the directory relative to which processes are started to my local Emacs checkout.
Later down you might encounter some output like
...
INFO Scraping 1577 files for loaddefs...done
INFO Scraping 27 files for loaddefs...
INFO Scraping 27 files for loaddefs...done
make[3]: Entering directory '/home/phi/Source/emacs/lisp'
ELC emacs-lisp/package.elc
In toplevel form:
emacs-lisp/package.el:700:1: Warning: reference to free variable ‘defcustom’
emacs-lisp/package.el:700:11: Warning: reference to free variable ‘package-review-directory’
emacs-lisp/package.el: Error: Invalid read syntax: ")", 713, 18
...
where of course, we know that the line with the line number is a hyperlink. You can press RET or click on it, and Emacs will open the offending file (again, relative to default-directory) on the right line.
I don’t know if this is the proper terminology, but I like to think of hyperlinks as “explicit” and “implicit”. The former is something like HTML, where you mark up some text, that then becomes hypertext. Compare that to something like Plan 9’s plumber or GNU Hyperbole, where the system recognises patterns in existing text and imbues these with actionability.
The line-reference in the error message above is kind of an implicit hyperlink, where the major mode has recognised this during initialisation, and annotated it as such (compare that to Acme where you’d use mouse button 3 to interact without any prior setup).
Here is what took me too long to appreciate: The fact that Emacs recognises the file links is due to the major mode, the major mode is annotated with (but not actually set by) the file local variable, in a buffer that is not associated with a buffer — but that doesn’t mean you cannot write the *compilation* buffer to disk. Not only is that possible, but it just works. You can have multiple *compilation* buffers lying around anywhere, referring to different other directories that remain just as interactive after killing the buffer and opening it again at some later point. Just press g (usually revert-buffer, but here recompile) and compilation-mode will execute the command in the first line (so make -k -j6 in the example above) replacing the output of the buffer. The same trick works with modes that derive from compilation-mode, such as grep-mode.
This is an excellent example of how a major mode can just enhance a regular file, creating hyperlinks and thus abstracting over line numbers, that make display-line-number-mode superfluous (another story, different mistake) and make re-execution simple. The entire state of the buffer is derived from the contents that are already on disk! There is no need to introduce complexity and implicit dependencies on other files in the same directory or in your .emacs.d; it is possible to leverage the strengths of both Unix and Emacs in synchronicity!
So all in all, looking back I’d try to urge myself not to dismiss the local file variables as noise, but the key to a powerful method of enhancing (or enchanting) plain text. I don’t know if I would have grok’ed it at the time, but then again, is that really what I would choose to talk about if I travelled back in time?
If you decide to write something, contact me and send me a URL to your blog post that I can add here.
In order of submission:
My Emacs Misconceptions, by Mike Hostetler
Emacs carnival: Mistakes and misconceptions, by Eric S Fraga
Emacs Carnival de Marzo - Confusiones y prejuicios, by “texaco” (in Spanish!)
(to be written at the end of the month)
Note that I am not talking about “efficiency” in an economic sense, but rather just in the direct relation of a human to a computer, where instead of the computer taking care of the repetitive and mechanical work, the burden is needlessly shifted onto the human operator.↩︎
The common cop-out of saying something along the lines of “everyone is right in their own way and that is fine”. I hope to see strong and interesting opinions that advance a discussion, even if they turn out to be wrong or if you end up changing your mind at some point in the future.↩︎