diff options
| -rw-r--r-- | vis-lua.c | 6 | ||||
| -rw-r--r-- | vis.c | 12 | ||||
| -rw-r--r-- | vis.h | 2 |
3 files changed, 20 insertions, 0 deletions
@@ -2019,6 +2019,12 @@ static int window_newindex(lua_State *L) { } lua_pop(L, 1); return ret; + } else if (strcmp(key, "file") == 0 && lua_isstring(L, 3)) { + const char* filename = lua_tostring(L, 3); + if (!vis_window_change_file(win, filename)) { + return luaL_argerror(L, 3, "failed to open"); + } + return 0; } } @@ -505,6 +505,18 @@ bool vis_window_reload(Win *win) { return true; } +bool vis_window_change_file(Win *win, const char* filename) { + File *file = file_new(win->vis, filename); + if (!file) + return false; + file->refcount++; + if (win->file) + file_free(win->vis, win->file); + win->file = file; + view_reload(win->view, file->text); + return true; +} + bool vis_window_split(Win *original) { vis_doupdates(original->vis, false); Win *win = window_new_file(original->vis, original->file, UI_OPTION_STATUSBAR); @@ -209,6 +209,8 @@ bool vis_window_new(Vis*, const char *filename); bool vis_window_new_fd(Vis*, int fd); /** Reload the file currently displayed in the window from disk. */ bool vis_window_reload(Win*); +/** Change the file currently displayed in the window. */ +bool vis_window_change_file(Win*, const char *filename); /** Check whether closing the window would loose unsaved changes. */ bool vis_window_closable(Win*); /** Close window, redraw user interface. */ |
