diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-11-22 00:15:32 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-11-22 14:59:05 +0100 |
| commit | 0791cac97ee689195e593cfca89c0b63fb721479 (patch) | |
| tree | 57166b070b0f7a23ea2a8a1d223136801c0e99c8 /vis-lua.c | |
| parent | f555c00e0b0be14cd553c7c803d6136b86f2012b (diff) | |
| download | vis-0791cac97ee689195e593cfca89c0b63fb721479.tar.gz vis-0791cac97ee689195e593cfca89c0b63fb721479.tar.xz | |
vis-lua: introduce pre-save hook
The first argument is the file object while the second argument denotes
the full path to which it will be written. Path might be `nil` if the
file is going to be written to stdout.
The Lua function is expected to return a boolean value indicating whether
the write operation should proceed or be aborted.
Diffstat (limited to 'vis-lua.c')
| -rw-r--r-- | vis-lua.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -128,6 +128,7 @@ void vis_lua_init(Vis *vis) { } void vis_lua_start(Vis *vis) { } void vis_lua_quit(Vis *vis) { } void vis_lua_file_open(Vis *vis, File *file) { } +bool vis_lua_file_save_pre(Vis *vis, File *file, const char *path) { return true; } void vis_lua_file_save_post(Vis *vis, File *file, const char *path) { } void vis_lua_file_close(Vis *vis, File *file) { } void vis_lua_win_open(Vis *vis, Win *win) { } @@ -1544,6 +1545,23 @@ void vis_lua_file_open(Vis *vis, File *file) { lua_pop(L, 1); } +bool vis_lua_file_save_pre(Vis *vis, File *file, const char *path) { + lua_State *L = vis->lua; + vis_lua_event_get(L, "file_save_pre"); + if (lua_isfunction(L, -1)) { + obj_ref_new(L, file, "vis.file"); + if (path) + lua_pushstring(L, path); + else + lua_pushnil(L); + if (pcall(vis, L, 2, 1) != 0) + return false; + return lua_toboolean(L, -1); + } + lua_pop(L, 1); + return true; +} + void vis_lua_file_save_post(Vis *vis, File *file, const char *path) { lua_State *L = vis->lua; vis_lua_event_get(L, "file_save_post"); |
