vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

commit de77a87b0fd566c5481ec7a95c58635c602b1366
parent c2b46190e2d7c25e7084dbbbe56057c345ef7c18
Author: Marc André Tanner <mat@brain-dump.org>
Date:   Sat, 16 Jan 2016 15:00:09 +0100

vis: move selected prompt entry to end of the file

Close #70

Diffstat:
Mvis-cmds.c | 2+-
Mvis-prompt.c | 8+++++++-
2 files changed, 8 insertions(+), 2 deletions(-)

diff --git 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 @@ -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];