4x4 Macro Pad Kit(0xc45.com)
0xc45.com
4x4 Macro Pad Kit
https://0xc45.com/blog/4x4-macro-pad/
40 comments
This was the dream of mine when seeing the Optimus Maximus keyboard years ago... I saw a feature where every button was just an LCD display.
Have you heard of the stream deck?
I have a stream deck and it's pretty cool as a macropad, but I'm hoping they're working on at least a 60% keyboard. The keys they use on the macropads would be pretty awful to type on, so it will take some work, but I hope they can do it.
Art Lebedev had the popularis keyboard which is basically what a stream deck keyboard would be like: https://www.artlebedev.com/optimus/popularis/
Also, Lebedev's Aux concept from 2008 is basically what the stream deck is.
I played with an Optimus Maximus once (Booz Allen Hamilton had one), and it was beautiful; however it wasn't particularly nice to type on.
Art Lebedev had the popularis keyboard which is basically what a stream deck keyboard would be like: https://www.artlebedev.com/optimus/popularis/
Also, Lebedev's Aux concept from 2008 is basically what the stream deck is.
I played with an Optimus Maximus once (Booz Allen Hamilton had one), and it was beautiful; however it wasn't particularly nice to type on.
They're available[0], but they're expensive
[0] https://www.digikey.com/en/products/filter/programmable-disp...
[0] https://www.digikey.com/en/products/filter/programmable-disp...
[deleted]
Not to dismiss someone's passion project, but every time I go into a thrift store or used electronics shop I see a couple of those usb numerical keypads for a few dollars (or buy one new for a $10 donation to the bezos fiefdom) - I assume there is software that could be used to re-route the number keypresses to run macros
edit - instructable for doing exactly that: https://www.instructables.com/Making-a-powerful-programmable...
edit - instructable for doing exactly that: https://www.instructables.com/Making-a-powerful-programmable...
I went that route a while back and found a lot of weird little hitches. Keys that just wouldn’t remap and insisted on doing weird shit because of something set up in the factory ROM. Never mind the additional hassle of trying to get software to implement various layer swapping stuff if you want that - the QMK firmware has that built in.
Sure, you could just pull out the existing hardware and replace it. Sometimes it’s easier to just start from scratch though.
Sure, you could just pull out the existing hardware and replace it. Sometimes it’s easier to just start from scratch though.
Keyboard controllers are usually ROM (perhaps even fixed function, they certainly used to be) controllers, so these solutions are generally software macros, like the one you linked, which works for some things, but not others.
Right, but what's the difference? I.e. if the keyboard sends "9" but software captures that and sends out "cntrl-shift-3" it's the same outcome as if the keyboard sent "cntrl-shift-3" - is it not?
If we really want custom hardware involved, the most economical solution would probably be a USB repeater that did the re-interpreting in hardware.
If we really want custom hardware involved, the most economical solution would probably be a USB repeater that did the re-interpreting in hardware.
Then keycode & keysym correspond to different characters (or whatever) and whether or not you get the desired outcome depends on the implementation of the software capturing it at any given time.
Took me a while to work out that the reason my pasted passwords would occasionally not work was the remapping of a couple of symbol keys. (I'm accustomed to a weird mashup of USA/UK layout, thanks mainly to Apple's non-standard 'UK' layout donating Americani?ms, but then useless prominent keys I swapped for something more helpful (backtick & pipe I think, off the top of my head, for things so useless that I literally never use them and don't know their names.))
Took me a while to work out that the reason my pasted passwords would occasionally not work was the remapping of a couple of symbol keys. (I'm accustomed to a weird mashup of USA/UK layout, thanks mainly to Apple's non-standard 'UK' layout donating Americani?ms, but then useless prominent keys I swapped for something more helpful (backtick & pipe I think, off the top of my head, for things so useless that I literally never use them and don't know their names.))
This really only works in the most trivial of cases. There just isn't enough symbol-space information in a basic keyboard to be able to implement many QMK hallmarks like level shifting, chords, momentary hold effects, and taps.
I have thought about custom in-line hardware but that's honestly as complicated as QMK. Plus latency.
What I would love however is an inline monitor to see what keycodes I'm issuing. It gets...zany.
I have thought about custom in-line hardware but that's honestly as complicated as QMK. Plus latency.
What I would love however is an inline monitor to see what keycodes I'm issuing. It gets...zany.
Don't need "custom" in-line hardware. Just get this. https://www.1upkeyboards.com/shop/controllers/usb-to-usb-con...
> What I would love however is an inline monitor to see what keycodes I'm issuing.
this is actually very simple to do with QMK if you have a board with an OLED display. it's also implemented in the default keymap for a bunch of the split ergo boards (Lily58 is one that has it)
this is actually very simple to do with QMK if you have a board with an OLED display. it's also implemented in the default keymap for a bunch of the split ergo boards (Lily58 is one that has it)
Windows: HID Macros[1], AutoHotKey[2]
Mac: Karabiner-Elements[3]
*nix: idk but should be plentiful ways
PC DOS: you’re probably out of luck
1: http://www.hidmacros.eu/
2: https://www.autohotkey.com/
3: https://karabiner-elements.pqrs.org/
Mac: Karabiner-Elements[3]
*nix: idk but should be plentiful ways
PC DOS: you’re probably out of luck
1: http://www.hidmacros.eu/
2: https://www.autohotkey.com/
3: https://karabiner-elements.pqrs.org/
Obvious problem: it depends on software. So this can't send privileged keystrokes, and doesn't work across operating systems. Some software intentionally ignores keyboard events sent by stuff like Autohotkey.
What do you do when you want to type "9" though?
The software he mentioned stores macros for each keyboard. So you can still type 9 on your main keyboard.
Here's a helpful little snippet for fellow QMK warriors:
This lets you just say `SEND(MIC_MUTE, SS_LCTL(SS_LALT(SS_LSFT(SS_TAP(X_F10))));` or what have you.
I left off the final semicolon because it looks more natural to me.
#define SEND(case_enum, string) \
case case_enum:\
if (record -> event.pressed) {\
SEND_STRING(string);\
}\
return false;\
break
Looking at the OP article, I don't know if the `return false;` is really necessary? I copied it from elsewhere.This lets you just say `SEND(MIC_MUTE, SS_LCTL(SS_LALT(SS_LSFT(SS_TAP(X_F10))));` or what have you.
I left off the final semicolon because it looks more natural to me.
Looks useful!
Pro tip, as a professional C/C++ dev, for macros:
Wrap the body in a do-while loop, to force a semicolon after it’s called https://stackoverflow.com/questions/1067226/c-multi-line-mac...
Pro tip, as a professional C/C++ dev, for macros:
Wrap the body in a do-while loop, to force a semicolon after it’s called https://stackoverflow.com/questions/1067226/c-multi-line-mac...
That wouldn't work here (well it wouldn't without the return) as that would mean the break would apply to the loop and not the switch statement.
In genereal, I think hiding control flow in macros is a bad idea.
In genereal, I think hiding control flow in macros is a bad idea.
What are these used for exactly? They seem like they'd slow you down as opposed to just using a regular keyboard with software macros or a fancy keyboard with macro support.
Controlling scenes while live streaming (e.g. live / "AFK" / switch to "I'm dead" mode during multiplayer live stream / ...) is the most common use case for this type of keyboard I'm aware of. It's much less error prone than pressing a shortcut since it's a single button press. One of the most common commercial product for this particular use case is Elgato Stream Deck.
The biggest use I've seen is four-key and awkward three-key shortcuts in software where one hand is occupied with another device (generally a digitizer stylus, but it could be any controller or mouse). A macro keypad can be extremely handy when editing photos, for instance. Not everything one does with a computer can be done effectively with two hands on the keyboard.
I have one I built[1] out of a key switch tester and other spare parts. It saves me some awkward hand flexing and key stroke positions to reduce the chance of a repetitive stress injury.
[1] https://twitter.com/Azxiana/status/1285402557846781952/photo...
[1] https://twitter.com/Azxiana/status/1285402557846781952/photo...
I'm considering building one of these.
I optimize my keyboard to programming. I already have a second layer for programming specific functions. I could add a third, but it's more mental load. It's not worth it.
Things that I'd put onto this:
* Mute/Unmute for Zoom * Screenshot key * Bind to a few key apps so I can switch between them quickly * Media and volume keys (so I can use a smaller keyboard, but have these within react) * A few emojis just for fun. * I'd likely have a toggle so it could serve as a num pad
I optimize my keyboard to programming. I already have a second layer for programming specific functions. I could add a third, but it's more mental load. It's not worth it.
Things that I'd put onto this:
* Mute/Unmute for Zoom * Screenshot key * Bind to a few key apps so I can switch between them quickly * Media and volume keys (so I can use a smaller keyboard, but have these within react) * A few emojis just for fun. * I'd likely have a toggle so it could serve as a num pad
what programming specific macros do you use?
I removed caps lock and changed it to a layer modifier. Then I mapped symbols and arrows to the home row on the second layer (in fact, numbers too).
caps + a => !, caps + s => @, etc. Brackets and underscores are extremely convenient to have on the home row. I also have these mapped to convenient positions "=>" and "() => {}"
Finally, I have arrows mapped to u, i, o, and p. Really, really nice for hopping one or two characters without having to shift my hands too far.
caps + a => !, caps + s => @, etc. Brackets and underscores are extremely convenient to have on the home row. I also have these mapped to convenient positions "=>" and "() => {}"
Finally, I have arrows mapped to u, i, o, and p. Really, really nice for hopping one or two characters without having to shift my hands too far.
Having your ten most important keystrokes right next to each other with a cute icon, especially useful if the actual hotkey involves a couple of meta keys, or if you have multi-key sequences you regularly need to hit.
Working in situations where a full keyboard doesn’t work, I did this with a remapped numpad when I was playing with using a Surface to let me get art done in Illustrator on the bus.
Working in situations where a full keyboard doesn’t work, I did this with a remapped numpad when I was playing with using a Surface to let me get art done in Illustrator on the bus.
Any time you want some specific even with very high accuracy. Shortcut combos don't always work/trigger at the right time/in the right focus context. Or if you have a QMK with altogether too many virtual keys - I have like 60 x 7 layers = 420 possible two-thumb-one-finger events, I don't use them all but I still lose track. I'm thinking of building one of these for things like "jump focus to chat window and mute".
Also it saddens me we have a speaker mute keycode but no system-wide mute mic.
Also it saddens me we have a speaker mute keycode but no system-wide mute mic.
I'm amazed that a standard keyboard build still targets the Pro Micro. Here is a build tutorial from 2012. 1Up (used in the article) is certainly more cost effective ($9) than SparkFun ($18).
https://www.sparkfun.com/tutorials/337
https://www.sparkfun.com/tutorials/337
5V Pro Micro clones from China used to be $1/ea. That was what people were using when lots of guides and builds were written.
Most group buys/keyboard shops sell the Elite C as an alternative[0].
[0] https://docs.splitkb.com/hc/en-us/articles/360011510839-Why-...
[0] https://docs.splitkb.com/hc/en-us/articles/360011510839-Why-...
I have made a few custom keyboards with the stm32f103 ("bluepill"). You can get a 5 pack for $10. You get more IO pins and you don't need to suffer through anything Arduino-related. The starter kits often include an ST-LINK clone that makes flashing much easier than dealing with bootloaders and USB serial connections. (I use a j-link, but both are fine.) It is, of course, supported by QMK.
If you want to go even cheaper for a 4x4 macro pad, you can just hand-wire the thing and not buy a circuit board. I hand-wired a full keyboard and while it was not the quickest task in the world, it also wasn't that bad. Kind of relaxing. You also don't need to go overboard with mechanical supports for the keyswitches; I just 3D-printed a platform that the keyswitches slot into.
Basically, if you happen to have some magnet wire, a microcontroller, and some Cherry clones sitting around... you can make yourself a keyboard. (Diodes are nice, but you probably don't need n-key rollover on a macro pad.)
If you want to go even cheaper for a 4x4 macro pad, you can just hand-wire the thing and not buy a circuit board. I hand-wired a full keyboard and while it was not the quickest task in the world, it also wasn't that bad. Kind of relaxing. You also don't need to go overboard with mechanical supports for the keyswitches; I just 3D-printed a platform that the keyswitches slot into.
Basically, if you happen to have some magnet wire, a microcontroller, and some Cherry clones sitting around... you can make yourself a keyboard. (Diodes are nice, but you probably don't need n-key rollover on a macro pad.)
I was thinking of doing something like this, connected with a small screen, and UART send/receive (because it's simple) - so that I could use it just to keep ibuffer in Emacs up and help me move through buffers.
...still need to do that project. Just a small, single use device to make my Emacs life easier.
...still need to do that project. Just a small, single use device to make my Emacs life easier.
FYI, the code is difficult to read, at least on FireFox. It shows as black text on a gray background.
Looks ok for me (Firefox 81 on Linux): https://i.imgur.com/7Pxmwyn.png
Firefox 81 on Mac: https://imgur.com/a/JQGcfTQ Does not look good.
It has something to do with the custom font. If I disable "font-family: AdobeSourceCodePro, monospace" the colors appear: https://imgur.com/a/mcUX5XD
It has something to do with the custom font. If I disable "font-family: AdobeSourceCodePro, monospace" the colors appear: https://imgur.com/a/mcUX5XD
Looks like it's https://bugzilla.mozilla.org/show_bug.cgi?id=1520157:
I think basically what's happening here is that the font includes some SVG glyphs (for a bunch of emoji, no doubt). This causes us to render it via a "color font" codepath, and color fonts ignore the CSS color property as the glyphs are painted with their inherent colors instead.
But in this case many (most) of the glyphs do not actually have color versions, and so they simply paint as black. We need to be making the decision whether to paint "as a color font" (ignoring CSS color) on a per-glyph basis, not per-font-run, so that glyphs without inherent color don't just default to all-black all the time.
I think basically what's happening here is that the font includes some SVG glyphs (for a bunch of emoji, no doubt). This causes us to render it via a "color font" codepath, and color fonts ignore the CSS color property as the glyphs are painted with their inherent colors instead.
But in this case many (most) of the glyphs do not actually have color versions, and so they simply paint as black. We need to be making the decision whether to paint "as a color font" (ignoring CSS color) on a per-glyph basis, not per-font-run, so that glyphs without inherent color don't just default to all-black all the time.
I really like projects like that.
Another way of getting to similar results without hardware hacking is via using midi controllers combined with software to translate midi messages to keystrokes (and/or macros).
Another way of getting to similar results without hardware hacking is via using midi controllers combined with software to translate midi messages to keystrokes (and/or macros).
PS. Ye cannae be a 'bit unique' ;-)