Hah, is this a troll? It’s a lot older than those editors.
EMACS started as Eugene Ciccareli’ init file for the TECO editor (which was also a programming language) around 1976. Hence the name (Eugene‘s Macros). It was later rewritten in Lisp for Multics, the MIT Lisp Machine (I worked on one for the Xerox lisp machine as well), and later Unix (in those cases using lisp only as an extension language)
fractal618 22 days ago [-]
Yea I couldn’t resist. I’m actually a huge fan of eMacs although I only only tried it once. I’m not a programmer, just scripts here and there in random attempts with varying success. Thank you for the history tidbit! That is really cool. I love hearing stories about punch card programs and Lisp and any forgotten or slightly forgotten technology for that matter
setopt 22 days ago [-]
> Hence the name (Eugene‘s Macros)
Interesting, do you have a source for this? I’ve always read that it stood for Editor MACros, are you saying this is a backronym?
flexagoon 22 days ago [-]
Doesn't seem true, the Wikipedia page for Emacs only mentions Eugene once as one of the early contributors, not as the creator. The original TECO macros were made by Guy L Steele Jr.
gumby 22 days ago [-]
There was a lot of swapping of what was in other peoples’ inits (there was no security on ITS at all). I discovered that others just linked to my (compiled) init file due to people complaining when I changed it.
Since Wikipedia didn’t even exist until emacs was more than 25 years old and little was written down in a way acceptable to Wikipedia, consider pages on topics of that vintage to be vague
trelane 22 days ago [-]
It has sources (see my comment above).
Do you have corroborating sources? I (and others) would be keenly interested in them!
gumby 21 days ago [-]
Just my memories of being at the AI lab back then.
trelane 19 days ago [-]
Would be interesting to have, e.g. an interview about this, recorded someolace reputable.
trelane 22 days ago [-]
Not just. It has the origin as well:
"The new version of TECO quickly became popular at the AI Lab and soon accumulated a large collection of custom macros whose names often ended in MAC or MACS, which stood for macro. Two years later, Guy Steele took on the project of unifying the diverse macros into a single set.[21] Steele and Stallman's finished implementation included facilities for extending and documenting the new macro set.[3] The resulting system was called EMACS, which stood for Editing MACroS or, alternatively, Emacs with MACroS."
> Isn’t eMacs just a text editor like vim or nano?
For a start it's either spelled "Emacs" or "EMACS", and definitely not "eMacs".
Then it's closer to an OS than an editor.
setopt 22 days ago [-]
> For a start it's either spelled "Emacs" or "EMACS", and definitely not "eMacs".
Everyone knows that, but iOS autocorrects Emacs -> eMacs because Apple used to sell a product called "eMac".
iLemming 21 days ago [-]
What? Noooo. Emacs is not a text editor at all. It's a thing-to-hate when you don't know it, and a thing to use for everything but text-editing when you love it. That's why...
hotcrossbunny 22 days ago [-]
...or notepad
daitangio 22 days ago [-]
I am in my 10 years cycle in which I will go back to emacs.
Emacs is so powerful but has a different terminology, and vscode was so easy and snappy...so I got accustomed to VSCode, but it is becoming slower and it has a lot of telemetry attached to it.
Is it time to give emacs another try
indy 22 days ago [-]
yes, stick with emacs even when the next shiny new editor appears and begins it's inevitable descent into becoming bloated and slow
devnonymous 22 days ago [-]
I agree, this is why I still use vi :-)
Sorry couldn't resist
indy 22 days ago [-]
Yes, the vi family of editors is just as valid a choice as emacs (and have arguably been the better choice for longer, it's just that personally I could never get on with modal editing)
ncphillips 22 days ago [-]
Neovim has been game changing. Literally nothing I miss from VSCode or Jetbrains now
maleldil 22 days ago [-]
I'm missing a good way to turn on/off plugins and settings depending on the directory. Eg turning off rust-analyzer on some projects, or using pyright instead of mypy as the LSP.
speedster217 22 days ago [-]
Doesn't lazy.nvim have some support for that?
I use the LazyVim distribution but I remember something in the docs about per-repo plugin settings
iLemming 21 days ago [-]
You just don't know it yet. Emacs vims better. Source: I'm a die-hard vimmer.
arnoooooo 21 days ago [-]
Emacs + evil is the best Vim.
21 days ago [-]
flexagoon 22 days ago [-]
Real programmers use butterflies
tmtvl 22 days ago [-]
Yada yada yada, M-x butterfly.
tengwar2 22 days ago [-]
Well, you know what they say: if Emacs is a religion, vi is a cult that is difficult to work out how to quit.
schonfinkel 15 days ago [-]
Emacs is also bloated (if want it to be), but in this case, it's good bloat, the kind that you naturally gravitate towards, eventually it might take your notes, emails, agenda and so on...
zvmaz 21 days ago [-]
I came back to Emacs after a hiatus of several years. I'm sticking with Emacs for the foreseeable future hopefully.
inatreecrown2 22 days ago [-]
Very nice presentation and project.
From the README of the linked repo:
"When I started learning Emacs, my dad gave me his .emacs file. (That's what we used back in ye olden days instead of .emacs.d/init.el and stuff.) I used it without modification for many years. Eventually I learned how to write my own functions and customizations. This package aims to give other users a similar experience. When someone comes to me and expresses their desire to learn Emacs, I can point them at this to help them get over the initial hump, but not coddle them so much that they're afraid or unable to change things to their liking."
stevejb 22 days ago [-]
I distinctly remember my dad telling my "my .emacs file is older than you are." I'm 41!
alex1138 22 days ago [-]
People attack Stallman for some things but I guess I'm happy GNU exists and Emacs might be the most visible example
stevejb 21 days ago [-]
I feel the same way. I don't like or dislike Stallman, and certainly disagree with him on a lot of stuff, but I can appreciate what he stands for and for GNU in general.
nxobject 21 days ago [-]
Come to think about it, if I wanted a write-once-run-forever-language, Elisp would be the ultimate language to do so...
adityaathalye 22 days ago [-]
Holy Batman... You folks are all, literally XKCD 297!
I'm still using .emacs today! and I have all my elpaca and the fancy pants stuff in it
ashton314 22 days ago [-]
I love Elpaca! The built-in package management story has gotten so much better in the past 10 years, but Elpaca is so, so good. My personal config is kinda the antithesis of Bedrock—it's bloated, slow, and uses over 100 packages. Elpaca handles installing/updating/managing those like a charm, however.
I kept Elpaca out of Bedrock because I wanted a strictly built-ins-first experience, but if anyone asks what I use when they outgrow package.el, Elpaca is my first and only recommendation.
sph 21 days ago [-]
I've done use-package, straight, quelpa, tried elpaca a few years back when the hype grew and it was a buggy mess, back to use-package when it was merged into core. I'm tired boss. There's a little too much churn I feel these days.
I dislike the default package management system, but until a better one is merged into core, I'll keep updating my packages manually once a year when I remember.
ashton314 17 days ago [-]
Exhaustion very understandable. Elpaca is nice and stable now, and the integration with use-package is fabulous.
But if the built-in is working for you, no need to change it. Now that use-package supports the :vc keyword, there’s imo much less of a compelling reason to use Elpaca and the like.
dreamcompiler 22 days ago [-]
> Bedrock now uses the lexical-binding: t cookie in all its .el files.
This is the right thing to do if you wrote your .el files recently and assumed lexical-binding was true and you understand the implications thereof.
OTOH if your .el files are older and written before lexical binding was possible, it's best to set the cookies of those files to nil. Or go over them with a fine-toothed comb and rewrite them (if necessary) for lexical binding.
setopt 22 days ago [-]
> and you understand the implications thereof
Isn’t lexical binding the default in more or less all other programming languages?
So for people who don’t understand the implications, and wrote their .el files recently, lexical binding is likely less surprising behavior than the alternative?
dreamcompiler 22 days ago [-]
Absolutely correct! I find dynamic binding quite annoying in the modern era; it can cause subtle and unexpected errors. Common Lisp switched mainstream Lisp programmers over to lexical binding in the 1980s. Scheme had used it from day one. But Emacs dragged its feet for decades.
In the past I wrote my .el files assuming dynamic binding because lexical binding was not available. Until I have the time and inclination to rewrite that code I mark them with
lexical-binding: nil
because that was the assumption under which they were written. If you blindly set
lexical-binding: t
at the top of all your old .el files you're likely to cause errors if that code depended on dynamic binding, e.g. the 'getx' function here:
Every Emacs user eventually finds their rock bottom, er, Bedrock :D
Kidding kidding... Cool project, thanks for sharing and kind of validating the stuff I ended up doing [0]. Hooray, use-package! That meandering (floundering?) culminated in my Emacs, which is a single `init.el file` (hooray, use-package): https://github.com/adityaathalye/dotemacs
[0] The blow-by-blow of which is documented in this excessively long blog post series I ended up writing as I was..., well, the title says it all;
The linked post is the first in the series, and it enumerates what features / capabilities I was going for, and the key references I used while figuring out the configuration, from scratch.
Thank you for starting the blog post with reminding what the project is.
So many blogs (and newsletters for that sake) assume the reader knows and remembers what they are about
AloysB 22 days ago [-]
> Remove wgrep in favor of built-in grep-change-to-grep-edit-mode.
TIL! I might be able to remove my wgrep too.
I love those highly crafted starter kits, they are full of gems.
Thank you!
ashton314 22 days ago [-]
:) Yay!
No shade on wgrep, mind you—I used that for a long time and it's been one of my favorite tools. But now I just… don't need it. It's so nice being able to do consult-ripgrep -> export results to a buffer -> change to edit mode -> search-and-replace project-wide.
favadi 22 days ago [-]
With the new newcomers-presets theme in Emacs 31, I removed most of my customization in the init.el. I’m not sure if a minimal starter kit provide anything over it.
Buttons840 22 days ago [-]
It's a theme? Does it change more than just appearance?
favadi 22 days ago [-]
A theme in Emacs can execute any functions and not limited to changing appearance only.
I agree that it’s counterintuitive and even sounds somewhat dangerous.
nxobject 22 days ago [-]
Well, I guess I'm at that point in my two-year cycle where I alternate between BBEdit and Emacs as my daily driver...
gcr 22 days ago [-]
I was wondering if this was going to be some Rust fork of Emacs, à la Java Minecraft vs Bedrock Minecraft
Very cool work! Just wanted to say hi, I had a class with you with Kimball a few years back. Hope you’re doing well!
ashton314 21 days ago [-]
Hey! I'm doing great, thanks. Kimball's class was a lot of fun. Nice you "see" you again. (Can't tell who you are by your username—feel free to email me at the address on my blog if you want.)
Rendered at 05:22:01 GMT+0000 (Coordinated Universal Time) with Vercel.
EMACS started as Eugene Ciccareli’ init file for the TECO editor (which was also a programming language) around 1976. Hence the name (Eugene‘s Macros). It was later rewritten in Lisp for Multics, the MIT Lisp Machine (I worked on one for the Xerox lisp machine as well), and later Unix (in those cases using lisp only as an extension language)
Interesting, do you have a source for this? I’ve always read that it stood for Editor MACros, are you saying this is a backronym?
Since Wikipedia didn’t even exist until emacs was more than 25 years old and little was written down in a way acceptable to Wikipedia, consider pages on topics of that vintage to be vague
Do you have corroborating sources? I (and others) would be keenly interested in them!
"The new version of TECO quickly became popular at the AI Lab and soon accumulated a large collection of custom macros whose names often ended in MAC or MACS, which stood for macro. Two years later, Guy Steele took on the project of unifying the diverse macros into a single set.[21] Steele and Stallman's finished implementation included facilities for extending and documenting the new macro set.[3] The resulting system was called EMACS, which stood for Editing MACroS or, alternatively, Emacs with MACroS."
https://en.wikipedia.org/wiki/Emacs
For a start it's either spelled "Emacs" or "EMACS", and definitely not "eMacs".
Then it's closer to an OS than an editor.
Everyone knows that, but iOS autocorrects Emacs -> eMacs because Apple used to sell a product called "eMac".
Is it time to give emacs another try
I use the LazyVim distribution but I remember something in the docs about per-repo plugin settings
From the README of the linked repo:
"When I started learning Emacs, my dad gave me his .emacs file. (That's what we used back in ye olden days instead of .emacs.d/init.el and stuff.) I used it without modification for many years. Eventually I learned how to write my own functions and customizations. This package aims to give other users a similar experience. When someone comes to me and expresses their desire to learn Emacs, I can point them at this to help them get over the initial hump, but not coddle them so much that they're afraid or unable to change things to their liking."
https://xkcd.com/297/ (Lisp Cycles)
I kept Elpaca out of Bedrock because I wanted a strictly built-ins-first experience, but if anyone asks what I use when they outgrow package.el, Elpaca is my first and only recommendation.
I dislike the default package management system, but until a better one is merged into core, I'll keep updating my packages manually once a year when I remember.
But if the built-in is working for you, no need to change it. Now that use-package supports the :vc keyword, there’s imo much less of a compelling reason to use Elpaca and the like.
This is the right thing to do if you wrote your .el files recently and assumed lexical-binding was true and you understand the implications thereof.
OTOH if your .el files are older and written before lexical binding was possible, it's best to set the cookies of those files to nil. Or go over them with a fine-toothed comb and rewrite them (if necessary) for lexical binding.
Isn’t lexical binding the default in more or less all other programming languages?
So for people who don’t understand the implications, and wrote their .el files recently, lexical binding is likely less surprising behavior than the alternative?
In the past I wrote my .el files assuming dynamic binding because lexical binding was not available. Until I have the time and inclination to rewrite that code I mark them with
because that was the assumption under which they were written. If you blindly set at the top of all your old .el files you're likely to cause errors if that code depended on dynamic binding, e.g. the 'getx' function here:https://www.gnu.org/software/emacs/manual/html_node/elisp/Le...
I hope Bedrock is useful to some people. :)
Kidding kidding... Cool project, thanks for sharing and kind of validating the stuff I ended up doing [0]. Hooray, use-package! That meandering (floundering?) culminated in my Emacs, which is a single `init.el file` (hooray, use-package): https://github.com/adityaathalye/dotemacs
[0] The blow-by-blow of which is documented in this excessively long blog post series I ended up writing as I was..., well, the title says it all;
Emerging from dotemacs bankruptcy the hard way
https://www.evalapply.org/posts/emerging-from-dotemacs-bankr...
The linked post is the first in the series, and it enumerates what features / capabilities I was going for, and the key references I used while figuring out the configuration, from scratch.
So many blogs (and newsletters for that sake) assume the reader knows and remembers what they are about
TIL! I might be able to remove my wgrep too. I love those highly crafted starter kits, they are full of gems.
Thank you!
No shade on wgrep, mind you—I used that for a long time and it's been one of my favorite tools. But now I just… don't need it. It's so nice being able to do consult-ripgrep -> export results to a buffer -> change to edit mode -> search-and-replace project-wide.
I agree that it’s counterintuitive and even sounds somewhat dangerous.
https://www.youtube.com/watch?v=yfJXd0rSCqo
I see you're with PLT. :-)
Since Racket is built on Chez, you might like this. It's an Emacs-like editor built in Chez Scheme:
https://github.com/paveluv/e