aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.def.h65
-rw-r--r--vis.h23
2 files changed, 83 insertions, 5 deletions
diff --git a/config.def.h b/config.def.h
index ec8e141..8e7970b 100644
--- a/config.def.h
+++ b/config.def.h
@@ -31,6 +31,7 @@ enum {
VIS_MODE_VISUAL,
VIS_MODE_READLINE,
VIS_MODE_PROMPT,
+ VIS_MODE_INSERT_REGISTER,
VIS_MODE_INSERT,
VIS_MODE_REPLACE,
};
@@ -672,6 +673,29 @@ static KeyBinding vis_registers[] = { /* {a-zA-Z0-9.%#:-"} */
{ { NONE('"'), NONE('a') }, reg, { .i = REG_a } },
{ { NONE('"'), NONE('b') }, reg, { .i = REG_b } },
{ { NONE('"'), NONE('c') }, reg, { .i = REG_c } },
+ { { NONE('"'), NONE('d') }, reg, { .i = REG_d } },
+ { { NONE('"'), NONE('e') }, reg, { .i = REG_e } },
+ { { NONE('"'), NONE('f') }, reg, { .i = REG_f } },
+ { { NONE('"'), NONE('g') }, reg, { .i = REG_g } },
+ { { NONE('"'), NONE('h') }, reg, { .i = REG_h } },
+ { { NONE('"'), NONE('i') }, reg, { .i = REG_i } },
+ { { NONE('"'), NONE('j') }, reg, { .i = REG_j } },
+ { { NONE('"'), NONE('k') }, reg, { .i = REG_k } },
+ { { NONE('"'), NONE('l') }, reg, { .i = REG_l } },
+ { { NONE('"'), NONE('m') }, reg, { .i = REG_m } },
+ { { NONE('"'), NONE('n') }, reg, { .i = REG_n } },
+ { { NONE('"'), NONE('o') }, reg, { .i = REG_o } },
+ { { NONE('"'), NONE('p') }, reg, { .i = REG_p } },
+ { { NONE('"'), NONE('q') }, reg, { .i = REG_q } },
+ { { NONE('"'), NONE('r') }, reg, { .i = REG_r } },
+ { { NONE('"'), NONE('s') }, reg, { .i = REG_s } },
+ { { NONE('"'), NONE('t') }, reg, { .i = REG_t } },
+ { { NONE('"'), NONE('u') }, reg, { .i = REG_u } },
+ { { NONE('"'), NONE('v') }, reg, { .i = REG_v } },
+ { { NONE('"'), NONE('w') }, reg, { .i = REG_w } },
+ { { NONE('"'), NONE('x') }, reg, { .i = REG_x } },
+ { { NONE('"'), NONE('y') }, reg, { .i = REG_y } },
+ { { NONE('"'), NONE('z') }, reg, { .i = REG_z } },
{ /* empty last element, array terminator */ },
};
@@ -762,6 +786,36 @@ static void vis_prompt_leave(Mode *new) {
vis_prompt_hide(vis);
}
+static KeyBinding vis_insert_register_mode[] = {
+ { { CONTROL('R'), NONE('a') }, insert_register, { .i = REG_a } },
+ { { CONTROL('R'), NONE('b') }, insert_register, { .i = REG_b } },
+ { { CONTROL('R'), NONE('c') }, insert_register, { .i = REG_c } },
+ { { CONTROL('R'), NONE('d') }, insert_register, { .i = REG_d } },
+ { { CONTROL('R'), NONE('e') }, insert_register, { .i = REG_e } },
+ { { CONTROL('R'), NONE('f') }, insert_register, { .i = REG_f } },
+ { { CONTROL('R'), NONE('g') }, insert_register, { .i = REG_g } },
+ { { CONTROL('R'), NONE('h') }, insert_register, { .i = REG_h } },
+ { { CONTROL('R'), NONE('i') }, insert_register, { .i = REG_i } },
+ { { CONTROL('R'), NONE('j') }, insert_register, { .i = REG_j } },
+ { { CONTROL('R'), NONE('k') }, insert_register, { .i = REG_k } },
+ { { CONTROL('R'), NONE('l') }, insert_register, { .i = REG_l } },
+ { { CONTROL('R'), NONE('m') }, insert_register, { .i = REG_m } },
+ { { CONTROL('R'), NONE('n') }, insert_register, { .i = REG_n } },
+ { { CONTROL('R'), NONE('o') }, insert_register, { .i = REG_o } },
+ { { CONTROL('R'), NONE('p') }, insert_register, { .i = REG_p } },
+ { { CONTROL('R'), NONE('q') }, insert_register, { .i = REG_q } },
+ { { CONTROL('R'), NONE('r') }, insert_register, { .i = REG_r } },
+ { { CONTROL('R'), NONE('s') }, insert_register, { .i = REG_s } },
+ { { CONTROL('R'), NONE('t') }, insert_register, { .i = REG_t } },
+ { { CONTROL('R'), NONE('u') }, insert_register, { .i = REG_u } },
+ { { CONTROL('R'), NONE('v') }, insert_register, { .i = REG_v } },
+ { { CONTROL('R'), NONE('w') }, insert_register, { .i = REG_w } },
+ { { CONTROL('R'), NONE('x') }, insert_register, { .i = REG_x } },
+ { { CONTROL('R'), NONE('y') }, insert_register, { .i = REG_y } },
+ { { CONTROL('R'), NONE('z') }, insert_register, { .i = REG_z } },
+ { /* empty last element, array terminator */ },
+};
+
static KeyBinding vis_insert_mode[] = {
{ { CONTROL('L') }, switchmode, { .i = VIS_MODE_NORMAL } },
{ { CONTROL('[') }, switchmode, { .i = VIS_MODE_NORMAL } },
@@ -769,9 +823,6 @@ static KeyBinding vis_insert_mode[] = {
{ { CONTROL('J') }, insert_newline, { NULL } },
{ { CONTROL('M') }, insert_newline, { NULL } },
{ { CONTROL('O') }, switchmode, { .i = VIS_MODE_OPERATOR } },
- { { CONTROL('R'), NONE('a') }, insert_register, { .i = REG_a } },
- { { CONTROL('R'), NONE('b') }, insert_register, { .i = REG_b } },
- { { CONTROL('R'), NONE('c') }, insert_register, { .i = REG_c } },
{ { CONTROL('V') }, insert_verbatim, { NULL } },
{ /* empty last element, array terminator */ },
};
@@ -866,9 +917,15 @@ static Mode vis_modes[] = {
.input = vis_insert_input,
.leave = vis_prompt_leave,
},
+ [VIS_MODE_INSERT_REGISTER] = {
+ .name = "INSERT-REGISTER",
+ .common_prefix = true,
+ .parent = &vis_modes[VIS_MODE_READLINE],
+ .bindings = vis_insert_register_mode,
+ },
[VIS_MODE_INSERT] = {
.name = "INSERT",
- .parent = &vis_modes[VIS_MODE_READLINE],
+ .parent = &vis_modes[VIS_MODE_INSERT_REGISTER],
.bindings = vis_insert_mode,
.input = vis_insert_input,
.idle = snapshot,
diff --git a/vis.h b/vis.h
index 1dc7f7d..6773666 100644
--- a/vis.h
+++ b/vis.h
@@ -34,7 +34,28 @@ enum Reg {
REG_a,
REG_b,
REG_c,
- // ...
+ REG_d,
+ REG_e,
+ REG_f,
+ REG_g,
+ REG_h,
+ REG_i,
+ REG_j,
+ REG_k,
+ REG_l,
+ REG_m,
+ REG_n,
+ REG_o,
+ REG_p,
+ REG_q,
+ REG_r,
+ REG_s,
+ REG_t,
+ REG_u,
+ REG_v,
+ REG_w,
+ REG_x,
+ REG_y,
REG_z,
REG_DEFAULT,
REG_LAST,