aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxton <cmdpix@mac.com>2018-05-13 21:02:06 -0700
committerDrashna Jaelre <drashna@live.com>2018-05-13 21:02:06 -0700
commit47f03bd5a4195c44fe7d6fbca0ba8b66cd3da0fa (patch)
treeabecbaa7f3030979f198c3dfd35e9bc5569ac13e
parent70e60b0a0cbcc000b0192cec8d32a2745a0b25fa (diff)
downloadqmk_firmware-47f03bd5a4195c44fe7d6fbca0ba8b66cd3da0fa.tar.gz
qmk_firmware-47f03bd5a4195c44fe7d6fbca0ba8b66cd3da0fa.zip
Xton has a dz60 (#2952)
* FORK! * WIP - just how i like it * empty * more movement * mouse keys * more vimminess * append/insert shift * WIP - vim macros * blocked out layer below in cmd mode. also, about to restart my cmd approach. * WIP - new vim layer ripoff of the ergodox one, but rewritten as a state machine. * debugged some, got key repeat working * moooar coverage * moooar coverage * regular vis mode * basically done with basics. * some refactoring - common movement sequences into helper function - added some rgb controls * modkey passthru feature * stdized on cmd-left/right instead of ctrl-a/e sadly. as there's no reliable shift-ctrl-e * indicator lights * moved vim layer into userspace * cleaned up some yanking edge cases * docs and some tweaks to layerescapes * updated/added license strings * updated comments * moved config changes to keymap * spurious changes removed * cleanup pass, HT drashna for suggestions - used _keymap() pattern to better modularize event processing in userspace - made some static things static - removed unused function - improved reset. * dz60 started. keymaps done. * bugfixes: missing state change in d-, lspace should toggle vim mode. * Caps lock indicator -> vim indicator. And adjusted mousekey settings. * don't actually need the second move trigger and it makes typing less responsive. * some oppurtunistic bugfixing from my other keyboard (sorry) * added readme for my dz60 keymap. * bugfixing and comments updated (niu_mini) * cleanup as suggested from review
-rw-r--r--keyboards/dz60/keymaps/xtonhasvim/config.h17
-rw-r--r--keyboards/dz60/keymaps/xtonhasvim/keymap.c92
-rw-r--r--keyboards/dz60/keymaps/xtonhasvim/readme.md10
-rw-r--r--keyboards/niu_mini/keymaps/xtonhasvim/keymap.c24
-rw-r--r--users/xtonhasvim/xtonhasvim.c9
5 files changed, 140 insertions, 12 deletions
diff --git a/keyboards/dz60/keymaps/xtonhasvim/config.h b/keyboards/dz60/keymaps/xtonhasvim/config.h
new file mode 100644
index 000000000..b1f549e0b
--- /dev/null
+++ b/keyboards/dz60/keymaps/xtonhasvim/config.h
@@ -0,0 +1,17 @@
1#ifndef CONFIG_KEYMAP_H
2#define CONFIG_KEYMAP_H
3
4#include "../../config.h"
5
6// help for fast typist+dual function keys?
7#define PERMISSIVE_HOLD
8
9/* speed up mousekeys a bit */
10#define MOUSEKEY_DELAY 50
11#define MOUSEKEY_INTERVAL 20
12#define MOUSEKEY_MAX_SPEED 8
13#define MOUSEKEY_TIME_TO_MAX 30
14#define MOUSEKEY_WHEEL_MAX_SPEED 8
15#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
16
17#endif
diff --git a/keyboards/dz60/keymaps/xtonhasvim/keymap.c b/keyboards/dz60/keymaps/xtonhasvim/keymap.c
new file mode 100644
index 000000000..8a7419214
--- /dev/null
+++ b/keyboards/dz60/keymaps/xtonhasvim/keymap.c
@@ -0,0 +1,92 @@
1#include QMK_KEYBOARD_H
2#include "xtonhasvim.h"
3
4enum layers {
5 _QWERTY,
6 _FUN,
7 _MOVE,
8 _MOUSE
9};
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12
13 [_QWERTY] = LAYOUT(
14 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC,
15 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
16 LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,KC_SCLN), KC_QUOT, KC_ENT,
17 KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
18 KC_LCTL, KC_LALT, KC_LGUI, VIM_START, TG(_MOUSE), KC_SPC, KC_RGUI, KC_RALT, X_____X, KC_RCTL, MO(_FUN)),
19
20 [_FUN] = LAYOUT(
21 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
22 _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, RESET,
23 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
24 _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
25 TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
26
27 [_MOVE] = LAYOUT(
28 X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
29 X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X, X_____X, X_____X,
30 X_____X, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, X_____X, X_____X, X_____X,
31 _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
32 TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
33
34
35 [_MOUSE] = LAYOUT(
36 X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
37 X_____X, X_____X, X_____X, KC_MS_UP, X_____X, X_____X, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, X_____X, X_____X, X_____X, X_____X,
38 X_____X, X_____X,KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, X_____X, X_____X, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, X_____X, X_____X, X_____X,
39 _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
40 TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
41
42 [_EDIT] = LAYOUT(
43 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
46 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
47 TO(_QWERTY), _______, _______, VIM_START, _______, _______, _______, _______, _______, _______, _______),
48
49 [_CMD] = LAYOUT(
50 X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
51 X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X, X_____X, X_____X,
52 VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X, X_____X,
53 VIM_SHIFT, X_____X, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT,X_____X,
54 TO(_QWERTY), _______, _______, TO(_QWERTY), X_____X, X_____X, _______, _______, _______, _______, _______),
55
56};
57
58#define LED_BIT 1 << 2
59#define LED_MASK ~(1 << 2)
60
61void user_led_on(void) {
62 DDRB |= LED_BIT;
63 PORTB &= LED_MASK;
64}
65
66void user_led_off(void) {
67 DDRB &= ~LED_BIT;
68 PORTB &= LED_MASK;
69}
70
71void matrix_init_user(void) {
72 user_led_off();
73}
74
75uint32_t layer_state_set_user(uint32_t state) {
76 static uint32_t last_state = 0;
77
78 if(last_state != state) {
79 switch (biton32(state)) {
80 case _CMD:
81 user_led_on();
82 break;
83 default:
84 user_led_off();
85 break;
86 }
87 last_state = state;
88 }
89 return state;
90}
91
92
diff --git a/keyboards/dz60/keymaps/xtonhasvim/readme.md b/keyboards/dz60/keymaps/xtonhasvim/readme.md
new file mode 100644
index 000000000..5d0e38a3e
--- /dev/null
+++ b/keyboards/dz60/keymaps/xtonhasvim/readme.md
@@ -0,0 +1,10 @@
1# Xton has a DZ60 and it's Vimtastic!
2
3Mine has a split spacebar, no arrowkeys and an opaque case. Changes from the default layout:
4
5* Vim mode toggled by hitting left spacebar (see `users/xtonhasvim`). Reusing the capslock LED to indicate VIM is on.
6* Momentary directional control by holding down `;`.
7* Mousekeys toggled with middle space button.
8* Escape is dual-function with control (which replaces capslock AS IT SHOULD BE).
9* Bottom left key is the "halp my kb doesn't work" key that always dumps you back to QWERTY.
10
diff --git a/keyboards/niu_mini/keymaps/xtonhasvim/keymap.c b/keyboards/niu_mini/keymaps/xtonhasvim/keymap.c
index 6c17df52a..6a23c0a2c 100644
--- a/keyboards/niu_mini/keymaps/xtonhasvim/keymap.c
+++ b/keyboards/niu_mini/keymaps/xtonhasvim/keymap.c
@@ -65,16 +65,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
65 * |------+------+------+------+------+-------------+------+------+------+------+------| 65 * |------+------+------+------+------+-------------+------+------+------+------+------|
66 * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | | | 66 * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | | |
67 * |------+------+------+------+------+------|------+------+------+------+------+------| 67 * |------+------+------+------+------+------|------+------+------+------+------+------|
68 * | | F7 | F8 | F9 | F10 | F11 | F12 | | | Home | End | | 68 * | | F7 | F8 | F9 | F10 | F11 | F12 | | Next | Vol- | Vol+ | Play |
69 * |------+------+------+------+------+------+------+------+------+------+------+------| 69 * |------+------+------+------+------+------+------+------+------+------+------+------|
70 * | | | | | | | | Next | Vol- | Vol+ | Play | 70 * | | Bail | | | | | | | | Bail | |
71 * `-----------------------------------------------------------------------------------' 71 * `-----------------------------------------------------------------------------------'
72 */ 72 */
73[_LOWER] = { 73[_LOWER] = {
74 {KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSPC}, 74 {KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSPC},
75 {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE}, 75 {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE},
76 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_HOME, KC_END, _______}, 76 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, X_____X, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY},
77 {_______, TO(_QWERTY), _______, _______, _______, _______, _______, OSL(_ADJUST), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} 77 {X_____X, TO(_QWERTY), _______, _______, _______, KC_BSPC, KC_BSPC, OSL(_ADJUST), _______, _______, TO(_QWERTY), X_____X}
78}, 78},
79 79
80/* Raise 80/* Raise
@@ -83,16 +83,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
83 * |------+------+------+------+------+-------------+------+------+------+------+------| 83 * |------+------+------+------+------+-------------+------+------+------+------+------|
84 * | Del | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | \ | 84 * | Del | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | \ |
85 * |------+------+------+------+------+------|------+------+------+------+------+------| 85 * |------+------+------+------+------+------|------+------+------+------+------+------|
86 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | | 86 * | | F7 | F8 | F9 | F10 | F11 | F12 | | Next | Vol- | Vol+ | Play |
87 * |------+------+------+------+------+------+------+------+------+------+------+------| 87 * |------+------+------+------+------+------+------+------+------+------+------+------|
88 * | | | | | | | | Next | Vol- | Vol+ | Play | 88 * | | Bail | | | | | | | | Bail | |
89 * `-----------------------------------------------------------------------------------' 89 * `-----------------------------------------------------------------------------------'
90 */ 90 */
91[_RAISE] = { 91[_RAISE] = {
92 {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSPC}, 92 {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSPC},
93 {KC_DEL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS}, 93 {KC_DEL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS},
94 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PGUP, KC_PGDN, _______}, 94 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY},
95 {_______, TO(_QWERTY), _______, _______, OSL(_ADJUST), _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} 95 {X_____X, TO(_QWERTY), _______, _______, OSL(_ADJUST), X_____X, X_____X, _______, _______, _______, TO(_QWERTY), X_____X}
96}, 96},
97 97
98 98
@@ -104,14 +104,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
104 * |--------+------+------+------+------+------|------+------+------+------+------+------| 104 * |--------+------+------+------+------+------|------+------+------+------+------+------|
105 * |RGBMode+|Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | |Lite- | 105 * |RGBMode+|Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | |Lite- |
106 * |--------+------+------+------+------+------+------+------+------+------+------+------| 106 * |--------+------+------+------+------+------+------+------+------+------+------+------|
107 * | RGB | | | | | | | | | | | 107 * | RGB | Bail | | | | | | | | Bail | |
108 * `-------------------------------------------------------------------------------------' 108 * `-------------------------------------------------------------------------------------'
109 */ 109 */
110[_ADJUST] = { 110[_ADJUST] = {
111 {RGB_MODE_PLAIN, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL }, 111 {RGB_MODE_PLAIN, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL },
112 {RGB_MODE_REVERSE, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, RGB_VAI}, 112 {RGB_MODE_REVERSE, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, RGB_VAI},
113 {RGB_MODE_FORWARD, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, RGB_VAD}, 113 {RGB_MODE_FORWARD, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, RGB_VAD},
114 {RGB_TOG, TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} 114 {RGB_TOG, TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY), X_____X}
115}, 115},
116 116
117 117
@@ -121,7 +121,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
121 {TO(_QWERTY), X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X}, 121 {TO(_QWERTY), X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X},
122 {_______, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, X_____X, X_____X}, 122 {_______, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, X_____X, X_____X},
123 {_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______}, 123 {_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______},
124 {X_____X, TO(_QWERTY), _______, _______, _______, X_____X, X_____X, _______, _______, _______, TO(_QWERTY), _______} 124 {X_____X, TO(_QWERTY), _______, _______, _______, X_____X, X_____X, _______, _______, _______, TO(_QWERTY), X_____X}
125}, 125},
126 126
127/* mouse layer 127/* mouse layer
@@ -130,7 +130,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
130 {TO(_QWERTY), X_____X, X_____X, KC_MS_UP, X_____X, X_____X, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, X_____X, X_____X }, 130 {TO(_QWERTY), X_____X, X_____X, KC_MS_UP, X_____X, X_____X, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, X_____X, X_____X },
131 {_______, X_____X, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, X_____X, X_____X, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, X_____X, X_____X}, 131 {_______, X_____X, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, X_____X, X_____X, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, X_____X, X_____X},
132 {_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______}, 132 {_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______},
133 {_______, TO(_QWERTY), _______, _______, _______, X_____X, X_____X, _______, _______, _______, TO(_QWERTY), _______} 133 {_______, TO(_QWERTY), _______, _______, _______, X_____X, X_____X, _______, _______, _______, TO(_QWERTY), X_____X}
134}, 134},
135 135
136/* vim edit mode. just has an escape -> _CMD key */ 136/* vim edit mode. just has an escape -> _CMD key */
diff --git a/users/xtonhasvim/xtonhasvim.c b/users/xtonhasvim/xtonhasvim.c
index 0ec331b68..a2ff2fa31 100644
--- a/users/xtonhasvim/xtonhasvim.c
+++ b/users/xtonhasvim/xtonhasvim.c
@@ -384,6 +384,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
384 simple_movement(keycode); 384 simple_movement(keycode);
385 CMD(KC_X); 385 CMD(KC_X);
386 yank_was_lines = false; 386 yank_was_lines = false;
387 vstate = VIM_START;
387 break; 388 break;
388 case VIM_D: 389 case VIM_D:
389 CMD(KC_LEFT); 390 CMD(KC_LEFT);
@@ -467,6 +468,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
467 SHIFT(KC_LEFT); // select to start of next word 468 SHIFT(KC_LEFT); // select to start of next word
468 RELEASE(KC_LALT); 469 RELEASE(KC_LALT);
469 break; 470 break;
471 case VIM_P:
472 CMD(KC_V);
473 vstate = VIM_START;
474 break;
470 case VIM_Y: 475 case VIM_Y:
471 CMD(KC_C); 476 CMD(KC_C);
472 TAP(KC_RIGHT); 477 TAP(KC_RIGHT);
@@ -525,6 +530,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
525 TAP(KC_RIGHT); 530 TAP(KC_RIGHT);
526 vstate = VIM_START; 531 vstate = VIM_START;
527 break; 532 break;
533 case VIM_P:
534 CMD(KC_V);
535 vstate = VIM_START;
536 break;
528 case VIM_V: 537 case VIM_V:
529 case VIM_ESC: 538 case VIM_ESC:
530 TAP(KC_RIGHT); 539 TAP(KC_RIGHT);