aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-11-07 10:52:35 +0100
committerMarc André Tanner <mat@brain-dump.org>2015-11-07 14:25:25 +0100
commita725325a002413142bd258d92970976db87d8399 (patch)
tree2d72b3f190f95a5724754db7fe09e60e88d0509f
parent531a79020767081de9e75f1246172a405be45cc3 (diff)
downloadvis-a725325a002413142bd258d92970976db87d8399.tar.gz
vis-a725325a002413142bd258d92970976db87d8399.tar.xz
vis: shadow default register while in prompt mode
Editing operation in prompt mode should not affect the default register.
-rw-r--r--vis-modes.c13
-rw-r--r--vis.h1
2 files changed, 12 insertions, 2 deletions
diff --git a/vis-modes.c b/vis-modes.c
index 6e2e196..ea539f1 100644
--- 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
index 8dee46b..2834fbd 100644
--- 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 */
};