@Firngrod@kareltucek Now that firmware 16.1.0 has been released with your native HRM implementation, and I am back from vacation, I was finally able to give it a go.
My first impression: it’s excellent. I just configured the secondaries, left pretty much all my “Typing behaviour” set as is, only added set secondaryRole.advanced.acceptTriggersFromSameHalf false, and it just works.
I shall be setting this as my standard configuration for the next week – will let you know if I encounter any problems, but it looks really good. Very impressed. Thank you for all the work you put into this.
That PR also adds the option to change the behavior of timeout in a way which allows the behavior I mentioned earlier in this thread: Instead of activating timeout action on timeout, it will make the release action the timeout action if release comes after timeout. This way, I can hold the secondary role key for 5 minutes if I want before using it for secondary role, but if I let it go, I get the timeout no action that I want in that case.
Also, I am pleased that it works well for you. It really was make or break for my HRM usage too. Shame that it had to take such a long time to get released.
Now what? Feels strange to have nothing planned for this feature anymore after so long. What to do with my time? I guess it’s finally time to finish up the last two books of Wheel of Time after 7 years of slowly chewing my way through the series.
How people type that fast is beyond me. I simply cannot parse what I see into motions that fast. My record is around 50 WPM on monkeytype, English 10k with punctuation. I use those settings to get all letters, and some special characters in order to practice my layout.
Monkeytype, English 10k, punctuation, quote medium. Your HRM implementation works well. I get the occasional non-fire, but it’s on a very similar level as I had with ZMK. It’s where the best timing and algorithms can’t differentiate anymore what my fingers are trying to convey.
I think I remember seeing that as a comic. WTF/min as a score of code quality. You walk across a room full of developers and check their number of “WTF!” exclamations. The more (per unit of time), the worse the code quality.
@Firngrod Is there any way with your implementation to specify a ‘minimum idle time’, i.e. the minimum time that has to elapse since the previous keypress before secondary actions can activate? If a primary/secondary decision has to be taken, and that minimum idle time has not elapsed, the resolution would always be ‘primary’.
No, there is not. The closest thing is a minimum hold time. You use trigger on press, correct? Have you tried using trigger on release? I find that reduces false activations.
It’s just that both ZMK and my own HRM macro implementation have a “minimum idle time”, and I did get a few inadvertent secondary activations on a larger run of typing tests today with your implementation. Was wondering if that would make a difference.
Doh. My bad. Do you use trigger on mouse? If so, do you have trackball and/or key cluster? I get false activations from that combo, but I’m testing a fix.
No, I don’t use trigger on mouse. I just use a 250ms timeout, which is good enough if I need to shift-click or ctrl-click. I might increase that to 350ms.
Still I am wondering how difficult it would be to implement a minimum idle time.
When just normal typing, when with USB, the responsiveness of the keyboard was like using Bluetooth. Changing the settings to be what maexxx had helped a bit.
I presume you used secondary role keys before? I see no reason why they should feel less responsive than previous iterations unless you have set a minimum hold time, in which case the time from pressing the secondary role key until the modded key from the next press will be at minimum the minimum hold time.