[PATCH] allow lua to change a windows file
Export this patch
---
vis-lua.c | 3 +++
vis.c | 11 +++++++++++
vis.h | 2 ++
3 files changed, 16 insertions(+)
diff --git a/vis-lua.c b/vis-lua.c
index 4d783c5d..cb328b66 100644
--- a/vis-lua.c
+++ b/vis-lua.c
@@ -2058,6 +2058,9 @@ 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 = strdup(lua_tostring(L, 3));
Theoretically strdup can return NULL so we should probably check for that.
Also, I think this currently leaks memory. We should free the memory
that strdup allocates.
You are totally right.
The strdup is a leftover from a previous iteration of this change.
In this patch it is completely useless, because file_new already creates a copy
of the passed file name.
Ah, yes, you are correct!
I will remove the strdup call in v2 in the future.
Sounds good to me, thanks!
Cheers,
Silvan
Flo
Cheers,
Silvan
+ vis_window_change_file(win, filename);
}
}
diff --git a/vis.c b/vis.c
index 0c05558a..7f005057 100644
--- a/vis.c
+++ b/vis.c
@@ -505,6 +505,17 @@ 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);
+ }
+
bool vis_window_split(Win *original) {
vis_doupdates(original->vis, false);
Win *win = window_new_file(original->vis, original->file, UI_OPTION_STATUSBAR);
diff --git a/vis.h b/vis.h
index 312e87c4..b7192c6f 100644
--- a/vis.h
+++ b/vis.h
@@ -212,6 +212,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. */
--
2.45.0
Heyhey!
Florian Fischer <florian.fischer@muhq.space> wrote: