void unique_lib_setup(lua_State *L) { static const struct luaL_reg unique_lib[] = { LUA_CLASS_METHODS(unique) { "new", luaH_unique_new }, { "send_message", luaH_unique_send_message }, { "is_running", luaH_unique_is_running }, { NULL, NULL } }; /* create signals array */ unique_class.signals = signal_new(); /* export unique lib */ luaH_openlib(L, "unique", unique_lib, unique_lib); }
void luaH_init(void) { lua_State *L; static const struct luaL_reg luakit_lib[] = { { "quit", luaH_quit }, { "add_signal", luaH_luakit_add_signal }, { "remove_signal", luaH_luakit_remove_signal }, { "emit_signal", luaH_luakit_emit_signal }, { "__index", luaH_luakit_index }, { "__newindex", luaH_luakit_newindex }, { NULL, NULL } }; /* Lua VM init */ L = globalconf.L = luaL_newstate(); /* Set panic fuction */ lua_atpanic(L, luaH_panic); /* Set error handling function */ lualib_dofunction_on_error = luaH_dofunction_on_error; luaL_openlibs(L); luaH_fixups(L); luaH_object_setup(L); /* Export luakit lib */ luaH_openlib(L, "luakit", luakit_lib, luakit_lib); /* Export widget */ widget_class_setup(L); /* add Lua search paths */ lua_getglobal(L, "package"); if(LUA_TTABLE != lua_type(L, 1)) { warn("package is not a table"); return; } lua_getfield(L, 1, "path"); if(LUA_TSTRING != lua_type(L, 2)) { warn("package.path is not a string"); lua_pop(L, 1); return; } /* compile list of package search paths */ GPtrArray *paths = g_ptr_array_new_with_free_func(g_free); #if DEVELOPMENT_PATHS /* allows for testing luakit in the project directory */ g_ptr_array_add(paths, g_strdup("./lib")); g_ptr_array_add(paths, g_strdup("./config")); #endif /* add users config dir (see: XDG_CONFIG_DIR) */ g_ptr_array_add(paths, g_strdup(globalconf.config_dir)); /* add system config dirs (see: XDG_CONFIG_DIRS) */ const gchar* const *config_dirs = g_get_system_config_dirs(); for (; *config_dirs; config_dirs++) g_ptr_array_add(paths, g_build_filename(*config_dirs, "luakit", NULL)); /* add luakit install path */ g_ptr_array_add(paths, g_build_filename(LUAKIT_INSTALL_PATH, "lib", NULL)); for (gpointer *path = paths->pdata; *path; path++) { lua_pushliteral(L, ";"); lua_pushstring(L, *path); lua_pushliteral(L, "/?.lua"); lua_concat(L, 3); lua_pushliteral(L, ";"); lua_pushstring(L, *path); lua_pushliteral(L, "/?/init.lua"); lua_concat(L, 3); /* concat with package.path */ lua_concat(L, 3); } g_ptr_array_free(paths, TRUE); /* package.path = "concatenated string" */ lua_setfield(L, 1, "path"); }