How do I make a key not shift when shift is pressed?

When I press shift, I would like it to work as usual, except for the three keys .,', which I would like to remain unshifted. Is there an easy way to do this?

Poking around, I found an old ModifierLayers plugin, but it seems to be dead and I haven’t been able to get it to work. Neither ShapeShifter nor TopsyTurvy covers this case. The following issue: Can you map Shift keys? seems related, but the linked example seems to be mostly dead code.

(My search isn’t helped by the fact that a huge number of the links I found when googling or browsing the docs are now dead – see, eg, the “example” hyperlink at the bottom of this page: https://kaleidoscope.readthedocs.io/en/latest/plugins/TopsyTurvy.html, or the following link which was high in the google results: https://github.com/keyboardio/Kaleidoscope-TopsyTurvy/issues/7. Perhaps a huge amount of the documentation is temporarily offline?)

This was one of my chief desires when starting out with Kaleidoscope and a Model01, and I found it nearly impossible to do at the time, so I ended up rewriting almost the whole firmware in order to get what turned into a very simple plugin that I called Unshifter. It lets me independently assign values to both the unmodified and shifted output of any key. There have been some changes to Kaleidoscope since then that might make it practical to create a version of that plugin now, though it will still be more fragile than the original version. With enough demand, I might find the time to work on it.

Alternatively, it would be possible to write a custom, mini-plugin that would look for certain key addresses (and potentially active layer values) in an onKeyswitchEvent() hook, and when those are pressed, unset the shift bits in a beforeReportingState() hook.

1 Like

Interesting. I don’t suppose the Unshifter plugin (& new firmware?) are sitting around on github somewhere for me to try necromancing? FWIW, I’d be happy to put a few hundred dollars towards such a thing (on the principle that I’d happily put my time there if I had enough, and I’m always happy to put my money where my time isn’t). I know this probably doesn’t count as enough demand to be worth the effort, but if it is or if enough other people chime in, just point me to a bountysource link or a paypal address or w/e :slight_smile:

Well, my Kaleidoglyph project is on GitHub, though it’s not what I would call “presentable”. It’s missing a key component, which is a system for generating the sketch configuration code from simpler config files. You’re welcome to take a look at it, and I could even try to help you create a workable sketch, based on a Kaleidoscope sketch, but I will definitely caution you against relying on it for serious work.

The code for the Unshifter plugin in particular isn’t going to be very helpful in trying to get its equivalent working in Kaleidoscope, because it relies heavily on the core of Kaleidoglyph serializing events (keys toggling on and off), and generating HID reports only when one of those events occurs (or if a timer expires), rather than every cycle.

I am about to propose a change to Kaleidoscope that I think will get it closer to making Unshifter practical there, as well, but it’s a serious change to keyswitch handling that will need a lot of scrutiny before it gets accepted (and I don’t know if @jesse and @algernon would even be interested; I haven’t had an opportunity to discuss it with them yet).

1 Like