return to table of content

Bad NEWS, Emacs

tarsius
46 replies
1d2h

When a breaking change is made on Emacs' development branch, whether intentionally or not, and some users voice concerns about that change, then the change isn't reverted the minute those concerns are raised. The pros and cons are discussed, different solutions are implemented and improved, and finally a compromise is found.

Users raising their concern started three days ago. That's not enough for this process to have concluded already.

Here's a recent message by Eli (and the message he is responding to).

    > I'm hoping the old behavior stays the default and the new behaviour
    > is what users can opt in with a variable.
    > 
    > If that is what normally happens for much less disruptive changes,
    > why isn't it happening for this deep impacting one?
    
    Because the original discussion of these changes, between two people
    who were interested and involved, indicated that the new behavior
    makes much more sense than the old one.  Now, that others chimed in
    with the opposite views, we are still discussing what should be the
    behavior, and once that is concluded, we can talk about the defaults.
So I think this has been blown way out of proportion. IMO there are some serious issues in how Emacs is developed. I don't have a solution but I think that us users/package-maintainers thinking to ourselves "gee there sure are a lot of stubborn people on emacs-devel, what's wrong with them?" and then the second a change is made that we strongly disagree with, we start behaving like the world is ending, that might be a problem. This is how maintainers get defensive (you might have noticed that in the projects that you maintain).

jbluepolarbear
14 replies
1d1h

That’s a bad process. The review of the feature should start before it’s merged into main branch, not after. It totally reasonable for people to be upset with a breaking feature in main branch without discussing it with the community at large. Changes merged in like this are how long standing tool lose community support.

tsimionescu
9 replies
1d1h

The review of the feature was happening in public on the mailing list. All those who contributed to that review had their concerns addressed, and the change was merged into the main branch (which is the development branch of Emacs). Only afterwards did others complain.

jbluepolarbear
7 replies
1d1h

The article says otherwise. It says that many concerns were disregarded during that time.

yaantc
3 replies
1d1h

The article is just his author view. Please read the emacs mailing list threads to get the full picture.

GP is correct, and this is quite normal: some people using Emacs master will not follow all the mailing list discussions and commits. So they will notice a change only after it is merged. Nothing wrong with this, and nothing wrong with being unhappy about such a change. What's wrong in my book is the nature of the reaction show in this article (see my comment in reply to @tarsius).

kazinator
2 replies
17h47m

Then there are people who don't follow master.

Some people only pick up releases, including test releases.

Some people only work with final releases.

All those people could find something suddenly not working well.

Kalq
1 replies
15h42m

If you are this hypersensitive to change, it behooves you stay on a stable release and only upgrade after you've read the CHANGELOG and NEWS files.

kazinator
0 replies
13h44m

Someone hypersensitive to changes track changes as early as possible, and complain quickly and loudly.

Those who are not sensitive changes just use whatever Ubuntu (or whatever) provides and are unconcerned with the development.

tsimionescu
1 replies
1d1h

That's what the article says, but I checked the actual mailing lists. Any replies that asked for a change of this kind came in after the patch was finalized. Even this author's own complaints. And, the author in particular didn't understand, or seek to understand, why the patch was added in the first place. Instead, their proposed "fix" that they complain about in the article reverted all of the improvements the author and reviewers made. Upon being informed of this, they simply complained that those are useless changes:

Indeed, I only reimplemented the parts I saw as clearly beneficial. Most importantly, my patch improves stuff without breaking other stuff.

Perhaps you can explain your use case for the rest of the changes, and if there's a good and compatible way to add them I'll be happy to look into it at some point.

> - No filtering. > > - No navigation. > > - No default registers. > > - No possibility to configure a new command added to register.

If you could elaborate about these bullets, and explain their use, that'd be great.

I think it's quite obvious that engaging further with someone who came in with this attitude after a review was finalized (after ~5-10 rounds of feedback, I should point ou) and a patch applied did not seem worth it.

Y_Y
0 replies
23h35m

Perhaps you could mention what these improvements are or give a link to the messages you're getting this information from?

heyoni
0 replies
1d1h

Plenty of comments here saying that the change did more than make the feature opt in which is why it was rejected.

gray_-_wolf
0 replies
22h29m

into the main branch

into the master branch

kazinator
3 replies
17h48m

On the job, I wouldn't go implementing whatever pops into my head without input from my manager and product management.

Even if the change could easily pass a technical review and get merged.

First you have to determine: do we need this for the product? If this change is made, does it break user workflows? What difficulties will users have if they pick up this change?

tsimionescu
2 replies
11h36m

Emacs is a community-driven project. And the author of this patch identified several issues with the feature, created a fix, proposed it for review, debated the impact with other devs on the mailing list for weeks, addressed all concerns raised, and then finally other more senior devs merged the change to master, where all new unstable changes go.

Then, people who agree to test out all changes to Emacs by using the head of master found, basically the QA department of Emacs, came back with feedback that they like some of the improvements, but that they don't like one particular aspect (the extra RET). Thierry started addressing them, and a setting to disable the feature was added - but the initial version missed the mark. The article author also was part of this process, and even proposed a patch, but their attitude made others ignore it after the initial review (their patch reverted all changes and only implemented a tiny subset of the original, behind the discussed flag).

kazinator
1 replies
1h46m

I've now read (or at least skimmed) this in it entirety:

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=66394

Thierry opened this as a simple bug, but then implemented something with multiple enhancements rather than addressing the bug, while causing UX regressions.

It looks like only one developer was engaging the content, a Michael H., and he pointed out early, as far back as in October, both the problems that Eschel later latched onto.

Eschel came up with a patch that just addresses #66394 in a small way.

The reply to that was:

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=66394#201

"But your patch only fixes this bug, reverting half a dozen features mine adds."

Using a bug ticket as a vector for introducing enhancements is a software engineering no-no.

They should merge the simplest patch that closes the bug without regressing anything or introducing extraneous enhancements. For those, a new enhancement ticket should be opened.

If Eschel's patch can close #66394, and not break anything, the consideration of that it doesn't implement another solution's enhancements is actually a plus.

There is possibly another bug ticket hiding in there based on the remark [y]ou reintroduced the old implementation which was not wrote correctly about handling various keys, particularly C-g. Existing behavior of not correctly handling various keys sounds like a problem different from the 66394 issue.

If the project doesn't want the simplest fix for an issue, but to address something architectural, like with a view for adding enhancements or whatever, that can be turned into another ticket where you articulate that. The original bug can then be marked pending or blocked by that with a note that we don't fix this until that one.

gpderetta
0 replies
1h1m

Does Emacs even do enhancement tickets? It is a community driven project where people implement what they want to scratch an itch and get merged as long as they convince enough people; it is not a PM driven one with roadmaps, sprints and narrowly defined features.

bachmeier
10 replies
1d1h

It would make a lot more sense to have a discussion before breaking long-used behavior. I'd use Emacs a lot more, but you honestly can't trust it. The developers don't see a problem with breaking things users rely on.

rrix2
8 replies
1d1h

This is a pre-release commit not in any released version.

Beldin
7 replies
1d1h

Oh please. This is not someone's first step in an experimental new feature in its own branch. This is a commit of a fully working non-trivial patch that alters long-standing UI to the master branch. You're not supposed to merge in patches there on a whim.

tsimionescu
5 replies
1d

It was not done on a whim. The author and the reviewers felt that the improvements outweighed the cost of the workflow change, which they explicitly discussed. That doesn't mean they got it right, but it's completely unfair to characterize it as "on a whim". Of course, you would not know this from the article - it's misrepresenting the discussion as it happened. In particular, while it correctly points out that a reviewer raised the issue and the patch author brushed it away somewhat, it fails to mention that the reviewer actually agreed with them afterwards.

I think that the core problem is the article author saw a change that broke their workflow and didn't investigate any further for why it was made. They simply assumed they knew better and got annoyed that others saw some value in the original change. The very way it is presented in the article - as a change to add a confirmation for register overwrites - is a misunderstanding. The actual purpose of the change was to make C-g, the Emacs "cancel" key, work with register commands. The RET for confirmation was a side-effect, one which the author felt could actually have some value in itself.

timmytokyo
2 replies
23h22m

The RET for confirmation was a side-effect, one which the author felt could actually have some value in itself.

Regardless of the reasons for the change, a single author was permitted to commit a change that broke the workflows of potentially thousands of users. And there was no way users could work around it to maintain their previous workflows. That sounds arrogant and annoying.

tsimionescu
0 replies
11h11m

That is how all changes work, especially for an editor like Emacs where the internal APIs are public. As far as I understand, the accepted workflow for Emacs dev is:

1. Raise an issue through the mailing list.

2. Propose a patch on the mailing list

3. Maintainers send review comments about the patch.

4. The patch gets rejected or merged to master

5. The few people using head of master give feedback about the change

6. The change gets modified or reverted

7. A release branch is created from head of master

8. The bigger group of people who use un-released Emacs release branches start giving their feedback

9. More fixes are made on the release branch. Some features get reverted entirely.

10. A new Emacs release is decided and published

11. The larger emacs community starts using the brand new release and filing bugs and giving feedback

12. Release patches are sometimes issued, and other feedback is taken into consideration for the next release

13. After some minor releases, major Linux distributions start packaging the Emacs release to include in their official repos

14. Only now do the majority of Emacs users actually start using the new release, with all patches and feedback addressed.

In the case of this change, it has just made it at step 5 three days ago, and it is now in step 6. There is a LONG way to go before it makes it to any significant number of Emacs users. I actually doubt that there are thousands of users using head of master at all - out of which only a subset probably use registers in any way to begin with.

Personally, I've been using Emacs for 5+ years in my day to day job, and I am at a point where I build my own Emacs binaries. Even so, I'm only doing this from the latest release branch, and only close to a release, I don't have the energy to deal with the potentially broken head of a new release, even less so head of master.

prmoustache
0 replies
7h21m

And there was no way users could work around it to maintain their previous workflows.

Yes there was. Staying on version 29 of emacs. Or write everything that is needed in lisp to revert to old behavior.

smaudet
1 replies
1d

What I read (did not verify) was that two users discussed and decided on the feature. That's hardly a well deliberated change.

I think for user facing features it makes more sense to provide new behaviors as opt-in, and go through a longer RFC period. Only if and when the new behavior is widely used and popular, then you flip the switch to default.

_a_a_a_
0 replies
23h32m

Can you link to what you read please

tptacek
0 replies
1d

Do you do a lot of emacs development? I certainly don't. I'm trying to piece together who here is talking about the norms of the Emacs development team and who's talking about their opinions of how software engineering should work everywhere.

ParetoOptimal
0 replies
3h47m

I'd use Emacs a lot more, but you honestly can't trust it. The developers don't see a problem with breaking things users rely on.

For me, emacs developers breaks things for users the least and highly value backwards compatibility.

yaantc
8 replies
1d1h

Thank you @tarsius! Couldn't have said it better.

To add, I have issues with the attitude shown by the blog author.

If you use the development branch, you can't raise hell when there's a breaking change: it's to be expected!

Then it's fine to disagree on some change and discuss this. I read the email thread, and I do not see "arrogance". Just strong disagreement. So yes, converging will take a bit of time... Calling publicly someone "arrogant" for not folding back to your view, and trying to raise the crowd (a good part of whom won't read the thread to make their own opinion) looks like bullying to me.

Saying that his patch to make the change optional has been disregarded, when it was rejected because it not only made the change optional (that would have been OK, and a patch for this asked for) but removed other changes is not honest.

Lastly, pointing out one person to blame when the whole discussion is done with the Emacs maintainers in the loop is also a no-go in my book.

As a close to 30 years Emacs user, thank you to all its contributors! (and to Thierry, as long time Helm user) May their skin by thick, it's unfortunately sometimes needed :-P

disruptiveink
4 replies
1d

Eh. I don't think that argument holds water, unfortunately. Too often I've seen the "it's just a beta/unstable version, it's not finished, you can't raise issues like this!" attitude as an issue to shut down any form of discussion, or worse, to avoid having to think about the consequences of some action.

Of course, nearly 100% of the times the behaviour people were complaining about will be part of the stable release. There is no magical moment where things just magically get sorted pre-release unless people voice feedback, especially if it's intended behaviour, as it's very much the case here. So call me jaded, when someone says "it's just the main branch, don't complain!" I just hear "I will do whatever I want and when the new release rolls in everyone will just have to deal with it." Which is totally fair if that's how you want to run your project, just don't pretend otherwise.

An extra one, which isn't the case here but makes me roll my eyes every times it happens is the outrage of "how dare you raise an issue that was caused by a new pre-release iOS/MacOS version and very much seems to be an intended change in the OS behaviour, we don't support that!!", only for it to turn into the usual scramble "oh no, our software is broken on the new iPhones, who could have forseen this!!?" hours after the release version starts hitting the masses.

yaantc
3 replies
23h36m

There's a misunderstanding here: I'm not saying "don't complain". Complaining in itself is fine, and others are complaining on this topic in a way that looks OK to me (and will probably be more efficient too). It's the nature of this specific article complaint that I have a problem with.

I agree with @tarsius on this: just give the discussion (and patches) some more time, and it's likely to end just OK from past experience.

achikin
2 replies
20h50m

I wonder why wasn’t this patch given time before merging it? Isn’t that the whole purpose of patches and merge process?

uranusjr
0 replies
19h18m

Because merging into main better exposes the proposal to a more diverse crowd and attracts needed feedback. Especially when you’re managing multiple proposed features, it’s not viable for a mass of users to check out and test those from their individual branches. Without merging fast, you can only gather opinions from people actively reviewing patches, which are a far more minority group and likely to be biased.

tsimionescu
0 replies
11h46m

What kind of time? It spent around two months between the first proposal and being merged. Do you think that people would have trawled through the mailing lists and found this and given their reviews if only it had been given 1 more week?

Ultimately, the consequences of a patch, especially one that changes UX, can only really be evaluated after the community starts using it. People using the master branch of Emacs are basically those who wish to work as the QA engineers of Emacs. End-users use release branches or even pre-packaged releases from their distro.

So, the normal process for a UX change is to merge it to master in order to get comments on the impact. Based on comments, you can either revert, move behind a flag, etc.

Y_Y
1 replies
1d

Calling publicly someone "arrogant" for not folding back to your view, and trying to raise the crowd (a good part of whom won't read the thread to make their own opinion) looks like bullying to me.

Isn't this a bit of a loaded take too? I'm sure the author wouldn't agree that what they wanted was for Thierry to "fold back". I agree with your criticisms here in direction but not in magnitude, in fact it appears to me like you're comitting the same sin of misrepresenting your opponent to enhance your position.

yaantc
0 replies
23h27m

That could be, the author may not have expected nor intended the exposition of an HN post. If so, my apologies. I still find the article unfair and biased in its presentation, compared to the email list discussion. It's unfortunate, because if one look the comments here it's clear many take the article at face value and haven't read the list thread.

kazinator
0 replies
18h4m

If you use the development branch, you can't raise hell when there's a breaking change: it's to be expected!

If nobody raises hell on a development branch, the change will have a way of making it to the master branch.

jeremyjh
3 replies
1d1h

So I think this has been blown way out of proportion.

If this has happened as described in the OP then I’m worried about the health of emacs. There was controversy before it was merged to master, and they merged it anyway. Breaking user workflows and not even making it optional, much less opt-in comes across as a callous disregard for user experience.

rightbyte
1 replies
1d1h

Ye once the devs go user hostile it is all down hill from there.

Especially in a project like Emacs, where every efficinado has their own really custom config.

I mean, reading the Emacs docs it is written in a way that make you feel like color display and a mouse is cutting edge hardware and optional.

It is a very conservative project ...

tsimionescu
0 replies
11h30m

But that is not what happened. The author of this article is misrepresenting the attitude of everyone involved. There was a single reviewer who noticed the patch and started engaging with it, Michael, and while he originally raised the concern quoted in the article, he discussed with the patch author and they finally got to a common ground, he suggested several other improvements that the patch author worked on, and finally he is the one who approved the patch to move further - in a process that took almost two months.

This is not to say that both the patch author and the reviewer didn't misjudge the importance of a workflow change. But no one was being hostile or dismissive - they discussed the issue, and concluded (probably wrongly) that the new behavior is overall better and wouldn't significantly impact anyone negatively.

Then, two days after it became available, other users started seeing it and raised bugs on the behavior, which the patch contributor started addressing. The author of this article was the first one to raise such an issue, and it wasn't initially clear how many others would agree with them. Still, the maintainers and the patch author agreed immediately that a flag to re-enable the old behavior would be a good thing, and asked if the article author would like to contribute it (the patch author wanted a break from this feature that they'd worked for weeks on). The article author came back with a patch that reverted all of the changes made by the original patch except for one. When told about this, they said that they only kept the changes that had any value, and that they'd require proof the other changes are also useful before going further - to which they didn't receive any more replies, for obvious attitude reasons.

nanny
0 replies
22h27m

If this has happened as described in the OP

It's not. The article is bad and wrong. It preemptively tries to dodge such accusations, but most of the hyperbole and "emotions" are just downright lies.

btw the person you responded to is the author of magit. I think his opinion should be weighted more heavily that the author of this article.

eduction
2 replies
1d1h

Users raising their concern started three days ago. That's not enough for this process to have concluded already… So I think this has been blown way out of proportion.

This reads as contradictory to me. On the one hand you’re saying that user response is a key input to making a final decision. Then you’re criticizing a negative user response as blowing things out of proportion. But if the users didn’t react, the original thing they are upset about probably would have happened, per your own description of the process.

I saw a very similar process unfold with clojure-mode, where rms floated the idea of rewriting it and taking control of the name from the original longtime author, a Clojure community member. The reason this didn’t happen is people got upset and posted to the list - but those very people who caused it not to happen were told they were blowing things out of proportion. So that doesn’t seem like a very meaningful criticism.

aeturnum
0 replies
1d

I think the thing being criticized is the tenor of the pushback. The suggestion that, because the blog author (Eshel Yaron)'s patch wasn't accepted and the change is still currently in, that the maintainers are "insistent not to budge" and that this "demonstrates clear disrespect for Emacs user preferences, and indeed their freedom."

The Yaron's attitude seems to suggest that there's an easy right answer here and that it's the thing he wants (and Emacs does now). A lot of his upset seems not to be about the idea of an option to support the new behavior (which he wrote a patch to support!), but about the attitude with which this was introduced. In return, he's coming at this issue with an attitude that seemed fit to match what he thinks the maintainers are bringing.

So that's why it's important to ask if this blog post has misunderstood the arc of changes to Emacs. If the pushback will probably result in the current default staying in the editor. Because assuming the old behavior is best, even though some maintainers like the new behavior, is just as high handed as forcing the new behavior.

achikin
0 replies
20h43m

Here is the recap of someone is interested https://metaredux.com/posts/2023/09/09/clojure-support-in-em...

kazinator
0 replies
18h1m

In my organization (embedded development in VOIP area) we revert breaking changes immediately, as soon as the breakage is identified.

Also, same in every company I've ever worked in that had any kind of process.

NeutralForest
0 replies
1d2h

I'm fully with you here; let the process happen and the discussion between contributors and maintainers happen before talking about "BAD NEWS".

Ferret7446
0 replies
19h38m

I disagree. The Emacs community has, at least historically, strongly valued backward compatibility. Breaking existing users is just about the worst thing you could do in Emacs.

If we aren't strongly considering reverting a breaking change immediately, that signals that the Emacs devs no longer value backward compatibility as highly, which means Emacs is abandoning many of its existing users.

https://www.murilopereira.com/the-values-of-emacs-the-neovim...

Core values matter. The Emacs maintainers did something that violated a core value, and the community is rightfully offended.

ChrisMarshallNY
0 replies
16h31m

> gee there sure are a lot of stubborn people on emacs-[%]

I have been watching Emacs vs Vi wars for decades. People take this stuff seriously.

In my case, I tend to use GUI editors, whenever possible (or Nano/Pico, if absolutely forced to). I know, I know, I'm a wimp. Guilty as charged.

mixedmath
30 replies
1d3h

I'll summarize my understanding.

A commit that changes how copying (actually "registers", which is a bit more general than copying) works in emacs was recently accepted. Now emacs opens up a minibuffer that shows what is happening, requiring one to accept the change by hitting enter or equivalent. The OP thinks this is a terrible, breaking change as it changes default behavior (and possibly without the possibility of easily configuring this away). Further, this happened without much discussion.

Let's state a vim analogy. If I want to copy the current line into my `d` register, I can type `"dyy`. This proposal would do something like, after typing `"dyy`, open up a scratch buffer that tells the user the text and the buffer, requiring a keystroke to close. This is terrible for people who understand registers (the typical vim user). But I acknowledge that sometimes I don't copy the intended text into registers and have to try again. I also know many vim people who only yank from visual mode, which has a similar show-explicitly-what-is-being-copied behavior.

The rest of this article is a description of how the OP tried to raise discussion, but the commit-author, Thierry, shot it down. Implicitly the rest of the emacs dev community is at fault too.

tsimionescu
10 replies
1d1h

I think this is a good summary of the article, but not a good summary of the problem if you look at the mailing list.

This whole thing seems to have started because Thierry found a few problems with the way registers work, and wanted to address them.

The most important flaw was that after you hit C-x r SPC (save-to-register), whatever key you hit next, you'd save the text into the register associated with that key. In particular, the universal Emacs cancel key, C-g, would not work here: instead, the text or position would be saved to a register called ^g. Similarly, if you accidentally hit "jump-to-register" or "insert-register", you couldn't cancel with C-g (or with any other key), you'd be forced to select a register and it's contents would be jumped to/ inserted (if any).

Secondly, registers can hold text, a position, or nothing. jump-to-register only works if a register holds a position, while insert-register expects a text. Emacs includes a preview of registers which are non-empty when invoking these commands, but it doesn't distinguish - it will show you a register that includes strings as an option for jump-to-register, even though it knows it won't work.

So, Thierry took the time to address all of these concerns, and to address other feedback about the code. The reviewers agreed that these are important changes even though they add some extra interaction, and that the breaking change (having to hit RET after selecting a normal registry, or having to use an extra key to save to a weird register like ^g) are worth the gains. After it was done, and compiled, it was added by the Emacs maintainers to the development branch.

The author of this article came along, asked for a switch to revert between the new and the old behavior, and was asked for a patch. They provided a patch that reverted all of the changes I mentioned before (so, no way to cancel the register commands, no way to get contextual help about which registers contain text VS position, nothing) and instead implemented an entirely different feature (confirmation on overwriting a non-empty register based on a flag). Thierry installed the author's new patch and gave this simple feedback, to which the author basically replied "you don't need all that".

Now, as more people started using the feature, the belief by Thierry and the original reviewers that the breaking change had minimal impact was proven wrong. Thierry started working on a new improvement to create a flag that keeps both all of his new work, but allows the previous workflow too (particularly, removing the extra RET, which was ultimately a side effect, not the main point). The patch missed the mark, but it is still being worked on.

Overall, it seems the process is working quite well, and it is only the author of this article that is trying to bully his way into the discussion and ignore the context, with a very anti-hacker attitude of "if it kinda works, we shouldn't change it in any way", which is very much against the spirit of Emacs.

kazinator
2 replies
17h21m

The author of this article came along, ...

You mean, "luckily for the entire fucking Emacs community, one of the small number of people who pick up unreleased master commits came along and happens to be a user of registers ..."

tsimionescu
1 replies
11h7m

Actually multiple people have complained, some less hyperbolically than this author. And, unless you think the people who build their own Emacs from head of master are less likely to use more obscure features of Emacs, then this feedback was always going to come before anything that actually hurts the Emacs community made it even close to a release.

kazinator
0 replies
1h14m

Having read/skimmed the bug I see now that the issues objected to by Eschel were all raised early, back in October, by the other developer looking at the work, Michael H. He pointed out the RET thing and the issue with using control characters as a registers.

Y_Y
1 replies
23h30m

Makes me wonder why they didn't decree, "no using a register called ^g, that's a special character" and add a check when specifying a register. I bet it would break fewer workflows.

medstrom
0 replies
22h38m

Well, exceptions for C-g shouldn't have to be hardcoded everywhere, because that makes it harder to move the C-g behavior to some other key. If going this route, I'd first implement a list of "keys with C-g-like behavior" that can be given more members than just C-g, via a startup flag or some such.

Then commands could just reference that list if needed.

tzs
0 replies
21h13m

The most important flaw was that after you hit C-x r SPC (save-to-register), whatever key you hit next, you'd save the text into the register associated with that key. In particular, the universal Emacs cancel key, C-g, would not work here: instead, the text or position would be saved to a register called ^g

I'm not very familiar with Emacs, so possibly stupid questions incoming.

If you start to type C-x r SPC t to save to register t, does C-g work right after the C-X and the r?

If so is that because the C-x, r, and SPC are part of the command sequence whereas the t is just an argument used by the command, and the C-g handling is done in the command sequence processing?

Emacs is pretty famous for its flexibility in letting users bind and unbind key sequences to commands. Could people who like the old behavior fairly easily effectively restore it by unbinding the handler for C-x r SPC, and then bind handlers for C-x r SPC a, C-x r SPC b, C-X r SPC c, and so on for all registers they want to use, with each of those handlers just copying to the appropriate register?

That should let them use the same keystrokes they now use, and if my guess above about C-g handling is right also make C-g work to cancel after C-x r SPC.

mixedmath
0 replies
1d

This extra context is very informative, thanks!

lelanthran
0 replies
10h29m

Thierry started working on a new improvement to create a flag that keeps both all of his new work, but allows the previous workflow too (particularly, removing the extra RET, which was ultimately a side effect, not the main point). The patch missed the mark, but it is still being worked on.

I think that if the author of this rant did not come along and rant, there would be no "but is still being worked on" done. My reading is that the maintainer (Theirry) was happy with the extra RET.

NOW it is getting worked on because of the dogged and emotional criticism by the rant's author, prior to him writing his rant.

If he didn't make such an emotionally charged and disruptive arguments and patches, the rest of us poor Emacs users would have only found out about the broken workflow (extra RET) once the bug was fully baked in, requiring waiting for the next release in order to get a fix.

froh
0 replies
1d

thank you for this down to the facts summary.

domq
0 replies
9h53m

This is basically the only reply that everyone on this thread should read. Thanks for your research.

CoastalCoder
5 replies
1d3h

As a perpetually novice vim user, I actually would have expected "dyy" to mean Delete the current line.

But that probably just proves my novice status.

addicted
4 replies
1d3h

You’re missing the double quote before the ‘d’ which means you’re talking about a register.

CoastalCoder
3 replies
1d3h

Ah, thanks. You're right, my brain parsed the gp's comment as simply "dyy".

Schiphol
2 replies
1d2h

Just for completion, `dd` deletes the current line in vim. I'm not sure what `dyy` should do, if anything.

tmtvl
0 replies
1d2h

Maybe it should remove the top item from the list of copied items? Assuming that vim has one of those (in Emacs parlance it's called the kill ring).

duskwuff
0 replies
23h18m

I'm not sure what `dyy` should do, if anything.

Currently, nothing. `y` isn't a defined motion.

ekidd
3 replies
1d2h

Also, registers are a relatively advanced feature mostly used for rapid edits. Registers aren't aimed at first-time users using a mouse. They're aimed at high-speed typists doing complex things.

I used Emacs for decades, and never really got into registers. Personally, I tended to use kill&yank for copying, and to use either multiple cursors or one-off keyboard macros for complex edits. But Emacs has tons of optional, advanced editing features for people who want to rely on muscle memory.

Adding a confirmation keystroke here is a bit weird. It's a bit like taking an electric piano and adding a confirmation pedal to confirm unusual chords. It just adds one more step to a rapid, complex input operation.

But the other important thing to remember is that Emacs has excellent undo. You don't need to ask users, "Do you want to paste register 'd' containing '...'?", because you can just paste it, and let the user undo it if they chose the wrong register.

So making a breaking change here is odd, and offering no way to disable it would make a lot of users upset.

Emacs predates modern GUI conventions. It's never going to be as familiar to new users as vscodium. So I think there's a good argument for serving power users as well as possible. That isn't to say that Emacs should never tweak the default config or add user-friendly features like the menu bar or visible selections. But it does suggest leaving things like registers mostly alone.

tzs
1 replies
21h38m

But the other important thing to remember is that Emacs has excellent undo. You don't need to ask users, "Do you want to paste register 'd' containing '...'?", because you can just paste it, and let the user undo it if they chose the wrong register.

With paste you can see what got pasted, so you've got a chance to realize it is not what you wanted.

But how about for copy? If you meant to copy into register 'r' but missed by a key and typed 't' would it be noticeable right away?

I don't use Emacs so don't know how its undo works, but when I use named registers in Vim it is often to hold something that I'm not going to paste for quite a while. By the time I notice the error it would be annoying to undo all the way back to the mis-copy.

If copying into the wrong register was common enough to need to be addressed, my first thought would be something like adding a status message pups up for a short time near the cursor that says something like "Copied to 't'".

ParetoOptimal
0 replies
3h44m

I don't use Emacs so don't know how its undo works, but when I use named registers in Vim it is often to hold something that I'm not going to paste for quite a while.

Hm, I use consult-yank for this and order less search things I've yanked (copied).

I suppose registers could be more efficient if you copy a lot making narrowing more difficult.

medstrom
0 replies
22h43m

Great points! If you don't participate in emacs development, maybe it's time to consider it.

Zelphyr
2 replies
1d3h

I just learned a new feature of Vim. Thank you!

motoboi
1 replies
1d3h

vimtutor is absolutely worth the time

xhevahir
0 replies
1d3h

I don't think that feature is covered in vimtutor. As far as I can tell vimtutor mentions registers only once in passing and buffers not at all.

yayitswei
1 replies
1d2h

Fortunately I use evil mode so my workflow is unaffected, for now.

kreetx
0 replies
1d1h

The way I read it, both methods will continue to be available, so I guess it's a question of defaults. (So it doesn't really affect anyone's workflow)

wokwokwok
0 replies
1d2h

Implicitly the rest of the emacs dev community is at fault too.

?

I can’t tell what this comment is supposed to mean.

He disagrees; other people also felt similarly about it but, they were ignored.

They say, if you don’t like it, why don’t you contribute? …but he did and that wasn’t acceptable either, so he’s forked it.

Do you feel it’s out of order to walk your own path with free software if you disagree with the maintainers? Isn’t that the whole point of GNU?

oefrha
0 replies
1d2h

A commit that changes how copying (...) works in emacs

To people who don't use Emacs, it should be made clear that standard copying (kill-ring-save, M-w by default) isn't affected, only more advanced saving to registers is. Registers aren't a superset of the clipboard (kill ring).

Edit: In addition, those in this thread claiming that the change won’t be configurable must have no idea of Emacs’ customizability, namely the “settings” are for convenience only, you can switch out all the code if you want to. This is in the elisp part of Emacs, even if it lands without change (doubt it, after reading the actual mailing list thread rather than this one-sided tantrum), someone will have a package within minutes changing the behavior. No, you don’t need a fork for that, the forking here is performative at best.

jmclnx
0 replies
1d

That is my understanding, and the change for v30 would very much annoy me also. I know nothing about lisp but I save items to registers all the time.

I hope if this change is not reverted I can find a macro snippet that would do that extract key for me. Already in Emacs to do simple things involves lots of keys. Some I have created macros to avoid the keys, but I am not expert enough to create one for this change.

davidkunz
0 replies
1d2h

yank from visual mode, which has a similar show-explicitly-what-is-being-copied behavior.

Even better: vim.highlight.on_yank

devnull3
19 replies
1d3h

I am a Vim guy. Can someone explain what exactly is broken?

djha-skin
7 replies
1d3h

In Vim speak:

Imagine you create a bunch of recorded keyboard macros that store stuff in different registers. Now this change comes and instead of typing `"ay` you have to press `"a<Enter>y`. Indeed any time you store to a register (`"a`) you have to add an enter key. This breaks all of your keyboard macros and all of your muscle memory made over the past twenty years or more.

This is why people are upset.

Exuma
5 replies
1d2h

Ive used vim for 10+ years, and I have known about yanking to different registers, but usually I only use the main register 99.9999% of the time. can you explain your use cases for using multiple registers? I should start doing this perhaps, but I can't think of many times I want to copy more than one thing at once, maybe once a month? But I also could be not thinking of the right examples.

ramses0
2 replies
1d

    "ayy - copy function signature

    "byy - copy return signature

    "ap "bp - paste either...

    :reg - show all registers

    "3p - paste 3rd "historical" register

    "_dd - delete into the /dev/null buffer (so you don't eat your `yy` register that you'd already yanked)
It's admittedly a bit of an advanced/esoteric feature, but being able to paste "this part" or "that part" being somewhat context dependent is useful.

Also useful in the context of macros... A, B, C being differing bits you might be "lifting", and then placing somewhere.

    i<c-r>" / i<c-r>a - recall (while in insert mode) the default, or the named register.
Imagine that your converting `function do_something() { ... }` to: `arr["do_something"] = function() { ... }`

You could delete the function name into "A", the function body into "B", then go back to your marked spot, and pull out the "A" into the hash key, and put "B" as the key value.

It's reeeally awkward and complicated until you use it and it becomes a natural part of your way of thinking. Then it becomes "simply" two extra characters to type when working with _any_ copy/paste task and then you have a super-power of 26 choices of holding things off to the side.

`<c-r>$REG` is honestly one of the best "beginner" uses of registers. It lets you "inline type" what you've just lifted/cut. eg:

     vwy - yank visible word into default register
     V"ay - yank whole line into register "a"
     I<c-r>"=<c-r>"+1 => `word = word + 1` (without having to exit insert mode!)
     "ap - paste the line from register "a"
...it's a small thing, but an important aspect of "vim as a live text-based programming language", having a few "hot" named variables / text strings, and being able to see them and manipulate them. It's literally just the double-quote key and ":reg" that gives you access to it.

Exuma
1 replies
19h48m

Ah this is incredible, thank you. I didnt realize that about <c-r>... wow, that is crazy cool.

Next question, do you usually add stuff to buffers in alphabetical order... a,b,c or do you pick something easier within reach like a,s,d (or something else entirely)

ramses0
0 replies
17h55m

Usually a/b/c but sometimes f/function, k/key, v/value... just a simple mnemonic.

To really blow your mind:

    i<c-r>%

    V:!ls<cr>
Then you start playing with marks a little bit with a similar concept (eg: ma, mb, mc, 'a, 'b, 'c), and the good friend `gi` (go back to previous insert position)...

It's again, esoteric, but as you use it more, it becomes less esoteric and more just another part of your vim vocabulary (:help search-offset, fellow traveler).

pmontra
0 replies
1d

First thing I thought about: yank a line to a, yank another line to b; move somewhere into the file; paste from a, move two lines down, paste from b; repeat N times or create a macro for it. Basically it will be macro with two inputs, the contents of the a and b registers.

Tyr42
0 replies
1d

Usually I yank into like p or something when I want to not just paste later, but delete something and then paste. I hate it when I delete something to make room for what I paste and it gets rid of it. Then I fumble with the numbered registers and mess it up.

Or when I select something and then paste and I actually wanted to keep my paste buffer and not replace it

dw_arthur
0 replies
1d1h

I do code in a gate around a few registers for macros and marks. I hate recording a macro and then accidentally overwriting it.

Narishma
5 replies
1d3h

It's explained in the article.

isodev
3 replies
1d3h

I’m not an Emacs user and also failed to understand what went wrong. So they changed a default shortcut or something?

lvncelot
1 replies
1d2h

Imagine copying via Ctrl-C and having to hit enter to confirm a dialog "Did you want to copy this text". It's added, unavoidable friction for an action that some people use a lot.

Additionally, some actions on top of the original behavior (that depended on Ctrl-C completing automatically, to keep with the analogy), now are just broken.

Kalq
0 replies
15h34m

While I appreciate the analogy, it's important to note that registers are a fairly advanced feature, not quite as ubiquitous as Ctrl-C. Standard Emacs copy-paste remains unchanged and functions just as expected.

doix
0 replies
1d3h

I also don't really use emacs. But by the sounds of it, when you want to use a command that involves a register, you get a mini-popup where you input the register you want.

The downside is that you must push enter after you enter the register you want.

devnull3
0 replies
1d3h

I could not understand and hence I asked the question. The thing I understood was that this broke some peoples flow.

raverbashing
1 replies
1d3h

The Emacs development process

No, I'm not kidding

There is no focus, there's no objective, it seems the louder ideas win but there's no final idea of what Emacs should look like or what/how it should do or not

That's why such breaking changes get in without questioning (and even why they were using such functionality as registers in the first place)

lemper
0 replies
1d3h

yea seems right. tfa says that thierry didn't accept input at all from other maintainers. that's not good in my eyes.

morelisp
1 replies
1d3h

They did the Emacs equivalent of adding a confirmation dialog to an action which some people do very frequently (like tens of times per minute). I think it also fundamentally breaks some rarer use cases I would have trouble explaining to non-Emacs users, but do seem somewhat valuable.

It's not clear to me from the messages I read why this can't be worked around without a hard fork, although I do agree it's an obvious bad decision to begin with, and obvious to me even as someone who barely uses this feature.

rcthompson
0 replies
1d1h

Looking at the commit diff, I don't see anything that necessitates a hard fork. The changes are all in elisp, not compiled C code. It looks like just evaluating the old version of register.el (perhaps with a few compatibility changes) in an Emacs session would revert everything to the old behavior.

hattar
0 replies
1d3h

https://news.ycombinator.com/item?id=38591788

This person seems to explain it well

pilgrim0
13 replies
1d3h

I don’t fully understand the nature/impact of the change but this conflict seems so minor to me. Like, people on both sides display the same level of entitlement but for different reasons, and they all think they have their are “right”. Hum, no, for outsiders you all appear stubborn and lacking ability to compromise. “Oh my gosh, I’ll have to press 1 extra key now, this project is doomed!”, “no no no, this little change is the hallmark of security, it should be mandatory for every user”. Come on…

janice1999
3 replies
1d3h

I disagree. As a developer I think breaking literally decades old workflows for users without notice or any level of concern is a bad thing. For a program with users so reliant on muscle memory, I think the impact is far worse.

smitty1e
2 replies
1d3h

The friction seemed less about the change as such as in the unilateral delivery.

Even good change (whether or not this is) needs a gentle transition.

jonathanstrange
1 replies
1d3h

If I understood this correctly, the new behavior cannot be customized back to the old behavior. If that's true, then that's obviously very bad. Generally, as an Emacs user, I don't just want an opt-in or a gentle transition, I need to be able to customize everything to my needs.

smitty1e
0 replies
1d

This is Emacs, so one presumes that it's a SMOeL (Simple Matter Of eLisp) problem.

However, it seems tasteless to impose the burden.

sgbeal
1 replies
1d3h

“Oh my gosh, I’ll have to press 1 extra key now ... "

is a genuine usability tragedy for folks who have 25+ years of muscle memory involved. There are no small number of emacs users, myself included, who fall into that category.

"... this project is doomed!”

obviously it's not quite that bad, but any change to long-standing muscle memory is going to send countless users down a rabbit hole looking to undo that change.

domq
0 replies
9h56m

That is a correct and fair assessment of the impact, assuming the change lands in a release as-is (which apparently it won't: https://lists.gnu.org/archive/html/emacs-devel/2023-12/msg00... )

ta988
0 replies
1d3h

This is something that should just have been made as a new function not replacing an existing one. That way users have a choice between speed when they know what register to use and help when they don't.

praptak
0 replies
1d3h

Oh my gosh, I’ll have to press 1 extra key now

This key is in a context which is about as bad as Ctrl-C ("Do you really want to copy this text into clipboard? [Y/n]")

potatopatch
0 replies
1d3h

Inventing new things who cares, but for existing key sequences its a problem even if the new sequence would have been better. Imagine when some of these soft cars start adding power steering in an overnight update.

kazinator
0 replies
9h30m

Would a guitarist be wrong to reject an instrument whose string had to be plucked twice before starting to vibrate?

doubloon
0 replies
1d3h

not minor at all. you do something 100 times a day, adding multiple seconds to that time is not only wasting time, it is increasing the 'cognitive load' on the human brain.

this is why you find in a lot of Operations centers, people have a dozen different systems where time-wasting "improvements" like this have been made over 20+ years, so each little time-wasting "improvement" has added up over time so now it takes like 10 minutes to do something that should take 10 seconds. (in other words, "why does an Airline clerk have to spend 5 minutes typing in order to do something for my ticket/account", or "how did they mess up my request so badly", the answer is what im talking about)

what it all really boils down to is a fundamental lack of respect for other people. if you respected other people, you would not break their workflow like this and then dismiss their concerns as unimportant.

dack
0 replies
1d3h

Breaking backward compatibility should be reserved for extreme cases, and this doesn't sound like one. It's possible the way the author handled it was poor and caused part of the dispute, but I think the right thing would be to make such behavior opt-in or at least very easy to disable.

binary132
0 replies
1d3h

Social problems caused by intense and antisocial personalities? In MY free software project?

It’s more common than you think.

blantonl
11 replies
1d3h

So, what's the "other side's" argument in this? Usually these opinionated changes come with some level-headed reasoning behind the changes. Or maybe not?

lvncelot
5 replies
1d3h

This is what I've been wondering here, as well. So far, the downsides (Change to an almost subconscious muscle-memory-task, added friction) of this are pretty apparent - what even are the upsides of this?

rjzzleep
3 replies
1d2h

Attracting new users for with the old behaviour is too complex maybe?

samus
0 replies
1d1h

The new behavior doesn't make me want to invest effort in learning registers. A notification in the status bar which register just got filled would be all I want.

mahkoh
0 replies
1d1h

I believe Mozilla has been successful with a similar strategy.

dromtrund
0 replies
1d2h

Isn't named registers an advanced enough feature that it shouldn't be optimized for new users?

vcg3rd
0 replies
1d2h

I use Emacs, mostly for Org Mode, but not registers. I also understand perfectly the problem, and I also can't understand the upside.

The only clue I see is in the polite objection the author quotes who writes "I agree it's safer..."

But I don't understand safer in what way or why 1 person gets to decide safer=better=forced.

lstodd
2 replies
1d3h

Yeah, sure. People tried for years to extract the reasoning behind Gnome 2 to Gnome 3 changes and still no one has any idea.

Almost as it's just and only petty power trips.

stjohnswarts
0 replies
4h31m

Gnome developers gave pretty thorough reasons why they made certain changes in UI and code design, or was I hallucinating that period of my life? I mean, just because one doesn't like designers' choices doesn't equate to "couldn't extract reasoning". Also, it's their project, and I hate that they ignored the user community it still fell under their authority to do it and let users decide if they would tolerate it or move to a different windowing system. Personally I just moved back to KDE and have stayed there, other than very limited resource systems where I use lxde or just straight terminal+tmux.

domq
0 replies
10h13m

The “or maybe not?” part of the message you are replying to, tells me that someone got told.

nanny
0 replies
22h22m
morelisp
0 replies
1d3h

I imagine it's that reading user input through something other than the minibuffer is annoying, because if you have customized your input/editing keys, read-key generally won't reflect that.

entropie
9 replies
1d3h

Since then, another bug report came in from a Emacs master branch user that suffered from one of the consequences of this change (a specific regression that I spelled out days before, but was ignored, for some reason), and several users reached out to the Emacs development in request to restore the previous behavior in an ongoing thread titled “Please, Restore Previous Behavior for jump-to-register”. Astonishingly, Eli and Thierry won’t seem to budge, and Emacs 30 will thus likely suck.

Seriously, this is kind of funny. I use emacs for like two decades now and I knew about jump-to-register but never actively used it. But yes - emacs 30 will be bad because of this change. Barely useable anymore. This guys in their mailinglist have... very specific problems.

You heard it first here. Emacs 30 will suck.

Also; https://xkcd.com/1172/ hits the spot and is - what a coincidence - about emacs and workflows.

kyrra
5 replies
1d3h

While I understand your point, emacs is changing very specific behavior, that was intended, to do something new now. So I would say you're xkcd comment is slightly off.

entropie
4 replies
1d3h

emacs is changing very specific behavior, that was intended, to do something new now

No? It changes how an existing command behaves.

This commit crippled all user interaction with Emacs registers, turning commands such as C-x r s, once smooth and frictionless, into a cumbersome and painful mess. Concretely, instead of just typing the key for the register you want to operate on, you now get a fully blown minibuffer for inserting a single key.
broscillator
3 replies
1d3h

with all due respect c-x r s sounds far from smooth and frictionless to me

monsieurbanana
0 replies
1d3h

If you're so used to type C-x that you don't even register it, like most emacs users, then it's just pressing "r s" for "register save".

It's not terrible, and the mnemonic is sound. If you don't like it, perfectly valid opinion, you're just not made for emacs' default behavior.

mjw1007
0 replies
1d2h

True. The traditional binding was was just `C-x x`, but they've already done one round of making register features more inconvenient to get at.

Finnucane
0 replies
1d2h

‘Frictionless’ here means ‘we’ve done it this way forever and don’t have to think about it anymore.’

tom_
0 replies
1d3h

If you use this stuff a lot, it is totally going to suck. Some thing has changed, that may or may not have a good technical reason, that means that after years of the program training you into behaving one way (and it's not like this is some crazy workflow you've invented yourself, right - this is literally you following the documented process) you're now being punished for it by having it not work.

You wouldn't even treat your dog like this.

lvncelot
0 replies
1d3h

I mean, we're talking about changing intended behavior here and not accepting any discussion regarding that. Just because you didn't use jump-to-register, doesn't mean no one does. Again, this is not people using unintended consequences of edge-case-behavior, this is people complaining (rightfully so) about regressions that stem from changing the intended UI.

addicted
0 replies
1d3h

I’m a VIM user, not an emacs user so I don’t have a dog in this fight, but if the equivalent change was made in VIM it would pretty much be unusable for me. My muscle memory related to this feature would be completely broken.

I can’t think of any such change in VIM being made without a setting to turn it off.

ajross
7 replies
1d3h

It's a good rant, but it probably doesn't help its case that it doesn't stop to explain what the feature it's talking about actually is. Emacs registers are a really, really old abstraction. Registers are like separate clipboards, you can put stuff there and pull it out. And there are 62 of them (each associated with a core ASCII symbol: [a-zA-Z0-9]), giving you a lot of flexibilty and a very quick keyboard interface for acting on/with them. And you can even do fun stuff like execute a keyboard macro out of a register. Some people use them heavily. I don't.

Anyway the author is peeved that they changed the default bindings such that there's a modal UI in the way of what used to be a fully-keyboard/home-row operation. It sounds like a reasonable complaint; I'd be annoyed too if they changed something that lived in my muscle memory like this kind of feature does.

tinus_hn
2 replies
1d3h

‘Default bindings’ sounds like it’s configurable to be different. Is it?

jsw97
1 replies
1d3h

It is not. That approach was tried and rejected, hence the problem.

morelisp
0 replies
1d3h

In the interest of fairness, it should be noted a very specific solution was tried and rejected (providing configuration variables to adjust the behavior of `register-read-with-preview`). I personally don't see anything preventing users from configuring alternate commands which call directly `set-register` and mapping those as they please, so in that sense it is still configurable. And in the extreme case you could even use advices, etc. It is very difficult to make something non-configurable in Emacs and I don't see the register system being so ingrained as to be one of those things.

Whether it's a good idea... well, I don't use registers but the whole thing seems like a bad idea to me. I don't think I know anyone who uses registers and would like the new behavior. (But I also understand the desire to modernize `register-read-with-preview` a bit. A better solution seems like it would be providing multiple implementations so users can do the register equivalent of `(fset #'yes-or-no-p #'y-or-n-p)` like every old Emacs user does today.)

morelisp
0 replies
1d3h

There are more than 62. One of the complaints is that the minibuffer breaks access to e.g. the C-a register. One person I know uses letters for positions and C-letter for text so while this may be a very edge case for some I imagine they will be very upset...

jason_stelzer
0 replies
1d3h

It’s basically global uac-mode for all buffers without the ability to turn it off. If it weren’t true it would be laughable.

huggingmouth
0 replies
1d3h

I stopped using emacs a long while ago but I rely on x11 selection buffers (middle click paste) heavily so i can relate. I'd absolutly be miffed to find a confirmation model dialog shoved between each select and paste operation AND a lack of a setting to revert to the old behavior.

I say implement the old behavior as an option. It's literally a few extra lines of code.

dannyfreeman
0 replies
1d3h

Sounds like Eli is not married to this as the default behavior (I'm not a fan of it either).

From https://yhetil.org/emacs/8334wawfvg.fsf@gnu.org/

Eli says:

Now, that others chimed in with the opposite views, we are still discussing what should be the behavior, and once that is concluded, we can talk about the defaults.
shadowgovt
5 replies
1d2h

At the end of the day though, it's emacs.

In lisp alone, you can get the old behavior back if you want it.

I think usability decisions like this are one of the harder things to decide by committee in an open source project because they are, at the end of the day, questions of taste. And people can have conflicting and equally valid tastes. Here, a swap is being made between editing speed and accuracy, with the one perhaps having the better claim for purely historical reasons (but if you let historical reasons dictate design, you end up with faster horses not cars).

Me personally, I'm a committed emacs user and I don't have skin in this game. If I don't like the new UI, I'll just add the necessary code to swap it out for the old UI.

travisjungroth
4 replies
1d1h

This is equivocating. It’s not better for purely historical reasons, it’s just a bad trade of speed for accuracy. If you really want to be sure, is one return click enough? Maybe it should be two. Maybe a mouse click. You could throw in a five second cool down to be really sure. Obviously some of these ideas are worse than the status quo.

shadowgovt
3 replies
1d1h

I don't dispute that two or more clicks or a mouse press would be a bad trade-off of speed for accuracy.

Why is one press of the enter key a bad trade-off of speed and accuracy besides "It's never been that way before?"

travisjungroth
2 replies
21h32m

These are high speed actions and usually all home-row. The return hit increases the time a significant percentage. They’re also easily undone, so the cost of mistakes is low.

Imagine needing to hit return every time you ctrl-v. Really no point when ctrl-z is available.

shadowgovt
1 replies
16h41m

Well the good news is it should be straightforward to customize the old behavior back for people who don't like the trade-off.

travisjungroth
0 replies
15h13m

It should be, but the change didn’t have it as a setting.

krmboya
5 replies
1d3h

Muscle memory should be elevated to a first class concern when it comes to emacs.

atticora
1 replies
1d2h

Once a new version of my favorite file manager came out with remapped key bindings. I can't even remember the name of it now. But my own anger was memorable as totally out of proportion even when I was feeling it. My investment in muscle memory had been trashed! I thought several evil thoughts before calming down. So while it sounds trivial I can understand why the reaction to the crime of Betrayal of Muscle Memory has escalated to "fork you".

stjohnswarts
0 replies
4h38m

and most times it's not really any value added; it's something lame like "this other popular product does it this way" or "industry standard" or "our human optimization team found this was better" and give the middle finger to previous users. It happens with all interfaces, but people look to stuff like emacs and vim to be better than that

runevault
0 replies
1d2h

At a minimum switching anything that breaks muscle memory should be a toggle that defaults to "keep my config how it used to be"

layer8
0 replies
1d2h

More generally, any frequently used software should be made “muscle-memorizable”, and then should not break it in later versions without good reasons. Muscle memory has the benefit of enabling “blind” and semi-asynchronous operation of the software, without constant visual confirmation for each micro-interaction. There’s unfortunately a trend in desktop software to make operation by keyboard ever more cumbersome or outright impossible.

bradleyjg
0 replies
1d2h

Not just emacs. I don’t care about emacs at all. What makes this story important is pointing out the arrogance of devs that love to “improve” things without any regard for people’s settled expectations. That applies as much to google maps or iOS as it does to emacs.

dig1
5 replies
1d3h

It may be an unpopular approach, but I'm a fan of Linus's "you must never break user-space/UX." Some changes might be trivial for you or even an "improvement" (which is mostly a personal opinion, especially regarding UX, unless you prove it with many research papers or have many complaints). Still, if I hit some key combos 100 times a day in the last 20 years, that became second nature for me. Adding Enter or any other key because "it makes things nicer" is clearly a bug.

I'm also not fond of Emacs's many subtle UX changes in the last couple of years. Enabling eldoc by default, changing "blink-matching-paren" default value... For each new Emacs release, I have to revisit my init.el and revert to the old behavior (thank you, elisp!), because suddenly things start to pop out or jump around. I get it; this is maybe to please the newer/younger crowd who are usually "in transit" - yesterday were on Vim, today, are on Emacs, and tomorrow, who knows, leaving us regular users with "a big bag of odor."

Thanks to elisp, you can bend Emacs any way you want, but don't change default behavior just because "it looks nice to me".

Jochim
2 replies
1d1h

I get it; this is maybe to please the newer/younger crowd

This seems to miss the point of these changes. If you're only concerned with your own workflow then almost any changes that you didn't specifically request are annoying. However, if you're concerned with the continued development/relevance of the program then it becomes clear that change must occur. Taking into account both existing user's concerns and barriers to entry for new users.

Many of emacs defaults are pretty awful at introducing users to the "emacs" way of doing things while also failing at easing unfamiliar users in.

rightbyte
1 replies
21h28m

Why should catering to non-users even be a concern? It is like these radio stations and tv channels that blend into the sameness blurb.

If the last emacs user press C-x C-c for the last time in whatever years that is not a failure.

Jochim
0 replies
4h56m

Where do users come from? People trying out the software and enjoying it. I'm quite glad that the emacs maintainers care about this, as I'm sure I've benefitted greatly from the contributions some of those people will have made.

Improving things that put new users off is often the same as improving things that annoy existing users. Keeping the spirit of the tool intact doesn't require doing everything the same way.

If the last emacs user press C-x C-c for the last time in whatever years that is not a failure.

I disagree. It'd be just as much of a failure as emacs moving away from it's focus on extensibility/configurability. It's meant to be a useful tool, if no-one is interested in using it, then it has most likely failed at it's purpose.

On the current situation, after reading through the emacs-devel mailing list, it becomes clear that the author of this change - a long term user and contributor - was attempting to address an issue that had come up in his own workflow. He seemed interested in engaging with people who had concerns surrounding the change. The tone of the article is honestly embarrassing in comparison.

samus
0 replies
1d2h

Pleasing the newer/younger crowd is important! The default experience of Emacs should make it possible for new users to get up to speed as quickly as possible. Else, Emacs will slowly fade to irrelevance until it is a museum piece. There are of course different views about how to approach this.

Of course, for any change there should be switches or other possibilities to restore the old user experience. Power users (especially of Emacs) can be expected to be able to maintain their init.el file. Even the case of Spacebar Heating[0] could be handled that way. The legacy of a genuine technical bug should not impact the rest of the community forever.

Some might point out that there are Emacs distributions out there that offer a modern experience. But these are hardly known to newcomers. Distribution shopping is a useless distraction before starting to use an editor which already has a higher-than-average learning curve.

[0]: https://xkcd.com/1172/

norir
0 replies
1d2h

I actually think changing the default here may have been sensible. The problem is removing the old functionality entirely. This looks like a change to benefit new users (which is good) that had the hopefully unintended consequence of burning existing power users (which is very bad). The sensible compromise is to add a config flag that restores the old behavior while keeping the new default. From the outside, it's hard to see any reason other than pride for not doing that.

deng
5 replies
1d2h

Maybe let's keep the drama down a bit? There was a change committed which made using registers more friendly to use for newbies. IMHO, working on making Emacs' features more accessible is a good thing. And yes, this of course annoys old-school Emacs users (including me). AFAICS the discussion is still very much in progress. There will be an option added to be able to revert to the old behavior. There's still discussion if overwriting registers should prompt for confirmation (which it didn't use to do). Let's wait how that one turns out. I fail to see why one would need to write a long blog post and maintain a fork because of something like this... maybe just wait it out a bit and let people voice their opinions, it takes a bit of time...

philipwhiuk
1 replies
1d2h

fail to see why one would need to write a long blog post and maintain a fork because of something like this...

Probably because, and it certainly appears the case, that the process is being ruled by fiat not by good technical/policy decisions (and the approach of broadcast is intended to replace the fiat by overwhelming numbers)

deng
0 replies
1d1h

And again with the drama...

The maintainer already said: he thought it was a clear improvement, so it landed on master. Now that it has landed and people use it, people react to it, and it turns out the old behavior was well beloved and it's already decided it will stay through an option. Now further details are discussed. This has happened many times before. Just give it a bit of time, voice your opinion, and hopefully a consensus will be achieved (and if not, yes, the maintainer has the last word, that's how it supposed to be).

This is the master branch. It often takes months to flesh out these kind of things. You might say this should be done on a feature branch, but these get used much less and hence you'll get much less feedback.

Asooka
1 replies
1d1h

No program feature should ever be designed to be "friendly to newbies".

Easy to use (in general) - yes; easy to learn - yes; hard to do accidentally - yes; low friction - yes; discoverable - yes. However, designing for the person who has never learned to use the feature inevitably leads to your program having a very low skill ceiling and being a disservice to power users.

Also, how do you know the new design is "friendly to newbies"? You're not a newbie and neither are any of the other Emacs developers. Without lots of user studies, you have no idea what is "friendly to newbies".

A more proper way to do this change would be to go "Hey, I've been running into an issue with using registers for a while and solved it for myself with this change. Let's add it as an option and vote on what the default should be." This is a much better approach, because

1. It is designed based on real user feedback. Even if it's just one user, people aren't unique, so there must be many like that person. "I like it this way" is a much stronger argument than "my imaginary newbie likes it this way".

2. It invites the rest of the community to decide on the default program behaviour. Software must serve its current users first and foremost. Thus, what the majority says should be the default is what the default should be.

This is where Volpiatto and Zaretskii went wrong. A change was made and pushed to solve an imaginary problem for imaginary users without involving the people actually affected. They broke their users' trust.

deng
0 replies
23h45m

They broke their users' trust.

And now the drama is dialed to 11. I see no point in responding to such hyperbole.

rollcat
0 replies
20h6m

Context: I'm an Emacs user for 20 years...

There was a change committed which made using registers more friendly to use for newbies.

...and didn't realize this feature existed.

Maybe let's keep the drama down a bit?

Agreed, this is non-news.

ur-whale
4 replies
1d3h

OpenSource working as intended, no?

tvink
0 replies
1d3h

Sure, in the sense that they can differ and co-exist? Of course it's much better in OSS when differences can be resolved so that more people may work together on fewer forks, so discussion should come before forks most of the time. The author seems to be doing exactly the right thing - tried to contribute to the shared work, voice their concerns and thought process, and ultimately fork in protest.

mrlonglong
0 replies
1d3h

Yup. Great isn't it when the system works as intended.

addicted
0 replies
1d2h

Just because a system works doesn’t mean all outcomes out of the system when it’s working are equally good.

Even the best working system will still require people to make good decisions to have the best outcomes.

DonHopkins
0 replies
1d2h

Absolutely not! Free Software working as intended. Are you trying to trigger RMS by calling Emacs "Open Source"?

jhoechtl
4 replies
1d3h

I someone is to fork Emacs its because of getting proper UI integration or multithreading.

This is just a neglectable, whimsical step. Sorry.

What Emacs needs is the nvim/vim Schisma.

PaulHoule
1 replies
1d3h

There was Xemacs back in the day… and I guess it is still around.

medstrom
0 replies
22h25m

It's still around in the same sense that twm is still around.

ajross
0 replies
1d3h

What Emacs needs is the nvim/vim Schisma.

It's already had like six, over the decades.

PurpleRamen
0 replies
1d1h

There are enough unsuccessful forks of GNU Emacs. None of them get enough attention and support for whatever reason, but I guess mainly because there have no real reason to exist. Emacs devs are working diligently and improving it regularly, and there is no good and simple solution for the problems it has.

There won't be any nvim/vim-like Schisma happen, unless some super-dev appears who can outsmart the whole community and it's devs. Maybe, in a decade when AI become good enough and someone feeds Emacs to electron or something like that.

binary132
4 replies
1d3h

Obviously the only possible solution is to attempt another fork/reimplementation of emacs. This one will definitely win and not be totally irrelevant like all the others.

samus
1 replies
1d1h

The impact of these forks is that the community around the main project is slowly eroded. But it doesn't really matter whether the fork brings the main project to the negotiation table. The author of TA is able and is committed to carry and maintain that patch in his local repository until the end of time. What is missing to complete such a fork is publishing that local repository.

domq
0 replies
10h21m

I have a hard time putting faith in that “balkanization theory” from the '90s anymore. A fork gains traction if and only if it manages to get ahead of the mainline feature-wise, and stay there, by a sufficiently wide margin for customers to overcome their inertia. We'll see whether this ~eshel person manages to pull that off, or not (my money is on “not”.)

CoastalCoder
1 replies
1d2h

From the blog post, I couldn't really tell what the author's long term intentions were for his fork.

Maybe just to persuade the mainline maintainers?

domq
0 replies
10h17m

Forking Emacs on such grounds is a symptom of ego malfunction. The proper step (after diplomacy has failed, which it hasn't yet in this instance) is to author an alternate implementation of the feature in Emacs Lisp and publish it.

NikkiA
4 replies
1d3h

Assuming any particular commit in git represents the eventual state of a release seems foolhardy.

marcinzm
3 replies
1d3h

That's not the author's point. They did try to improve the behavior in a future commit and were shot down. Hard it seems. So were any requests from others to change this before release.

chongli
2 replies
1d3h

Not only that, but the author of the original offending change asked the author of this blog to write a patch to make the change optional within the UI and then rejected the patch that was written. That seems like bad faith to me.

yaantc
1 replies
1d1h

Read the mailing list thread: the patch did much more than making the change optional, it did revert other related changes. That's why it was rejected. Other discussed changes were taken in, and it's not settled yet it seems: the discussion is on-going.

I find the reporting here very one sided and uselessly dramatic. I read the thread and don't see arrogance, just (sometimes strong) differences of opinion. Calling "arrogant" anyone who don't agree and fold to your view, and create drama and draw the crowd against one specific person (the initial change author, OK, but it was done with maintainers in the loop) where the crowd won't check the details is not OK in my book.

chongli
0 replies
1d1h

Then there is bad faith, it's just bad faith on the part of the linked blogger.

GavinAnderegg
4 replies
1d2h

Reviewing the mailing list threads on this, it looks like there will be an option to revert this behaviour: https://yhetil.org/emacs/87h6kr9817.fsf@posteo.net/#t

It seems like this option was mentioned before the original post was published, but perhaps the author didn't see this? I assume this would fix the issue, but I may be missing something.

--

EDIT: it looks like this will still require a RETURN keypress, based on the reply from ginko below.

ginko
2 replies
1d2h

Seems like that still needs an extra RET to confirm register overwrites:

https://yhetil.org/emacs/87a5qi1vui.fsf@posteo.net/

GavinAnderegg
1 replies
1d2h

Aha! Ok, that makes sense. I had figured the original poster would have seen this fly by, so I was confused as to why it was still an issue. Thanks!

nanny
0 replies
22h24m

Thierry also already offered to add another option to fully revert to the old behavior: https://yhetil.org/emacs/874jgq0zdh.fsf@posteo.net/

Please also take note that this (completely reasonable email) is some of the so-called "bad behavior" and "arrogance" that the author of the article is purportedly describing.

addicted
0 replies
1d2h

From that thread it does appear that register-use-previews seems to be the toggle for this behavior (although it mentions a bug where even if it’s set to never a certain workflow is prompting a confirmation). That would resolve any concerns I’d imagine if it’s truly an option?

wavemode
3 replies
1d3h

This thread is mostly "I don't use this feature of Emacs (or Emacs at all) therefore this isn't a real problem, so stop complaining." Poor to see.

I'd rather people who do regularly use the feature weigh in on how they feel about its new behavior.

tmtvl
0 replies
1d2h

It'll take me a day or two to get used to it and then it'll be fine for me. But I only really use registers to quickly jump around in buffers. If no configuration for switching to the old behaviour makes it in before Emacs 30 is released I'd be surprised if it were to take more than a week before someone makes a package that adds the old behaviour back in.

ginko
0 replies
1d2h

As a long-time emacs user who's never used registers I still think this is very poor form from the maintainers.

Emacs should be about customization and changing such a basic feature without a way to return to the original behavior is pretty bad.

CoastalCoder
0 replies
1d3h

For an established tool like Emacs, it must be hard to decide when it's okay to break the interface. Especially for a text editor, where longtime users' flow benefits from muscle memory.

mtraven
3 replies
1d2h

Seriously, WTF?

The whole point of Emacs is that it is a radically customizable platform, and if you don't like the behavior of some feature you can modify it yourself with a few lines of Lisp. Forking the whole project over a change to one obscure feature makes zero sense.

Status: Emacs user since it was implemented as TECO macros (1981 or so), but I don't use registers.

cratermoon
2 replies
1d1h

You must have missed the part where this change does not include the ability to revert to the old behavior via any settings.

morelisp
0 replies
1d1h

As far as I can tell this is simply not true. I don't think the change is a good idea but the hard fork also looks like a pure political play, not a technical one.

Also, as soon as someone talks about "settings" there is usually a profound misunderstanding of how Emacs works at play.

3836293648
0 replies
20h55m

No, they didn't. It's Emacs. Every thing is dynamically scoped lisp. It's like if you could include arbitrary javascript in your vscode config and if you shadow any core function any code calling it will now use your function instead.

BaculumMeumEst
3 replies
1d2h

I think a more effective approach to getting this reverted would be to actually describe the problem for people who don’t know what registers are, and to include the reasoning for the change, so that people can actually weigh the pros and cons and form an opinion.

I also think you can leave out the names of individuals, you can discuss the idea on its merits without their identities being involved. All it accomplishes is demonizing people who donate their time to the project. Already this thread has people saying stuff like “I don’t like this person.”

layer8
1 replies
1d2h

People who don’t know what registers are aren’t affected by the change, so it’s not clear why they should be weighing in.

And criticizing a person’s decisions doesn’t amount to “demonizing”.

BaculumMeumEst
0 replies
18h45m

This article is accusing maintainers of pushing a bad change. It was immediately obvious that there was only one side of the story being told here. And lo and behold, there was a lot of missing context:

https://news.ycombinator.com/reply?id=38592984&goto=item%3Fi...

and individuals involved have been receiving harassment:

https://www.reddit.com/r/emacs/comments/18f5oi9/comment/kcss...

cardanome
0 replies
20h39m

The actual reasonable approach would be to implement it as a strictly opt-in feature for the next release and then when many people have tested it, gather some some usage data and then decide on whether to make it the new default behavior or not.

Just breaking established user behavior and muscle memory just because you think something might be better without having gathered any actual evidence is insane.

smarx007
1 replies
1d2h

I am sorry but this whole post seems like gaslighting. Looks like maintainers welcomed a patch bringing the old behaviour behind a flag [1]. Eshel Yaron then writes "Sure. I'm attaching two patches", while doing the exact opposite of what was asked, namely undoing the commit that has already landed on the main branch and introducing merely parts [2] of the new behaviour behind the flag.

It's totally fine to disagree with people. Agreeing with people while doing the complete opposite, is quite unacceptable, in my opinion.

[1]: https://yhetil.org/emacs/837clv6sga.fsf@gnu.org/

[2]: https://yhetil.org/emacs/87r0k2pgq6.fsf@posteo.net/

rightbyte
0 replies
18h12m

I like how RMS pops up and complains about a Github link requiring non-free software and then returns to what ever he was doing.

mynegation
1 replies
1d3h

It’s been 20 years since I left Emacs, but I understand that this change is pretty disruptive. What I do not understand is why Emacs that prides itself in being the “kitchen sink” did not add an option to revert to the old behaviour.

tsimionescu
0 replies
1d1h

They are adding it, most likely. The author of this article is just mad that they didn't accept their patch (which added a flag but also did away with all the other improvements).

philipwhiuk
0 replies
1d2h

It seems like Emacs has a fairly toxic development process.

Arguing that because something has been committed to the development branch it can't be reverted, is a terrible policy.

pdyc
0 replies
1d

it indeed looks like a bad idea. New behavior should be optional, old behavior should be default so that it does not affects existing workflow of users. I am heavy emacs user but i use stable release, i hope this change does not makes into the stable release.

mediumsmart
0 replies
1d2h

It’s a slippery slope

”it looks like you are trying to create a buffer that is not attached to a file. If that is actually what you intended please confirm with RET so that the buffer can be created but keep in mind that. . .”

lycopodiopsida
0 replies
1d2h

The "maintainer" is Thierry Volpiatto, mostly known as author of helm, a completion framework.

juped
0 replies
1d3h

This is really polemically overstating the case, but at least it links to the mailing list threads where you can see what's actually going on. Not that anyone will click them.

jason_stelzer
0 replies
1d3h

I have been using emacs since probably 94. This change, without a toggle from userspace to disable it is a kick in the pants. I will follow your fork until (if) they come around.

akarve
0 replies
1d1h

I was sure to read “the forces of vim have invaded our headquarters and now hold our CEO hostage.”

accelbred
0 replies
1d

This is a bad take by the author; users wanting stability should be on the release branch, or pin commits on master. It should be expected that the development branch is used to develop in-progress features. Sometimes these take a while to hammer out. If you follow master, you will have frequent breaking changes and should be comfortable reverting to a previous commit when theres something breaking your workflow. Better yet, stay on a release.

Kwpolska
0 replies
1d1h

Is it just me, or is Emacs much more drama-prone, compared to Vim, VSCode, or any other text editor?

JoeyBananas
0 replies
19h24m

The tone of this author... Very... "neckbeard"-esque. This is an incredibly obscure feature only 3 nerds use, not the the Immovable Ladder of the Church of the Holy Sepulcher. The fact that some unpaid maintainer changed it slightly without consulting you first does not necessarily constitute "breaking master." It's master we're talking about, not stable or a tagged release. Good god.