vis

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

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

commit 1f5f86be2f97c010beb9bc3b87d7576138fc664f
parent 9b573de364a3d38030201a8d32ec2da33cb332b9
Author: Marc André Tanner <mat@brain-dump.org>
Date:   Wed,  8 Feb 2017 12:09:21 +0100

vis: make sure prompt starts newline terminated

Diffstat:
Mvis-prompt.c | 15++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/vis-prompt.c b/vis-prompt.c @@ -26,13 +26,14 @@ static void prompt_hide(Win *win) { size_t size = text_size(txt); /* make sure that file is new line terminated */ char lastchar = '\0'; - if (size > 1 && text_byte_get(txt, size-1, &lastchar) && lastchar != '\n') + if (size >= 1 && text_byte_get(txt, size-1, &lastchar) && lastchar != '\n') text_insert(txt, size, "\n", 1); /* remove empty entries */ - Filerange line = text_object_line(txt, size); - size_t line_size = text_range_size(&line); - if (line_size <= 2 && (lastchar == ':' || lastchar == '/' || lastchar == '?')) - text_delete(txt, line.start, line_size); + Filerange line_range = text_object_line(txt, text_size(txt)-1); + char *line = text_bytes_alloc0(txt, line_range.start, text_range_size(&line_range)); + if (line && (line[0] == '\n' || (strchr(":/?", line[0]) && (line[1] == '\n' || line[1] == '\0')))) + text_delete_range(txt, &line_range); + free(line); vis_window_close(win); } @@ -162,9 +163,9 @@ void vis_prompt_show(Vis *vis, const char *title) { if (vis->mode->visual) window_selection_save(active); Text *txt = prompt->file->text; - text_insert(txt, text_size(txt), title, strlen(title)); + text_appendf(txt, "%s\n", title); Cursor *cursor = view_cursors_primary_get(prompt->view); - view_cursors_scroll_to(cursor, text_size(txt)); + view_cursors_scroll_to(cursor, text_size(txt)-1); prompt->parent = active; prompt->parent_mode = vis->mode; vis_window_mode_map(prompt, VIS_MODE_NORMAL, true, "<Enter>", &prompt_enter_binding);