aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/main.c b/main.c
index 80724d9..de179ad 100644
--- a/main.c
+++ b/main.c
@@ -32,6 +32,8 @@ static const char *macro_record(Vis*, const char *keys, const Arg *arg);
static const char *macro_replay(Vis*, const char *keys, const Arg *arg);
/* temporarily suspend the editor and return to the shell, type 'fg' to get back */
static const char *suspend(Vis*, const char *keys, const Arg *arg);
+/* reset count if set, otherwise remove all but the primary selection */
+static const char *normalmode_escape(Vis*, const char *keys, const Arg *arg);
/* switch to mode indicated by arg->i */
static const char *switchmode(Vis*, const char *keys, const Arg *arg);
/* switch to insert mode after performing movement indicated by arg->i */
@@ -200,6 +202,7 @@ enum {
VIS_ACTION_WINDOW_HALFPAGE_UP,
VIS_ACTION_WINDOW_HALFPAGE_DOWN,
VIS_ACTION_MODE_NORMAL,
+ VIS_ACTION_MODE_NORMAL_ESCAPE,
VIS_ACTION_MODE_VISUAL,
VIS_ACTION_MODE_VISUAL_LINE,
VIS_ACTION_MODE_INSERT,
@@ -600,6 +603,11 @@ static const KeyAction vis_action[] = {
VIS_HELP("Enter normal mode")
switchmode, { .i = VIS_MODE_NORMAL }
},
+ [VIS_ACTION_MODE_NORMAL_ESCAPE] = {
+ "vis-mode-normal-escape",
+ VIS_HELP("Reset count or remove all non-primary selections")
+ normalmode_escape,
+ },
[VIS_ACTION_MODE_VISUAL] = {
"vis-mode-visual-charwise",
VIS_HELP("Enter characterwise visual mode")
@@ -2228,6 +2236,14 @@ static const char *join(Vis *vis, const char *keys, const Arg *arg) {
return keys;
}
+static const char *normalmode_escape(Vis *vis, const char *keys, const Arg *arg) {
+ if (vis_count_get(vis) == VIS_COUNT_UNKNOWN)
+ selections_clear(vis, keys, arg);
+ else
+ vis_count_set(vis, VIS_COUNT_UNKNOWN);
+ return keys;
+}
+
static const char *switchmode(Vis *vis, const char *keys, const Arg *arg) {
vis_mode_switch(vis, arg->i);
return keys;