aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vis-cmds.c2
-rw-r--r--vis-prompt.c8
2 files changed, 8 insertions, 2 deletions
diff --git a/vis-cmds.c b/vis-cmds.c
index c6a1009..748b5c9 100644
--- a/vis-cmds.c
+++ b/vis-cmds.c
@@ -1158,7 +1158,7 @@ bool vis_cmd(Vis *vis, const char *cmdline) {
char *s = param;
const char *argv[32] = { name };
for (int i = 1; i < LENGTH(argv); i++) {
- while (s && *s && *s == ' ')
+ while (s && isspace((unsigned char)*s))
s++;
if (s && !*s)
s = NULL;
diff --git a/vis-prompt.c b/vis-prompt.c
index ad9c9d5..3b8717c 100644
--- a/vis-prompt.c
+++ b/vis-prompt.c
@@ -52,7 +52,7 @@ static const char *prompt_enter(Vis *vis, const char *keys, const Arg *arg) {
Filerange range = view_selection_get(view);
if (!text_range_valid(&range))
- range = text_object_line_inner(txt, view_cursor_get(view));
+ range = text_object_line(txt, view_cursor_get(view));
if (text_range_valid(&range))
cmd = text_bytes_alloc0(txt, range.start, text_range_size(&range));
@@ -64,9 +64,15 @@ static const char *prompt_enter(Vis *vis, const char *keys, const Arg *arg) {
return keys;
}
+ bool lastline = (range.end == text_size(txt));
+
prompt_restore(prompt);
if (vis_prompt_cmd(vis, cmd)) {
prompt_hide(prompt);
+ if (!lastline) {
+ text_delete(txt, range.start, text_range_size(&range));
+ text_insert(txt, text_size(txt), cmd, strlen(cmd));
+ }
} else {
vis->win = prompt;
vis->mode = &vis_modes[VIS_MODE_INSERT];