Magic Combo Questions

Hello,
I’ve adapted my keyboard to use kaleidoscope. currently, i’m almost finished translating my qmk keymap to kaleidoscope.
attached my keymap file: Squiggle.ino (4.8 KB)

one of the problem that i have when i translate it is magic combo.
i tried to use magiccombo to emulate qmk’s combo, (e.g. r + c = slash) magiccombo still sends r and c while also sends slash. i read in the magic combo doc that

The functionality assigned to these keys are not changed, and the custom action triggers as long as all keys within the set are pressed.

so, my questions are:

  • is it possible to ignore the “assigned functionality of the keys” when pressing combo?
  • if it is impossible to ignore the “assigned functionality of the keys” of magiccombo, is there any plugin that emulate qmk’s combo behaviour?
  • is it possible to change the amount of possible combos? i tried to change MAX_COMBO_LENGTH in MagicCombo.h to, say, 31 and i still cannot use more than 4 combos.

thanks.

Hi!

A bit late of a response, but hopefully still useful…

At the moment, no. There’s an issue about it, I started working on it, but hit a deadend, and it’s been stalled since, unfortunately. As far as I remember, there are no plugins currently that do what QMKs combos do.

To make MagicCombo work the way QMK does, we’d basically need to rewrite it from the ground up, because trying to teach the current version to ignore combo participants is a much, much larger effort than a straight up rewrite.

On the other hand, the current MagicCombo behaviour is kinda awkward, and more often than not, not what people want. Thus, a rewrite is in order. Luckily, Kaleidoscope is much more powerful nowadays, and provides more tools for plugin developers than it did when MagicCombo was conceived, so a rewrite shouldn’t be too hard.

I’ll dump my ideas to the linked issue when I have a bit of time, and we’ll see how to go from there.

That’s a bit weird, because MagicCombo should be using that constant… sounds like a bug, somewhere.

There might be a solution, but it’s a bit awkward to use. You could use Qukeys to turn r and c into dual-use keys: r when tapped, and a layer switch when held. On the target layer, c would be \, and c on the base layer would be set up similarly. This works for simple, 2-key combos, but anything more, and it becomes very messy.

An alternate idea, using a combination of Qukeys and MagicCombo:

You could define a bunch of qukeys to have the alternate (i.e. “hold”) value of Key_NoKey. Holding those keys longer than the Qukeys hold timeout would result in those keys being suppressed, so you could use any combination of them in a MagicCombo, and you wouldn’t get the undesired output, as long as you hold the keys long enough.

I wouldn’t say this is a good solution, but it might be better than not doing it.