I’ve used Emacs since 2003 and haven’t ever really used registers, so maybe I’m missing some context, but I skimmed the patch, and this is all just changes to lisp code. Making a fork over a change which could be done with a single .el file seems like a big overreaction.
Unrelated to this whole drama, you may want to look into them! Lack of registers, and especially position registers, is pretty much the thing I miss the most in VS Code. I don’t use text registers that much – I mean, I use them a lot for macros, but not that much outside them; but life without position registers is extremely bewildering for me :-D. Debugging a stack trace without position registers makes me feel like Fred Flintsone when he’s driving.
I think the missing piece of context is this: Emacs registers are a very, very old Emacs feature. It’s so old that people have their own mental models for using it. Not just muscle memory but a long series of idioms for dealing with them. This is a change that breaks many, if not most of them, in order to fix a slight inconvenience that a lot of people either don’t have, or have found other ways to deal with in a way that doesn’t introduce the additional interruption. The author of the patch may have misunderstood just how big its impact was because some of the things commonly done with registers can also be done with helm. I don’t think they’re “rogue”, as the blog post calls them; Thierry Volpiatto is also the author of helm, I think quick register access just isn’t that big a deal for him.
A fork definitely sounds a little, uh, excessive though :-). Emacs is an old program, and supporting the usage patterns of the multiple generations of users it has is definitely a big deal.
Just to illustrate how big the difference in usage patterns is: @timthelion mentioned here that they just learned some people use registers as the primary mechanism of switching buffers, rather than using helm. I don’t even use helm, not for switching buffers, not for anything else, actually. It was forked from anything.el way after my conversion to the Church of Emacs :-) and never found I needed it. I have a rough idea of what it does, I tried it like forever ago (actually I tried anything.el, of which helm is a fork), found it super confusing and never looked at it again for years. I occasionally run into it when setting up development environments for newer tools/languages (e.g. Rust), I still have no idea what to do with it. Maybe some major mode I’m using it is using it for prompting and I don’t realise it yet – it’s definitely not installed on the machine I’m writing it from but I’m running an older .emacs here – but I’ve never deliberately used it myself. I don’t think it’s a bad tool, it’s just not how I like to use things.
I can see why this would be seen as a “hostile” change, especially as there’s no easy way to restore the old behaviour (which honestly is all I’d want, too; I’m all for making it easier to support helm environments, which are super popular, and “good defaults” is a meaningless notion in a 40 year-old program IMHO, and especially one as extensible as Emacs). But a fork that preserves the environment for Emacs dinosaurs (myself included) is unlikely to fare well; historically, backwards-looking forks tend to settle into backwards-oriented tools that only bitter angry people use.
I’ve been using Emacs since 1992 and I’ve never used registers, nor have I even heard of helm. I’m not bringing this up to complain, just to observe that Emacs is still so big and so popular that there are entire feature areas I didn’t even know existed. It’s pretty cool, actually!
I’ve also been using Emacs since 1991 or 1992. I think I heard about registers around 1996 when the register commands got moved to the same key prefix as the rectangle commands, which I use once in a while. I know what the register commands do, but I’ve never found them convenient to use, because I don’t have enough working memory to remember what I put in what register.
I think the over reaction came from telling power users they need to slow down and press RET because they don’t know what they are doing, almost like touch typing doesn’t exist. :-)
I’m not an eMacs user, but I get being annoyed at this. Touch typing doesn’t eliminate the fact that this change 1) slows down what seems to be a really common operation for many, and 2) breaks like 50 years of muscle memory for some people.
From talking to people on madtadon I learned that some use these registers are their primary mechanism of switching buffers, rather than using helm. That explains the uproar…
Debugging a stack trace without position registers makes me feel like Fred Flintsone when he’s driving.
Navigating without registers doesn’t mean navigating manually. =) The xref tooling maintains a position ring for you, so I mostly don’t feel the need to mark positions myself, other than occasionally with the mark ring.
Oh, I know, I was poking fun at VS Code there, not Emacs :-D. I use registers for navigation separately from (or, rather, along with?) xref’s position/identifier tooling.
For every one of these posts, there’s another about how backwards compat and lethargy are holding EMACS back (with their own fork announcements of course). This isn’t a new phenomenon.
Seems like an overreaction to what is essentially a change that has only been in the main Emacs development branch for a few days. Like if you’re this sensitive to change, maybe don’t run off HEAD in master. Stable release is probably more appropriate for you. That way you can read the NEWS file before updating and make appropriate changes to your config to address any changes that affect you in advance.
OTOH, running a bleeding edge version and reacting to a feature change can still have some effect, if using the HEAD version.
When using a stable branch, when the feature will finally come to the stable version, it’s probably too late for any changes to be made, because the feature has been living in the master branch for a long time. Using a stable branch mostly means that we assume we won’t get any breaking changes to the software, but when the changes come, we’re OK with it.
Emacs 30 is not the stable version though. It hasn’t been cut off the main branch yet and likely won’t for many months. So it makes total sense that there is no NEWS entry yet for what is a change that was just made a few days ago. The author of the article clearly understands this and yet a few paragraphs down misrepresents the situation in what you’ve quoted.
Additionally, for a contributor to the Emacs codebase, running off of master makes things easier.
Sure, but from what I can gather, this change was proposed in early October. These complaints didn’t come in until around 4 days ago. An active Emacs contributor should probably be more involved in the mailing list then.
The author was given the opportunity to submit a patch as needed, but the patch they provided appears to have reverted a bunch of other changes related to Emacs registers, not just the specific issue at play.
I’m not saying I have no sympathy for the author, but they definitely misrepresent a lot of what happened and especially how Emacs development happens. Incomplete changes are constantly made to master. A patch will likely be included, but these things take time.
I don’t use emacs (yet) but as I understand it’s registers are somewhat similar to vim; so if vim suddenly needed a return press every single time I used a register, yeah I’d be pretty pissed too. The author is in the right to be mad about this I think. Unrelated but while trying to read up on emacs registers I read that it allows you to store window layouts in there, that’s pretty neat.
You can store a bunch of things in registers – texts in selections (both linear and rectangular), window layouts, positions in files, files and buffer names, macros. The ones I use the most frequently are file positions, macros, and selection text, roughly in this order.
The first act kind of like ad-hoc, non-persistent bookmarks and are pretty much how I navigate immediate call hierarchies, call stacks etc.. The second basically expand the macro space; for anyone who’s more familiar with multiple cursors than macros, register macros are akin to being able to save and recall a number of multiple cursor sequences, so if you need to do a particular multiple cursor operations again, you can just place the cursors again and redo it with a key press. Selection registers are basically just clipboards with ad-hoc names and random access, that’s nothing fancy.
I think these and buffer/file names (I don’t use that but I know people who do) are the most common operations that this change breaks. It’s a pretty big change because doing any of these with registers “feels” like interactive commands and has felt like that basically forever.
E.g. a common pattern for me is to have every level of a stack trace in a register when I’m debugging a core dump, so I can navigate the code more conveniently in a view separate from that of the debugger session. I still do most of the debugging from a debugger view, but sometimes I want to have a better idea about what’s happening “farther away” from the call stack state – e.g. because I suspect the bug is actually somewhere else entirely, or I have an idea for a fix but I want to see how I might integrate it. So I peek at the code here and there, then jump to a call stack level to see how a change might affect state relevant to that stack trace, then go back to what I was reading the last time (that’s always register s for me, everyone has their register convention though) and so on. All that while keeping the debug view intact.
I’m not very familiar with vim, I’m pretty sure it has equivalents to all these – I’m only mentioning all this for context.
I don’t have a specific opinion about the change but this article has prompted me to look at registers and discover the pretty neat persisted bookmarks feature!
I’ve used Emacs since 2003 and haven’t ever really used registers, so maybe I’m missing some context, but I skimmed the patch, and this is all just changes to lisp code. Making a fork over a change which could be done with a single
.elfile seems like a big overreaction.Unrelated to this whole drama, you may want to look into them! Lack of registers, and especially position registers, is pretty much the thing I miss the most in VS Code. I don’t use text registers that much – I mean, I use them a lot for macros, but not that much outside them; but life without position registers is extremely bewildering for me :-D. Debugging a stack trace without position registers makes me feel like Fred Flintsone when he’s driving.
I think the missing piece of context is this: Emacs registers are a very, very old Emacs feature. It’s so old that people have their own mental models for using it. Not just muscle memory but a long series of idioms for dealing with them. This is a change that breaks many, if not most of them, in order to fix a slight inconvenience that a lot of people either don’t have, or have found other ways to deal with in a way that doesn’t introduce the additional interruption. The author of the patch may have misunderstood just how big its impact was because some of the things commonly done with registers can also be done with
helm. I don’t think they’re “rogue”, as the blog post calls them; Thierry Volpiatto is also the author ofhelm, I think quick register access just isn’t that big a deal for him.A fork definitely sounds a little, uh, excessive though :-). Emacs is an old program, and supporting the usage patterns of the multiple generations of users it has is definitely a big deal.
Just to illustrate how big the difference in usage patterns is: @timthelion mentioned here that they just learned some people use registers as the primary mechanism of switching buffers, rather than using
helm. I don’t even use helm, not for switching buffers, not for anything else, actually. It was forked fromanything.elway after my conversion to the Church of Emacs :-) and never found I needed it. I have a rough idea of what it does, I tried it like forever ago (actually I triedanything.el, of whichhelmis a fork), found it super confusing and never looked at it again for years. I occasionally run into it when setting up development environments for newer tools/languages (e.g. Rust), I still have no idea what to do with it. Maybe some major mode I’m using it is using it for prompting and I don’t realise it yet – it’s definitely not installed on the machine I’m writing it from but I’m running an older .emacs here – but I’ve never deliberately used it myself. I don’t think it’s a bad tool, it’s just not how I like to use things.I can see why this would be seen as a “hostile” change, especially as there’s no easy way to restore the old behaviour (which honestly is all I’d want, too; I’m all for making it easier to support
helmenvironments, which are super popular, and “good defaults” is a meaningless notion in a 40 year-old program IMHO, and especially one as extensible as Emacs). But a fork that preserves the environment for Emacs dinosaurs (myself included) is unlikely to fare well; historically, backwards-looking forks tend to settle into backwards-oriented tools that only bitter angry people use.I’ve been using Emacs since 1992 and I’ve never used registers, nor have I even heard of
helm. I’m not bringing this up to complain, just to observe that Emacs is still so big and so popular that there are entire feature areas I didn’t even know existed. It’s pretty cool, actually!I’ve also been using Emacs since 1991 or 1992. I think I heard about registers around 1996 when the register commands got moved to the same key prefix as the rectangle commands, which I use once in a while. I know what the register commands do, but I’ve never found them convenient to use, because I don’t have enough working memory to remember what I put in what register.
I think the over reaction came from telling power users they need to slow down and press RET because they don’t know what they are doing, almost like touch typing doesn’t exist. :-)
I’m not an eMacs user, but I get being annoyed at this. Touch typing doesn’t eliminate the fact that this change 1) slows down what seems to be a really common operation for many, and 2) breaks like 50 years of muscle memory for some people.
From talking to people on madtadon I learned that some use these registers are their primary mechanism of switching buffers, rather than using helm. That explains the uproar…
Rather than using helm?! Strange juxtaposition. You can switch buffers without either by just … using the builtin buffer switching mechanism :)
Navigating without registers doesn’t mean navigating manually. =) The
xreftooling maintains a position ring for you, so I mostly don’t feel the need to mark positions myself, other than occasionally with the mark ring.Oh, I know, I was poking fun at VS Code there, not Emacs :-D. I use registers for navigation separately from (or, rather, along with?)
xref’s position/identifier tooling.For every one of these posts, there’s another about how backwards compat and lethargy are holding EMACS back (with their own fork announcements of course). This isn’t a new phenomenon.
This change was arguably introduced somewhat ham-fistedly but is going through the normal discussion and review process and will hopefully reach an acceptable conclusion for everyone: https://lists.gnu.org/archive/html/emacs-devel/2023-12/msg00280.html
Seems like an overreaction to what is essentially a change that has only been in the main Emacs development branch for a few days. Like if you’re this sensitive to change, maybe don’t run off HEAD in master. Stable release is probably more appropriate for you. That way you can read the NEWS file before updating and make appropriate changes to your config to address any changes that affect you in advance.
OTOH, running a bleeding edge version and reacting to a feature change can still have some effect, if using the HEAD version.
When using a stable branch, when the feature will finally come to the stable version, it’s probably too late for any changes to be made, because the feature has been living in the master branch for a long time. Using a stable branch mostly means that we assume we won’t get any breaking changes to the software, but when the changes come, we’re OK with it.
Additionally, for a contributor to the Emacs codebase, running off of master makes things easier.
Emacs 30 is not the stable version though. It hasn’t been cut off the main branch yet and likely won’t for many months. So it makes total sense that there is no NEWS entry yet for what is a change that was just made a few days ago. The author of the article clearly understands this and yet a few paragraphs down misrepresents the situation in what you’ve quoted.
Sure, but from what I can gather, this change was proposed in early October. These complaints didn’t come in until around 4 days ago. An active Emacs contributor should probably be more involved in the mailing list then.
The author was given the opportunity to submit a patch as needed, but the patch they provided appears to have reverted a bunch of other changes related to Emacs registers, not just the specific issue at play.
I’m not saying I have no sympathy for the author, but they definitely misrepresent a lot of what happened and especially how Emacs development happens. Incomplete changes are constantly made to master. A patch will likely be included, but these things take time.
I don’t use emacs (yet) but as I understand it’s registers are somewhat similar to vim; so if vim suddenly needed a return press every single time I used a register, yeah I’d be pretty pissed too. The author is in the right to be mad about this I think. Unrelated but while trying to read up on emacs registers I read that it allows you to store window layouts in there, that’s pretty neat.
You can store a bunch of things in registers – texts in selections (both linear and rectangular), window layouts, positions in files, files and buffer names, macros. The ones I use the most frequently are file positions, macros, and selection text, roughly in this order.
The first act kind of like ad-hoc, non-persistent bookmarks and are pretty much how I navigate immediate call hierarchies, call stacks etc.. The second basically expand the macro space; for anyone who’s more familiar with multiple cursors than macros, register macros are akin to being able to save and recall a number of multiple cursor sequences, so if you need to do a particular multiple cursor operations again, you can just place the cursors again and redo it with a key press. Selection registers are basically just clipboards with ad-hoc names and random access, that’s nothing fancy.
I think these and buffer/file names (I don’t use that but I know people who do) are the most common operations that this change breaks. It’s a pretty big change because doing any of these with registers “feels” like interactive commands and has felt like that basically forever.
E.g. a common pattern for me is to have every level of a stack trace in a register when I’m debugging a core dump, so I can navigate the code more conveniently in a view separate from that of the debugger session. I still do most of the debugging from a debugger view, but sometimes I want to have a better idea about what’s happening “farther away” from the call stack state – e.g. because I suspect the bug is actually somewhere else entirely, or I have an idea for a fix but I want to see how I might integrate it. So I peek at the code here and there, then jump to a call stack level to see how a change might affect state relevant to that stack trace, then go back to what I was reading the last time (that’s always register
sfor me, everyone has their register convention though) and so on. All that while keeping the debug view intact.I’m not very familiar with
vim, I’m pretty sure it has equivalents to all these – I’m only mentioning all this for context.If register code is all in elisp you can just rewrite affected functions and load them from .emacs without a rebuild.
Emacs is a great operating system, but it lacks a good text editor.
On a more serious note, this discussion strongly reminds me of this xkcd comic.
My absolute favorite xkcd comic.
I don’t have a specific opinion about the change but this article has prompted me to look at registers and discover the pretty neat persisted bookmarks feature!