diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-04-05 11:49:48 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-04-05 13:10:39 +0530 |
| commit | 2e051fcc4efcfe6af2d3ef22d6a4ba63c9f1c65d (patch) | |
| tree | bbea54f175105a4167f1d07ca50a4a10632b38a2 | |
| parent | 7e09b35b008f58809ac56184a4f83ab875c038e0 (diff) | |
| download | null-browser-2e051fcc4efcfe6af2d3ef22d6a4ba63c9f1c65d.tar.gz null-browser-2e051fcc4efcfe6af2d3ef22d6a4ba63c9f1c65d.zip | |
Add package path to lua (only current build dir)
| -rw-r--r-- | CMakeLists.txt | 3 | ||||
| -rw-r--r-- | TODO.org | 3 | ||||
| -rw-r--r-- | lua/null-browser/api.lua (renamed from lua/api.lua) | 4 | ||||
| -rw-r--r-- | src/LuaRuntime.cpp | 23 | ||||
| -rw-r--r-- | src/LuaRuntime.hpp | 12 |
5 files changed, 38 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c2ce8e..8e1ceb3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,9 @@ find_package(PkgConfig REQUIRED) set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib") set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) +# TODO: Please fix this. This sucks +add_compile_definitions(PROJECT_LUA_PATH="./lua/?.lua") + if(DEFINED ENV{RELEASE}) set(CMAKE_BUILD_TYPE Release) set(CMAKE_CXX_FLAGS "-O3 ${CMAKE_CXX_FLAGS}") @@ -13,8 +13,9 @@ - [X] Multi-window - [X] New window on new window request - [X] Socket for opening window in current session (lua eval) -- [ ] Config loading and lua path +- [X] Config loading and lua path - [ ] Events/autocommands +- [ ] Url changed event - [ ] History storage - [ ] History completion - [ ] Log stdout, errors and results from lua somewhere diff --git a/lua/api.lua b/lua/null-browser/api.lua index b6495e0..d2e0be7 100644 --- a/lua/api.lua +++ b/lua/null-browser/api.lua @@ -1,9 +1,13 @@ +print("FOOOOOOOOOOBARRRRRR") + local function shallow_copy(t) local t2 = {} for k, v in pairs(t) do t2[k] = v end return t2 end +web.event = web.event or {} + web.event.add_listener = function(events, opts) opts = shallow_copy(opts or {}) if type(events) ~= "table" then events = { events } end diff --git a/src/LuaRuntime.cpp b/src/LuaRuntime.cpp index 1dc9a85..d9bc86e 100644 --- a/src/LuaRuntime.cpp +++ b/src/LuaRuntime.cpp @@ -1,6 +1,6 @@ -#include "WindowActionRouter.hpp" -#include "lua.h" #include <QtCore> +#include <cstdlib> +#include <cstring> #include <lua.hpp> extern "C" { #include <luv/luv.h> @@ -8,12 +8,29 @@ extern "C" { #include "AsyncEventLoop.hpp" #include "LuaRuntime.hpp" +#include "WindowActionRouter.hpp" LuaRuntime::LuaRuntime() { state = luaL_newstate(); luaL_openlibs(state); - preserve_top(state, { init_web_lib(); }) + preserve_top(state, { init_web_lib(); }); + + auto lua_path = QString(PROJECT_LUA_PATH); + preserve_top(state, { + lua_getglobal(state, "package"); + lua_getfield(state, -1, "path"); + auto pkg_path = QString(lua_tostring(state, -1)) + ";" + lua_path; + lua_pop(state, 1); + lua_pushstring(state, pkg_path.toStdString().c_str()); + lua_setfield(state, -2, "path"); + + lua_getglobal(state, "require"); + lua_pushstring(state, "null-browser.api"); + if (lua_pcall(state, 1, 0, 0) != LUA_OK) { + qCritical() << "Unable to load browser api" << lua_tostring(state, -1); + } + }); } void LuaRuntime::start_event_loop() { diff --git a/src/LuaRuntime.hpp b/src/LuaRuntime.hpp index 74b7810..2b834aa 100644 --- a/src/LuaRuntime.hpp +++ b/src/LuaRuntime.hpp @@ -10,10 +10,16 @@ #include "utils.hpp" #include "widgets/WebViewStack.hpp" +#ifndef PROJECT_LUA_PATH +#define PROJECT_LUA_PATH "" +#endif + #define preserve_top(STATE, BODY) \ - const int __top = lua_gettop(STATE); \ - BODY; \ - lua_settop(STATE, __top); + { \ + const int __top = lua_gettop(STATE); \ + BODY; \ + lua_settop(STATE, __top); \ + }; class LuaRuntime : public QObject { Q_OBJECT |
