vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit 9bf08acce6c42d3daa366ad32b24ff2b3c068324 parent 45cf58872e527ef48ff708525799dff0d49512ad Author: Marc André Tanner <mat@brain-dump.org> Date: Sun, 9 Aug 2015 10:17:49 +0200 vis: fix :edit! command It now correctly re-edits the file (i.e reloads it from disk). Diffstat:
| M | editor.c | | | 11 | +++++++---- |
| M | vis.c | | | 5 | +++-- |
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/editor.c b/editor.c @@ -42,10 +42,13 @@ void editor_windows_arrange(Editor *ed, enum UiLayout layout) { } bool editor_window_reload(Win *win) { - /* can't reload unsaved file */ - if (!win->file->name) - return false; - File *file = file_new(win->editor, win->file->name); + const char *name = win->file->name; + if (!name) + return false; /* can't reload unsaved file */ + /* temporarily unset file name, otherwise file_new returns the same File */ + win->file->name = NULL; + File *file = file_new(win->editor, name); + win->file->name = name; if (!file) return false; file_free(win->editor, win->file); diff --git a/vis.c b/vis.c @@ -1812,8 +1812,9 @@ static bool cmd_edit(Filerange *range, enum CmdOpt opt, const char *argv[]) { return editor_window_reload(oldwin); if (!openfiles(&argv[1])) return false; - editor_window_close(oldwin); - return true; + if (vis->win != oldwin) + editor_window_close(oldwin); + return vis->win != oldwin; } static bool cmd_quit(Filerange *range, enum CmdOpt opt, const char *argv[]) {