From d58c355d2fff2cf78af1ac1cdd4a6299b16aba43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Sat, 16 Jan 2016 15:00:09 +0100 Subject: vis: move selected prompt entry to end of the file Close #70 --- vis-cmds.c | 2 +- vis-prompt.c | 8 +++++++- 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]; -- cgit v1.2.3