cajhin / capsicain

Powerful low-level keyboard remapping tool for Windows
334 stars 18 forks source link

Home row mods are listed as feature but no exsample code #75

Open gerhard-h opened 2 years ago

gerhard-h commented 2 years ago

Under features: Examples: F and J to Shift is mentioned but I can't find an example.

Also there should be a general way tap-Actions and a hold-Actions can be defined because an alt-Tap is used for some combos but I could not find where alt-tap itself ist defined.

use case: tap q gives q hold q gives ! or tap a gives a hold a gives ä

cajhin commented 2 years ago

that should be rewire f Lshf f rewire j Rshf j

Another user in the past liked this. I don't, because it causes trouble with fast typing and 'interleaved' keys (for "fo", I type f-down, o-down, f-up, o-up). That example would result in Shift-O for me.

Not sure what your idea about "hold" action is. it only really makes sense for Modifiers, because when you release it without another key, it is a tap. If you mean slow taps, there is no config for that. Generally, there is no configuration that depends on timing.

eugenesvk commented 11 months ago

because it causes trouble with fast typing and 'interleaved' keys (for "fo", I type f-down, o-down, f-up, o-up).

Is it possible to differentiate

Since this is the type of sequence that's better thatn timings in setting apart a home row mod vs regular fast typing

ktrutmann commented 5 months ago

Hey, I also tried capsicain for home row mods. The project seems realy cool and powerful, but there's something I don't realy understand. Wenn I have REWIRE S LWIN S in my config file, I would expect the S key to send the letter S when taped, but the windows-key when held (i.e. another key is pressed while the S key is still down). That does work, however, every second time I press the S key, the windows menu will pop up, even if it's clearly two distinct and independent taps. Is there a way to acchieve what I want?

Thanks for the great project and your help!

cajhin commented 5 months ago

Try again with the brand new release v97, and put GLOBAL DeactivateWinkeyStartmenu into your ini.

The issue is this: you rewire S to LWIN, so as soon as you press S, capsicain sends an "LWIN down" to Windows. You release S, capsicain recognizes a tapping, so it releases LWIN and sends an S. Now Windows sees "LWIN down, LWIN up" and opens the Start menu, then puts an S there.

With the new GLOBAL, capsicain will insert an extra "shift down, shift up" before releasing the Windows key.

I don't think you will be happy with your config, sorry. The issue is "rolling keypresses", type ASDF with your left hand, now you will probably press D before you release S, and this will trigger LWIN down, D down -> Windows shortcut for 'Show Desktop'. Unless you type very slow and carefully, best with one finger...

If you try it out, please answer on this thread if it works.

ktrutmann commented 5 months ago

First of all, thank you for the speedy reply!

From your explanation I still don't get why it happened only every second time, but that doesn't matter. I put GLOBAL DeactivateWinkeyStartmenu in my config and indeed, that fixed the issue. I also rewiered LWIN to RWIN, so I still have the windows menu on the left Windows key. ;)

However, there are still two issues:

  1. The same thing happens with the alt key, which I place on my index fingers in my mod.
  2. You are absolutely right: Not waiting for any timeout or considering whether the modifier key (for example the S key, which is LWIN in my case) is held down for the whole duration of the tab of the other key makes the whole thing way to "sensitive". I also have the spacebar set to act as shift when held down, and half my spaces just produce capital letters. 😆

For context: The reason I tried capsicain is that I'm currently using kanata, but that one struggles with the "alt gr" key of the german layout, presumably beacause its hooks don't "go as deep" as capsicain's. Capsicain handles all these things flawlessly.

You owe nothing to anyone and you already procuded an amazing piece of software here, but if you want to make "the homerow people" very happy, thre's three "feature requests" I'd like to place:

  1. A way to make capsicain only send a key-event once it's determined whether it's going to be a "tab" or a "hold".
  2. A way to only count a keystroke as a hold when another tab (i.e. key down and key up) happens before the key up of that first key. Or in other words, the "hold" key must be pressed the entire time of the "tab" of the other key.
  3. Optionally, and I'm sure this would not be a small feat, a "tab timeout" like other keyboard modders have. This would mean for example "only count it as a hold if it is longer than 300ms". I'd imagine a Syntax like REWIRE S LWIN S // 300 or something alike.

Maybe give it a thought if you find the time and motivation. Until then thank you again for providing such a great piece of software and for answering my request so quickly.