Coder Social home page Coder Social logo

qmk / qmk_firmware Goto Github PK

View Code? Open in Web Editor NEW
17.1K 233.0 36.8K 293.33 MB

Open-source keyboard firmware for Atmel AVR and Arm USB families

Home Page: https://qmk.fm

License: GNU General Public License v2.0

Makefile 3.67% C 91.18% C++ 3.91% Assembly 0.02% Shell 0.06% Python 1.11% Nix 0.02% Dockerfile 0.01% Go 0.01% SourcePawn 0.01%
keyboard-firmware c olkb ergodox-ez clueboard qmk keyboard-support c-plus-plus atmel-avr hacktoberfest

qmk_firmware's Introduction

Quantum Mechanical Keyboard Firmware

Current Version Discord Docs Status GitHub contributors GitHub forks

This is a keyboard firmware based on the tmk_keyboard firmware with some useful features for Atmel AVR and ARM controllers, and more specifically, the OLKB product line, the ErgoDox EZ keyboard, and the Clueboard product line.

Documentation

The docs are powered by Docsify and hosted on GitHub. They are also viewable offline; see Previewing the Documentation for more details.

You can request changes by making a fork and opening a pull request, or by clicking the "Edit this page" link at the bottom of any page.

Supported Keyboards

The project also includes community support for lots of other keyboards.

Maintainers

QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, Hasu. The OLKB product firmwares are maintained by Jack Humbert, the Ergodox EZ by ZSA Technology Labs, the Clueboard by Zach White, and the Atreus by Phil Hagelberg.

Official Website

qmk.fm is the official website of QMK, where you can find links to this page, the documentation, and the keyboards supported by QMK.

qmk_firmware's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qmk_firmware's Issues

CTL_T(LGUI(v)) not working

... acually it produces either a V or ctrl, but not what I expected...

did I miss something here?

The expected behavior would be, holding the key should press CTRL, typing it should send CMD-V..

Running a function on every keypress? (Or: changing the behavior of CTL_T and friends)

I've found that the default behavior of CTL_T(KC_ESC) doesn't suit me. I press control and then try do my chord before the timeout happens. What I'd like it to instead is do a keydown for CTL immediately, then on keyup for a short press do keyup CTL, keydown keyup ESC. For a long press, it would just do keyup CTL. The useless control press in the short press case doesn't bother me. I've accomplished this with a macro:

        static uint16_t start;
        if (record->event.pressed) {
            start = timer_read();
            return MACRO(D(LCTRL), END);
        } else {
            if (timer_elapsed(start) > 150) {
                return MACRO(U(LCTRL), END);
            } else {
                return MACRO(U(LCTRL), T(ESC), END);
            }
        }

This works very well, but now I've discovered another problem. Sometimes I do my whole chord too quickly, and end up getting an ESC press that I don't want. I want to skip the ESC press if either the timeout has passed OR another key has been pressed. Is there a way to run code on every keypress to record that there shouldn't be an ESC press? Or, is there a way to write another CTL_T that has this behavior?

Thanks

Accessing system clock(s)

I'd like to grab values of one or another of the counters/clocks maintained on the CPU, to seed random processes. (I implemented a wee random number generator so I have a key that emits randomly selected digits and another emitting randomly selected letters.) Grabbing a clock value would make this WAY more random.

I see around 4 different clocks in the chip documentation; does anyone know how to get at their values from C code?

Support for KC_INT and some extra keys (KC_KP_COMMA) for an ABNT2 layout

Hello,

I am trying to create an Ergodox EZ firmware to be used with the Brazilian ABNT2 keyboard layout (the standard keyboard used in Brazil) on OS/X.

Now the ABNT2 is a strange little keyboard layout, not only it switches the keys around a bit (; becomes Ç, ``~becomes'"` etc), it also has two extra keys: one for the `/?` (scan code `0x73`, USB HID `0x87`) and other for the dot in the number pad (scan code `0x7e`, USB HID `0x85`). (The dot and comma are switched in the numpad because in brazil the comma is the decimal separator, I think).

Using the Massdrop configurator with Ben's firmware, I was able to produce these two keys with the codes KEY_International1 for the /? and KEYPAD_Comma for the numpad dot. It works.

I can see from The common keycodes in TMK core that there are equivalent constants for these keys in TMK, namely KC_INT1 and KC_KP_COMMA. However, I cannot get these to work on my Ergodox EZ.

I have done some diagnosing using the Key Codes app to check the codes actually being sent to the computer, and when using Ben's firmware the keys work and I receive the following information:

Key Down
  Characters:  /
  Unicode:     47 / 0x2f 
  Keys:        /
  Key Code:    94 / 0x5e
  Modifiers:   0 / 0x0

Key Down
  Characters:  .
  Unicode:     46 / 0x2e
  Keys:        .
  Key Code:    95 / 0x5f
  Modifiers:   256 / 0x100     # here I assume this is because I'm in the number layer

In my keymap.c file I used aliases to redefine the brazilian equivalent keys:

#define BR_CCDL KC_SCLN      //  ;:  =>  çÇ
#define BR_SCLN KC_SLSH      //  /?  =>  ;:
#define BR_QUOT KC_GRV       //  `~  =>  '"
#define BR_TILD KC_QUOT      //  '"  =>  ~^
#define BR_AACT KC_LBRC      //  [{  =>  ´`
#define BR_LBRC KC_RBRC      //  ]}  =>  [{ 
#define BR_RBRC KC_BSLS      //  \|  =>  ]}
#define BR_BSLS KC_NUBS      //  #~  =>  \|   * (Non-US # and ~, sometimes § and ±)

#define BR_SLSH KC_INT1      //  /?  =>  scan code specific to abnt2 layout (slash/question mark)
#define BR_NDOT KC_KP_COMMA  //  .   =>  scan code specific to abnt2 layout (numpad dot)

But when compiling this and flashing the Ergodox EZ, keys using the BR_SLSH (KC_INT1) or BR_NDOT (KC_KP_COMMA) produce no effect, and the Key codes app doesn't show any event coming from the keyboard when the mapped keys are pressed.

Here's my layout for what is worth. The repository is at potz/ergodox-ez-abnt2-layout and it has the script I have been using to compile it inside a docker container. It is a work in progress which I just started, I'm still trying out a couple of things but got stuck in this issue. I'd really prefer to use QMK rather than the massdrop configurator since it has a lot of extra features.

My questions are:

  1. Are these extra keycodes supported in QMK at all?
  2. Am I doing something terribly stupid by creating these aliases? I just assumed this would work (it worked for the other switched keys), but my C skills are very very rusty. I also tried just sticking in the 0x87 and 0x85 codes with no success.

Thanks a lot,

potz

Incorrect make invocation in tmk_core/doc/build.md

Following the directions in build.md, I noticed the -f Makefile.<variant> syntax is either wrong or outdated. From what I see in the Makefile for the keyboard/ergodox-ez project, if variant is supposed to be an alternate keymap, the syntax should read make KEYMAP=<variant> instead.

Using one key for momentary switching and toggling of layer

For some layers it would be useful if you could switch them temporarily and also toggle them. Since it would make sense with the hold/toggle functionality to assign both of these to one key I tried to do this: LT(2, TG(2)). Unfortunately this doesn't work, in fact it makes the key do nothing at all. It would be great if this functionality could be supported.

ergodox_ez default keymap: hex not applying cmd when apostrophe is held

So I went ahead and nabbed the latest hex file from keyboard/ergodox_ez/keymaps/default since I saw the recent update to it.

From what I can tell, the hex flashes successfully, and teensy reboots just fine, but holding down apostrophe ( ' ) yields no change. I just see apostrophe in my keymap.

I tried unplugging the ergodox to make sure, but indeed... I think the hexfile is bad. Can someone else confirm?

Here's the md5 for the hex file I got when I cloned this repo to my disk: 29fbf9fe505b911892007dd07bf01933
If you do get the CMD to work, please make sure the MD5 matches that... or maybe someone didn't push the hex file? I'm rather new to teensy and don't have the setup yet to compile and confirm this myself.

Enable 2 layers at the same time?

I am currently designing a layout in which layer 2 should be the same as layer 1 + some keys.

Layer 2 is designed to be a momentary layer, while layer 1 would be a toggle layer.

To avoid duplicating layer 1 in layer 2, I would like to configure a key that momentarily toggles both layers 1 & 2.

Should I implement it as a macro or is there a simpler way?

Is it reasonable to "unfork" from TMK, so your code can be searched?

I'm not sure if there are advantages to keeping your repo as a fork of TMK. here is a Stackoverflow question concerning how to unfork. When trying to search your repo now I get:

Sorry, forked repositories are not currently searchable.

It would be very helpful to search trough your code when customizing functions/keymaps

unicode

tryied using the unicode function to create a hebrew layer keyboard, but when i press one of these keys the keyboard act weird and i need to reconnect it
keymap_dvorak-heb.txt

have i done something wrong?

Produce another key when combined with shift

I am looking for a way to produce a different key stroke when pressed in combination with the shift key.

For example: I would like the comma and dot key to behave normally when pressed alone. But when pressed with the shift key held down I would like the keyboard to produce a SHIFT+9 and SHIFT+0 instead (i.e.: the comma and dot keys produce parentheses when shifted, instead of the less than and greater than symbols).

Shift-Insert

Is shift-insert possible in the default layout?

Change the Control keys to Command for Macs

I'm using the Ergodox EZ keyboard and thought that for Mac users, it would be awesome if the Control keys could be changed to Command keys. Could a "Mac" layout be created for this?

tuning latency / debouncing for CTL_T

Prior to getting a hardware keyboard and programming it, I was using Karabiner to turn my capslock key into CTL_T(KC_ESC). This worked really well. Since I switched to a hardware implementation of this, I'm finding that I'm typing too fast for the firmware to register CTRL-W arrow (that's a CTRL-W followed by an arrow) which I use to navigate around in splits in vim.

I turned up debugging on the console and captured these two sequences to show what the keyboard is sending to the host system:

keyboard_report: 00 00 29 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard_report: 00 00 29 1A 00 00 00 00 00 00 00 00 00 00 00 00
keyboard_report: 00 00 29 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard_report: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard_report: 00 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard_report: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<that failed>


keyboard_report: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard_report: 01 00 1A 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard_report: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard_report: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard_report: 00 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard_report: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<that worked>

The first one of these is me typing at my normal speed, and the second is me introducing what feels like a very exaggerated delay in my typing.

I think that my ESC press is getting debounced out? I quite often end up with W being sent bare (no CTRL) or sometimes as just ESC.

The question is, what parameters are available to tune the timing around this?

{HOWTO} Can I set a double tap on semicolon ; to send a colon :

I want to be able to double tap the semicolon button and send a colon but have it behave normally when I press it once, is that possible? What would be the easiest way to do that?

Single press -> semicolon
Double tap -> colon
Shift + Single press -> colon

I'm currently doing that with Karabiner on Mac but would like to have it programmed into the keyboard so that I can take it with me.

custom firmware layout independent of OS-layout

(Not a real issue of qmk, but trying to get input/discussion)

My goal: creating a firmware-based layout (of neo2, see www.neo-layout.org ; needs massiv unicode support, but that's not the issue here). That should work independent of the PC I plug my ergodox EZ in.
Question: does the OS-defined Keyboard-layout (whatever this is really called) interfer with this, i.e. do I get different letters pressing the same key under the US and german map?
If yes, what to do?

Macros for mouse T(MS_U) not working.

Hi!
In action_get_macro all of this codes not working:
return MACRO( T(MS_U), END );
OR
return MACRO( D(ACL2), D(MS_U), U(MS_U), U(ACL2), END );
OR
register_code(KC_ACL2);
register_code(KC_MS_U);

How i can move mouse in max speed without tapping two button?
Thanks!

Mapping a Teensy key

Hello! I'm trying to create a key that acts like the little reset-button on the teensy board, I see this mentioned in lots of places but I can't find anywhere that describes how to do it - could someone please point me in the right direction?

Cheers

Change key when pressing SHIF

Hi

I just receiving my keyboard and it is almost my first message I am writting with it...
I have built my first custom hex everythinkg is working great on this side !
I am building an AZERTY (I will contrubute here as I don't see any yet)
As AZERTY has different key when pressing SHIFT I am wondering if there is an easy way to customize this?
For example SHIFT comma needs to be questionmark (it is < in QWERTY)
I like a lot they way to produce layout it is very convenient and I am looking for a simple way to be able to add a key:shift key.
many thanks

belette

Trouble building - no rule to make target

When I run make clean then make KEYMAP=keymap_default or any other keymap, I get make: *** No rule to make target 'ergodox_ez.elf', needed by 'elf'.'
I am running both commands in repo/qmk_firmware/keyboard/ergodox_ez
Tried following the instructions both on linux and windows with the same result - am I doing something wrong?

Undocumented coder toggle behaviour in Ergodox-EZ.

The default Ergodox-EZ layout diagram says the RH bottom-right key is "Tmp Coder Layer".

In fact it does more than that, due to the custom behaviour of KC_FN1 defined in the default Ergodox-EZ keymap.c file:

  • Tapping the key momentarily, it behaves as a permanent toggle for the coder layer.
  • Tap-and-hold, it temporarily activates the coder layer.

Can we get the keyboard layout images updated? I don't know what your workflow is for updating them (they're just PNGs; maybe you have a Photoshop file or something).

LT function does not switch back from higher layer after button release for certain keys

For LT(LAYERX, KEYX), it works as expected for KEYX keys like KC_ENT, KC_UP, even KC_Z (thus not just non-alphanumeric), but for certain keys (haven't isolated it exactly, but so far it appears to be the home row and KC_SPCE), holding the key just switches to layer LAYERX and gets stuck there. This means that unless you have a separate toggle switch for that particular layer, you're just stuck there forever....

EDIT - I thought I'd just messed up, but after some more testing I still can't explain why LT(MDIA, KC_RGHT) and LT(MDIA, KC_A) both work fine but LT(MDIA, KC_SPC) and LT(MDIA, KC_U) both get stuck in the MDIA layer...

Thanks!

Version of LT that also applies a modifier key

Is there a way to have essentially the functionality of LT but also apply a modifier key the entire time the layer is active?

In OSX, the app switcher is accessed with cmd+tab, and if you keep cmd depressed and hit tab repeatedly, you cycle through the apps. I'm hoping to make a layer with tab on one key and shift+tab on another, and have the layer activated by a key that also emulates holding cmd.

I've searched for the answer and tried a bunch of things like combining the LT function with GUI_T or LGUI, but haven't been able to accomplish it. Is it possible to do? Any guidance would be much appreciated, thanks!

Allow overriding TARGET

Overriding TARGET in the makefiles is important, since it's how the filename is generated and we want to ensure we're not overwriting files in different threads in Reactor.

Right now, I'm doing this with the -e flag. According to GNU make, that's not recommended, so it would be great to not be doing that.

Is there an easy way to only assign a variable in c if it isn't assigned? in ruby it would be TARGET ||= ergodox_ez

How to make.

When trying to make my keymap I get the following error "make: *** No targets specified and no makefile found. stop. "
Do I only need the keymap.c file to compile to .hex or is there supposed to be other files such as a makefile?
And where exactly am I supposed to put the files relative to the cmd directory?

Combining Shift with certain characters

I am trying to replicate the Shift-key functionality that Steve Losh described here: http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses . The idea is that tapping the Shift key produces a left or right parenthesis, respectively, and holding it results in the normal shifted functionality. Unfortunately this doesn't work for me with this firmware; if I try to do it the obvious way with SFT_T(KC_LPRN) then tapping the key produces a 9, not a (. This has probably to do with the fact that the parenthesis is a shifted 9, but it would be great if this could work regardless.

How do i mount a keyboard or get to /keyboard/ in a shell?

I have just received a nice looking ErgoDox EZ, and now I want to change the layout

If you're looking to customize a keyboard that currently runs QMK or TMK , find your keyboard's directory under /keyboard/ and read the README file. This will get you all set up.

But how do i mount it to be able to find the /keyboard/ folder? It behaves just like a keyboard when i plug it in? There is no volume mounted etc... I'm on a mac

No media keys on ErgoDox?

Hi!

I’m using an ErgoDox (not an EZ one) with this firmware and I found that media keys are not working. They just send nothing.
I’m just using this firmware since yesterday (just received my ErgoDox) so maybe there’s something I missed?

How to catch (neo2) capslock activity?

Hello guys,

Sorry, but I have absolutely no experience with keyboard firmware and little proper experience with C++...
I'm currently trying to associate some LED patterns on my ergodox EZ with the "capslock-active"-mod/event thingy under neo2 layout set in the OS. neo2 (de-)activates capslock upon pressing both shift keys simultaneously.

So far, I have figured out how to manipulate LEDs from within the
matrix_scan_user(void)-"loop"
in my custom keymap_BLAH.c and associate, for example, a LED activity pattern with a particular Layer being active.

However, I have no good idea how to properly get a handle on a key-press/release event or modifier being active, such as capslock. At this point, my best efforts amount to having copied the function
static bool scan_keycode(uint8_t keycode)
from bootmagic.c into my custom keymap_BLAH.c and now i can unelegantly catch key-events somehow...
By setting some global flags I furthermore managed to detect key-releases for left and right shift keys, which induce somewhat correctly an additional custom "capslock-led-flag" and consequently some LED animation.
However, sometimes if I press too fast, capslock gets activated but my diletant "capslock-led-flag" did not catch it.

What would be the proper way of detecting "capslock-active"-mod? Or any other events, for that matter.
Any pointers in the right direction or towards more detailed documentation would be highly appreciated ;)

Btw, is there a chance of harming the leds with buggy blink patterns?!

thx for reading,
johannes

Usage of LCTL/LSFT/LALT/LGUI in a temporary layers

I just noticed an issue if you use those in a temporary layer, for example to provide cut/copy/paste with LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS).

If the user releases the temporary layer key before e.g. the LSFT(KC_DELT), the keyboard starts to send continuous KeyPress/KeyRelease events for KC_DELT, and does not send a Shift KeyRelease event.

This is annoying as it makes the usage of LCTL/LSFT/LALT/LGUI unreliable in temporary layers for quick actions.

As a workaround I think using a macro instead should work but it's a bit of a shame though.

OSX System Keys

Is it possible to emulate the system keys you find on Apple keyboards for things like screen brightness up/down? I haven't been able to find any info on how to emulate those special keys. Thanks!

Strange behaviour when assigning certain key as layer switch

Hi,

I'm currently fiddling with the layout of my new ErgoDox EZ, and noticed something strange when I was trying to assign the big left-most key of the left thumb block (which is assigned to "Space" by default) as a layer switch key. Pressing the key does switch to the desired layer, but it doesn't seem to be able to switch back to the default layer, no matter whether I assign it as a temporary switch (with MO) or as a toggle (with TG). I don't know if that's a hardware or a firmware issue, but it's a bit unfortunate.

Are KC_MEDIA_EJECT & KC_MEDIA_SELECT correct?

Currently trying to reproduce the TypeMatrix 2030 on my ErgoDox EZ.

fn+F6 on the TM is mapped to "eject". I tried to use the KC_MEDIA_EJECT for this but it does not seem to send the correct keycode. I am working on Ubuntu, here is the output of xev with those keys:

TM 2030:

KeyPress event, serial 53, synthetic NO, window 0x5200001,
    root 0xd9, subw 0x0, time 191628480, (142,442), root:(363,710),
    state 0x10, keycode 169 (keysym 0x1008ff2c, XF86Eject), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 53, synthetic NO, window 0x5200001,
    root 0xd9, subw 0x0, time 191628552, (142,442), root:(363,710),
    state 0x10, keycode 169 (keysym 0x1008ff2c, XF86Eject), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

(note that this works with the default Gnome3 keyboard shortcut – it ejects the CD tray)

ErgoDox EZ:

KeyPress event, serial 55, synthetic NO, window 0x5200001,
    root 0xd9, subw 0x0, time 191723071, (585,221), root:(806,489),
    state 0x10, keycode 248 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 55, synthetic NO, window 0x5200001,
    root 0xd9, subw 0x0, time 191723142, (585,221), root:(806,489),
    state 0x10, keycode 248 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Also, I was curious about what was KC_MEDIA_SELECT so I added it to my keymap. Here is what it gives:

KeyPress event, serial 83, synthetic NO, window 0x5200001,
    root 0xd9, subw 0x0, time 191864282, (301,-52), root:(522,216),
    state 0x10, keycode 179 (keysym 0x1008ff81, XF86Tools), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 83, synthetic NO, window 0x5200001,
    root 0xd9, subw 0x0, time 191864354, (301,-52), root:(522,216),
    state 0x10, keycode 179 (keysym 0x1008ff81, XF86Tools), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

So Ubuntu recognises it as a "Tools" key. In fact, the default action on Gnome3 for this key is to open the Gnome Settings.

Remembering that key from lower layer has been pressed and held to go to higher layer

Use case:
I want to use thumb presses on each side to go temporarily toggle the media layer using LT(MDIA, KC_thmb):

  • when pressing with my right thumb I'll be using the left half of the keyboard for mouse movement, with left thumb buttons for mouse clicks, and;
  • when pressing with my left thumb I'll be using the right half of the keyboard for keyboard movement, with right thumb buttons for browser back/forward.

As I discovered, this doesn't work because the keys on the higher layer with different functions (though not in use because I'm using the other side of the board) take over and thus the release event from the lower layer is blocked.

The easiest fix is to make one layer with only left thumb and right keyboard active, and another with right thumb and left keyboard active. However this seems like it would get convoluted since I'd be needing to make a new layer for every different hand combination to find non-conflicting keys.

I'm imaging the complexity of the fix (since each key would have to remember the layer of its depressed state) is not worth the effort? Just wanted to confirm whether the fix above is the only way to handle this use case? Thanks!

VendorID dependent macros

I had the idea that it would be nice to have cut/copy/paste keys that work by default on both Windows and OS X systems (I plan to connect my keyboard via a KVM).

I think I can implement this by using macros that send the appropriate key sequences based on the USB VendorID of the host computer system.

Couple of questions:

  1. Is it possible to make this distinction in the qmk_firmware? I'm planning on checking this during matrix_init_user and stashing the vendorid in a global.
  2. Can you point me to a function in the LUFA code (I'm assuming that's the right ballpark) that might help?
  3. Am I going to get screwed by the KVM anyway?

I'm using an ErgoDox EZ and I'm quite handy with C, I'm just unfamiliar with the USB spec and library.

Assigning a different character to a key to its shifted version

Hi Jack,

I'm currently looking into creating a practical italian keyboard layout for the Ergodoz EZ. This is a draft of a desired layout: https://gist.github.com/dkfi/8b71ca2a84af37642231

By looking at Matthias Schmitt contribution on the german layout I still couldn't figure out how to arbitrarily assign a specific character to a shifted key. For instance, based on the gist above, I would like to have the # symbol and the '@' on the same key next to ENTER. Any pointer or suggestion?

Thanks!

Registering key tap on press

I haven't found a way to do it so I'm posting it as a bug (in worst case it's a bug of documentation). I'm trying to write custom key bindings to ErgoDox and I'd like one key to send tap of RCtrl and then press down of LGui on press down and press up of LGui on press up. Is that possible?

ErgoDox Ez VS Original?

Hey all,

I currently have an original Ergodox and was wondering if uploading the .hex generated from the Ergodox ez dir will work for my board? I am assuming it will but thought I would ask. Thanks and love what you are doing with things.

LSFT (& friends) might affect the next key press

I am currently designing a layout in which some keys of the default layer need LSFT. However I noticed that when typing fast those keys, the shift state might affect the next key I press.

In fact, this occurs when I press the next key before I release the one with LSFT.

The problems comes from the implementation in action.c, where the shift key is actually maintained in the weak mods until the key is released:

        case ACT_LMODS:
        case ACT_RMODS:
            {
                uint8_t mods = (action.kind.id == ACT_LMODS) ?  action.key.mods :
                                                                action.key.mods<<4;
                if (event.pressed) {
                    if (mods) {
                        add_weak_mods(mods);
                        send_keyboard_report();
                    }
                    register_code(action.key.code);
                } else {
                    unregister_code(action.key.code);
                    if (mods) {
                        del_weak_mods(mods);
                        send_keyboard_report();
                    }
                }
            }

The advantage of this technique is that it allows the key repeat to work properly, with the above drawback.

Would it be possible to avoid this drawback? I'm thinking maybe clearing the weak mods when another key is pressed?

Rapid press of two mousekeys makes mouse cursor stop.

Issue: If I press two mousekeys at the same time or almost the same time the mouse cursor stops moving.

Expected Behavior: I expect the mouse cursor to move on screen no matter how quickly I press multiple mousekeys.

Actual Behavior: The mouse cursor stops moving after moving a very short distance in the direction of the first mousekey press.

To Reproduce: Press a key assigned to KS_MS_U and then immediately press KS_MS_R. The mouse cursor should move diagonally to the upper right does instead it stops moving.

The MT() macro does not respect shift

Suppose a key assigned to one of

MT(MOD_LCTL, KC_EXLM)
CTL_T(S(KC_1))
etc...

When that key is pressed, it produces a 1 rather than the expected !. (When holding a Shift key, however, it does produce a !.) This behavior happens for all MT modifiers and all key definitions that have shift pre-applied (e.g. KC_TILD, KC_AT, KC_HASH, etc.)

One key momentary switching and many keys to select the layers

Hello!
How I can do this: Press the key for example that "A" which defined MO(Layer1), hold it and tapping "B" which defined in Layer1 like this MO(Layer2), release "B", but still keep pressed the "A" and now need working Layer2 not Layer1. When I release "A", I returned from Layer2 to base Layer0.
Sorry for my google english.
Thank you!

Sequence tirggers function

is it possible to send a keypress after a sequence? for example for a dvorak user who wants to keep the qwerty CTRL functions (copy, cut, find...) locations like LCTL(KC_K) will result in LCTL(KC_C).

same thing needed in the Symbol Layer in the default map of the Ergodox_EZ, how can I activate the ctrl shortcuts on a layer who run over the needed keys (c,v,a,f)

i can't find this feature in the docs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.