~ruther/qmk_firmware

b70248fa2144d297504eedbc80a76dfdc40d9f1f — Jack Humbert 9 years ago c4ea06d
addresses #369
2 files changed, 24 insertions(+), 8 deletions(-)

M README.md
M quantum/quantum.c
M README.md => README.md +5 -0
@@ 134,6 134,11 @@ Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) 

To use it, use `KC_LSPO` (Left Shift, Parens Open) for your left Shift on your keymap, and `KC_RSPC` (Right Shift, Parens Close) for your right Shift. 

It's defaulted to work on US keyboards, but if your layout uses different keys for parenthesis, you can define those in your keymap like this:

    #define LSPO_KEY KC_9
    #define RSPC_KEY KC_0

The only other thing you're going to want to do is create a `makefile.mk` in your keymap directory and set the following:

```

M quantum/quantum.c => quantum/quantum.c +19 -8
@@ 70,6 70,15 @@ uint8_t chord_key_down = 0;
  static uint8_t input_mode;
#endif

// Shift / paren setup

#ifndef LSPO_KEY
  #define LSPO_KEY KC_9
#endif
#ifndef RSPC_KEY
  #define RSPC_KEY KC_0
#endif

static bool shift_interrupted[2] = {0, 0};

bool keys_chord(uint8_t keys[]) {


@@ 431,18 440,20 @@ bool process_record_quantum(keyrecord_t *record) {

#endif

  // Shift / paren setup

  switch(keycode) {
    case KC_LSPO: {
                    if (record->event.pressed) {
                      shift_interrupted[0] = false;
                      register_mods(MOD_BIT(KC_LSFT));
                      register_mods(MOD_LSFT);
                    }
                    else {
                      if (!shift_interrupted[0]) {
                        register_code(KC_9);
                        unregister_code(KC_9);
                        register_code(LSPO_KEY);
                        unregister_code(LSPO_KEY);
                      }
                      unregister_mods(MOD_BIT(KC_LSFT));
                      unregister_mods(MOD_LSFT);
                    }
                    return false;
                    break;


@@ 451,14 462,14 @@ bool process_record_quantum(keyrecord_t *record) {
    case KC_RSPC: {
                    if (record->event.pressed) {
                      shift_interrupted[1] = false;
                      register_mods(MOD_BIT(KC_RSFT));
                      register_mods(MOD_RSFT);
                    }
                    else {
                      if (!shift_interrupted[1]) {
                        register_code(KC_0);
                        unregister_code(KC_0);
                        register_code(RSPC_KEY);
                        unregister_code(RSPC_KEY);
                      }
                      unregister_mods(MOD_BIT(KC_RSFT));
                      unregister_mods(MOD_RSFT);
                    }
                    return false;
                    break;