Skip to content

Conversation

@lobre
Copy link

@lobre lobre commented May 3, 2024

Hello,

This is an attempt to find a solution for #722.

I suggest reading the issue to understand the problem as I tried to explain it as precisely as I could.

I am creating this PR mainly as a draft for now, as I am not sure exactly about the right way to tackle the problem.

Here, I just tried to take care of overload, but the behaviour is the same for other layer activation mechanisms. The idea is that for an overload like below, the control should stay activated if another action is set as pending before the release of the modifier.

capslock = overload(control, esc)

This helps if I combine this with a key that is behind a timeout.

c = timeout(c, 1000, M-c)

That way, if I want to do control-c (by doing capslock combined with c), it will send control-c even if the modifier capslock is released before the release of c.

As explained in the issue, I don’t see a reason why somebody would not apply the control version of c when c is pressed while control is held. The fact that control might get released before the release of c is a misbehaviour, and so the proposition is to avoid this situation by enforcing the initial intent of the user.

For sure this small implementation is wrong. I already noticed a bug that I cannot exactly reproduce, where the modifier gets stuck.

So this PR is mainly a starting point to discuss the problem and receive guidance on a proper solution.

I have been using keyd for months, trying a lot of different workflows and I am generally really satisfied with the ergonomics, apart from this bug that makes me miss a lot of modifiers each day...

Thanks in advance for your help and bear with me, I just spent a few hours trying to understand the codebase, so there are probably things I missed.

@lobre lobre force-pushed the pending-preserve-layers branch from bd73664 to d962575 Compare May 3, 2024 03:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant