vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit 22790545120bcc3f6343851f0277cc7b8b5caf6f parent e6f3873fe4653904907a34b603311b42611c1eb7 Author: Marc André Tanner <mat@brain-dump.org> Date: Sat, 7 Nov 2015 10:52:35 +0100 vis: shadow default register while in prompt mode Editing operation in prompt mode should not affect the default register. Diffstat:
| M | vis-modes.c | | | 13 | +++++++++++-- |
| M | vis.h | | | 1 | + |
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/vis-modes.c b/vis-modes.c @@ -100,13 +100,22 @@ static void vis_mode_prompt_input(Vis *vis, const char *str, size_t len) { } static void vis_mode_prompt_enter(Vis *vis, Mode *old) { - if (old->isuser && old != &vis_modes[VIS_MODE_PROMPT]) + if (old->isuser && old != &vis_modes[VIS_MODE_PROMPT]) { vis->mode_before_prompt = old; + /* prompt manipulations e.g. <Backspace> should not affect default register */ + Register tmp = vis->registers[VIS_REG_PROMPT]; + vis->registers[VIS_REG_PROMPT] = vis->registers[VIS_REG_DEFAULT]; + vis->registers[VIS_REG_DEFAULT] = tmp; + } } static void vis_mode_prompt_leave(Vis *vis, Mode *new) { - if (new->isuser) + if (new->isuser) { vis_prompt_hide(vis); + Register tmp = vis->registers[VIS_REG_DEFAULT]; + vis->registers[VIS_REG_DEFAULT] = vis->registers[VIS_REG_PROMPT]; + vis->registers[VIS_REG_PROMPT] = tmp; + } } static void vis_mode_insert_enter(Vis *vis, Mode *old) { diff --git a/vis.h b/vis.h @@ -350,6 +350,7 @@ enum VisRegister { VIS_REG_u, VIS_REG_v, VIS_REG_w, VIS_REG_x, VIS_REG_y, VIS_REG_z, VIS_REG_DEFAULT, /* used when no other register is specified */ + VIS_REG_PROMPT, /* internal register which shadows DEFAULT in PROMPT mode */ VIS_REG_INVALID, /* has to be the last enum member */ };