From aaefca67b304688efb0f4c893aab469d61f8f0bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Wed, 20 Apr 2016 19:20:12 +0200 Subject: vis-lua: trigger start event after ui has been initialized --- main.c | 1 + vis-lua.c | 9 ++++++++- vis-lua.h | 1 + vis.c | 4 +++- vis.h | 1 + 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/main.c b/main.c index 8fc6191..272ac3c 100644 --- a/main.c +++ b/main.c @@ -2102,6 +2102,7 @@ static void signal_handler(int signum, siginfo_t *siginfo, void *context) { int main(int argc, char *argv[]) { VisEvent event = { + .vis_init = vis_lua_init, .vis_start = vis_lua_start, .vis_quit = vis_lua_quit, .file_open = vis_lua_file_open, diff --git a/vis-lua.c b/vis-lua.c index 0c043fc..fb560ab 100644 --- a/vis-lua.c +++ b/vis-lua.c @@ -13,6 +13,7 @@ #if !CONFIG_LUA +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) { } @@ -970,7 +971,7 @@ static bool vis_lua_path_add(Vis *vis, const char *path) { return true; } -void vis_lua_start(Vis *vis) { +void vis_lua_init(Vis *vis) { lua_State *L = luaL_newstate(); if (!L) return; @@ -1043,6 +1044,12 @@ void vis_lua_start(Vis *vis) { lua_getglobal(L, "require"); lua_pushstring(L, "visrc"); pcall(vis, L, 1, 0); +} + +void vis_lua_start(Vis *vis) { + lua_State *L = vis->lua; + if (!L) + return; vis_lua_event(vis, "start"); if (lua_isfunction(L, -1)) pcall(vis, L, 0, 0); diff --git a/vis-lua.h b/vis-lua.h index 95cc1e3..b05f6fb 100644 --- a/vis-lua.h +++ b/vis-lua.h @@ -11,6 +11,7 @@ typedef struct lua_State lua_State; #include "vis.h" +void vis_lua_init(Vis*); void vis_lua_start(Vis*); void vis_lua_quit(Vis*); void vis_lua_file_open(Vis*, File*); diff --git a/vis.c b/vis.c index 47a6c79..8f4155e 100644 --- a/vis.c +++ b/vis.c @@ -366,9 +366,11 @@ Vis *vis_new(Ui *ui, VisEvent *event) { goto err; vis->mode_prev = vis->mode = &vis_modes[VIS_MODE_NORMAL]; vis->event = event; + if (event && event->vis_init) + event->vis_init(vis); + vis->ui->start(vis->ui); if (event && event->vis_start) event->vis_start(vis); - vis->ui->start(vis->ui); return vis; err: vis_free(vis); diff --git a/vis.h b/vis.h index fdc93e2..6f60e6a 100644 --- a/vis.h +++ b/vis.h @@ -14,6 +14,7 @@ typedef struct Win Win; #include "text-regex.h" typedef struct { + void (*vis_init)(Vis*); void (*vis_start)(Vis*); void (*vis_quit)(Vis*); void (*file_open)(Vis*, File*); -- cgit v1.2.3