diff options
Diffstat (limited to 'users/xtonhasvim/xtonhasvim.c')
-rw-r--r-- | users/xtonhasvim/xtonhasvim.c | 72 |
1 files changed, 50 insertions, 22 deletions
diff --git a/users/xtonhasvim/xtonhasvim.c b/users/xtonhasvim/xtonhasvim.c index a2ff2fa31c..5f6701830f 100644 --- a/users/xtonhasvim/xtonhasvim.c +++ b/users/xtonhasvim/xtonhasvim.c @@ -15,6 +15,7 @@ */ #include "xtonhasvim.h" +#include "fancylighting.h" /************************************ * helper foo @@ -53,13 +54,13 @@ static void ALT(uint16_t keycode) { } -static uint16_t vstate = VIM_START; +uint16_t vstate = VIM_START; static bool yank_was_lines = false; static bool SHIFTED = false; static uint32_t mod_override_layer_state = 0; static uint16_t mod_override_triggering_key = 0; -static void edit(void) { vstate = VIM_START; layer_on(_EDIT); layer_off(_CMD); } +static void edit(void) { vstate = VIM_START; layer_clear(); } #define EDIT edit() @@ -102,25 +103,54 @@ static void simple_movement(uint16_t keycode) { } } +static void comma_period(uint16_t keycode) { + switch (keycode) { + case VIM_COMMA: + if (SHIFTED) { + // indent + CMD(KC_LBRACKET); + } else { + // toggle comment + CMD(KC_SLASH); + } + break; + case VIM_PERIOD: + if (SHIFTED) { + // outdent + CMD(KC_RBRACKET); + } + break; + } +} + __attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; } -#define PASS_THRU process_record_keymap(keycode, record) - bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if(record->event.pressed && layer_state_is(_CMD) && IS_MOD(keycode)) { + /* keymap gets first whack */ + if(!process_record_keymap(keycode, record)) return false; + + /****** FIREY_RETURN *****/ + if(record->event.pressed && keycode == FIREY_RETURN) { + start_firey_return(); + TAP(KC_ENT); + } + + /****** mod passthru *****/ + if(record->event.pressed && layer_state_is(vim_cmd_layer()) && (IS_MOD(keycode) || keycode == LSFT(KC_LALT))) { mod_override_layer_state = layer_state; mod_override_triggering_key = keycode; + // TODO: change this to track key location instead layer_clear(); - return PASS_THRU; // let the event fall through... + return true; // let the event fall through... } if(mod_override_layer_state && !record->event.pressed && keycode == mod_override_triggering_key) { layer_state_set(mod_override_layer_state); mod_override_layer_state = 0; mod_override_triggering_key = 0; - return PASS_THRU; + return true; } if (VIM_START <= keycode && keycode <= VIM_ESC) { @@ -132,7 +162,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { if(keycode == VIM_START) { // entry from anywhere - layer_on(_CMD); + layer_on(vim_cmd_layer()); vstate = VIM_START; // reset state @@ -176,7 +206,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case VIM_D: if(SHIFTED) { - TAP(KC_K); + CTRL(KC_K); } else { vstate = VIM_D; } @@ -300,19 +330,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } break; case VIM_COMMA: - if(SHIFTED) { - // indent - CMD(KC_LBRACKET); - } else { - // toggle comment - CMD(KC_SLASH); - } - break; case VIM_PERIOD: - if(SHIFTED) { - // outdent - CMD(KC_RBRACKET); - } + comma_period(keycode); break; } break; @@ -483,6 +502,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { TAP(KC_RIGHT); vstate = VIM_START; break; + case VIM_COMMA: + case VIM_PERIOD: + comma_period(keycode); + break; default: // do nothing break; @@ -539,6 +562,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { TAP(KC_RIGHT); vstate = VIM_START; break; + case VIM_COMMA: + case VIM_PERIOD: + comma_period(keycode); + break; default: // do nothing break; @@ -610,6 +637,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; } else { - return PASS_THRU; + return true; } } + |