Skip to content

Commit

Permalink
dont clear selection when not needed
Browse files Browse the repository at this point in the history
  • Loading branch information
juliekoubova committed Jun 30, 2024
1 parent 7b11129 commit fb85c3e
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 21 deletions.
39 changes: 27 additions & 12 deletions users/juliekoubova/vim/perform_action.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,28 @@ void vim_perform_action(vim_action_t action, vim_send_type_t type) {
break;
}

uint16_t code16[3] = {KC_NO, KC_NO, KC_NO};
vline_t next_vline = VLINE_DOWN_ASSUMED;
uint16_t code16[3] = {KC_NO, KC_NO, KC_NO};
vline_t next_vline = VLINE_DOWN_ASSUMED;
bool selection_cleared = false;

switch (action & VIM_MASK_ACTION) {
case VIM_ACTION_LEFT:
*code16 = (action & VIM_MOD_DELETE) ? KC_BSPC : KC_LEFT;
action &= ~VIM_MOD_DELETE;
if (action & VIM_MOD_DELETE) {
*code16 = KC_BSPC;
action &= ~VIM_MOD_DELETE;
selection_cleared = true;
} else {
*code16 = KC_LEFT;
}
break;
case VIM_ACTION_RIGHT:
*code16 = (action & VIM_MOD_DELETE) ? KC_DEL : KC_RIGHT;
action &= ~VIM_MOD_DELETE;
if (action & VIM_MOD_DELETE) {
*code16 = KC_DEL;
action &= ~VIM_MOD_DELETE;
selection_cleared = true;
} else {
*code16 = KC_RIGHT;
}
break;
case VIM_ACTION_DOWN:
*code16 = KC_DOWN;
Expand Down Expand Up @@ -134,17 +145,19 @@ void vim_perform_action(vim_action_t action, vim_send_type_t type) {
pending.keycode = KC_NO;
break;
case VIM_ACTION_PASTE:
*code16 = command_mods | KC_V;
pending.keycode = KC_NO;
*code16 = command_mods | KC_V;
pending.keycode = KC_NO;
selection_cleared = true;
break;
case VIM_ACTION_UNDO:
*code16 = command_mods | KC_Z;
pending.keycode = KC_NO;
break;
case VIM_ACTION_JOIN_LINE:
code16[0] = line_end;
code16[1] = KC_SPACE;
code16[2] = KC_DEL;
code16[0] = line_end;
code16[1] = KC_SPACE;
code16[2] = KC_DEL;
selection_cleared = true;
break;
default:
break;
Expand Down Expand Up @@ -220,6 +233,7 @@ void vim_perform_action(vim_action_t action, vim_send_type_t type) {

if (action & VIM_MOD_DELETE) {
vim_send(command_mods | KC_X, VIM_SEND_TAP);
selection_cleared = true;
} else if (action & VIM_MOD_YANK) {
vim_send(command_mods | KC_C, VIM_SEND_TAP);
}
Expand All @@ -229,8 +243,9 @@ void vim_perform_action(vim_action_t action, vim_send_type_t type) {
// get rid of the selection.
if (action == (VIM_ACTION_LINE | VIM_MOD_YANK)) {
vim_send(KC_LEFT, VIM_SEND_TAP);
selection_cleared = true;
}

VIM_DPRINTF("vim_perform_action %x\n", action);
vim_enter_mode(VIM_MODE_FROM_ACTION(action));
vim_enter_mode(VIM_MODE_FROM_ACTION(action), selection_cleared);
}
4 changes: 2 additions & 2 deletions users/juliekoubova/vim/vim.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ void vim_process_vim_key(bool pressed) {
if (vim_get_mode() == VIM_MODE_INSERT) {
VIM_DPRINT("Vim key pressed in insert mode\n");
vim_set_vim_key_state(VIM_KEY_TAP);
vim_enter_command_mode();
vim_enter_command_mode(false);
} else {
VIM_DPRINT("Vim key pressed in non-insert mode\n");
vim_set_vim_key_state(VIM_KEY_NONE);
Expand All @@ -67,7 +67,7 @@ void vim_process_vim_key(bool pressed) {
// in that case, we want to stay in the selected mode
break;
case VIM_KEY_TAP:
vim_enter_command_mode();
vim_enter_command_mode(false);
break;
case VIM_KEY_HELD:
vim_enter_insert_mode();
Expand Down
14 changes: 9 additions & 5 deletions users/juliekoubova/vim/vim_mode.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,15 @@ void vim_enter_insert_mode(void) {
register_mods(mods);
}

void vim_enter_command_mode(void) {
void vim_enter_command_mode(bool selection_cleared) {
switch (vim_mode) {
case VIM_MODE_COMMAND:
return;
case VIM_MODE_VISUAL:
case VIM_MODE_VLINE:
vim_cancel_os_selection();
if (!selection_cleared) {
vim_cancel_os_selection();
}
break;
default:
break;
Expand Down Expand Up @@ -91,7 +93,7 @@ void vim_enter_vline_mode(void) {
vim_set_mode(VIM_MODE_VLINE);
}

void vim_enter_mode(vim_mode_t mode) {
void vim_enter_mode(vim_mode_t mode, bool selection_cleared) {
VIM_DPRINTF("vim_enter_mode: %d\n", mode);
switch (mode) {
case VIM_MODE_INSERT:
Expand All @@ -104,7 +106,7 @@ void vim_enter_mode(vim_mode_t mode) {
vim_enter_vline_mode();
break;
case VIM_MODE_COMMAND:
vim_enter_command_mode();
vim_enter_command_mode(selection_cleared);
break;
}
}
Expand All @@ -130,5 +132,7 @@ vim_key_state_t vim_set_vim_key_state(vim_key_state_t key_state) {
}

void vim_dprintf_key(const char *prefix, uint16_t keycode, const keyrecord_t *record) {
VIM_DPRINTF("%s %s keycode=%x: mode=%d mods=%x vim_key=%x\n", prefix, record->event.pressed ? "pressed" : "released", keycode, vim_mode, vim_mods, vim_key_state);
VIM_DPRINTF("%s %s keycode=%x: mode=%d mods=%x vim_key=%x\n", prefix,
record->event.pressed ? "pressed" : "released", keycode, vim_mode, vim_mods,
vim_key_state);
}
5 changes: 3 additions & 2 deletions users/juliekoubova/vim/vim_mode.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/

#pragma once
#include <stdbool.h>
#include <stdint.h>
#include "quantum/quantum.h"

Expand All @@ -33,11 +34,11 @@ uint8_t vim_get_mods(void);
vim_key_state_t vim_get_vim_key_state(void);
vim_key_state_t vim_set_vim_key_state(vim_key_state_t);

void vim_enter_command_mode(void);
void vim_enter_command_mode(bool selection_cleared);
void vim_enter_insert_mode(void);
void vim_enter_visual_mode(void);
void vim_enter_vline_mode(void);
void vim_enter_mode(vim_mode_t mode);
void vim_enter_mode(vim_mode_t mode, bool selection_cleared);
vim_mode_t vim_get_mode(void);
void vim_mode_changed(vim_mode_t mode);

Expand Down

0 comments on commit fb85c3e

Please sign in to comment.