Add Lua config without kiwmi lib

This commit is contained in:
buffet 2019-10-18 23:32:29 +02:00
parent feb8dfc7f4
commit 9b2cd6b985
6 changed files with 67 additions and 0 deletions

19
include/luak.h Normal file
View file

@ -0,0 +1,19 @@
/* Copyright (c), Niclas Meyer <niclas@countingsort.com>
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#ifndef KIWMI_LUAK_H
#define KIWMI_LUAK_H
#include <stdbool.h>
#include <lua.h>
#include "server.h"
bool luaK_init(struct kiwmi_server *server);
#endif /* KIWMI_LUAK_H */

View file

@ -10,6 +10,8 @@
#include <stdbool.h> #include <stdbool.h>
#include <lua.h>
#include "desktop/desktop.h" #include "desktop/desktop.h"
#include "input/input.h" #include "input/input.h"
@ -19,6 +21,7 @@ struct kiwmi_server {
struct wlr_backend *backend; struct wlr_backend *backend;
const char *socket; const char *socket;
char *config_path; char *config_path;
lua_State *L;
struct kiwmi_desktop desktop; struct kiwmi_desktop desktop;
struct kiwmi_input input; struct kiwmi_input input;
}; };

27
kiwmi/luak.c Normal file
View file

@ -0,0 +1,27 @@
/* Copyright (c), Niclas Meyer <niclas@countingsort.com>
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#include "luak.h"
#include <lauxlib.h>
#include <lualib.h>
bool
luaK_init(struct kiwmi_server *server)
{
lua_State *L = luaL_newstate();
if (!L) {
return false;
}
luaL_openlibs(L);
// TODO: kiwmi library
server->L = L;
return true;
}

View file

@ -1,4 +1,5 @@
kiwmi_sources = files( kiwmi_sources = files(
'luak.c',
'main.c', 'main.c',
'server.c', 'server.c',
'desktop/desktop.c', 'desktop/desktop.c',
@ -9,6 +10,7 @@ kiwmi_sources = files(
) )
kiwmi_deps = [ kiwmi_deps = [
lua,
wayland_server, wayland_server,
wlroots, wlroots,
xkbcommon, xkbcommon,

View file

@ -12,11 +12,14 @@
#include <limits.h> #include <limits.h>
#include <lauxlib.h>
#include <wayland-server.h> #include <wayland-server.h>
#include <wlr/backend.h> #include <wlr/backend.h>
#include <wlr/render/wlr_renderer.h> #include <wlr/render/wlr_renderer.h>
#include <wlr/util/log.h> #include <wlr/util/log.h>
#include "luak.h"
bool bool
server_init(struct kiwmi_server *server, char *config_path) server_init(struct kiwmi_server *server, char *config_path)
{ {
@ -73,6 +76,12 @@ server_init(struct kiwmi_server *server, char *config_path)
server->config_path = config_path; server->config_path = config_path;
if (!luaK_init(server)) {
wlr_log(WLR_ERROR, "Failed to initialize Lua");
wl_display_destroy(server->wl_display);
return false;
}
return true; return true;
} }
@ -90,6 +99,12 @@ server_run(struct kiwmi_server *server)
setenv("WAYLAND_DISPLAY", server->socket, true); setenv("WAYLAND_DISPLAY", server->socket, true);
if (luaL_dofile(server->L, server->config_path)) {
wlr_log(WLR_ERROR, "Error running config: %s", lua_tostring(server->L, -1));
wl_display_destroy(server->wl_display);
return false;
}
wl_display_run(server->wl_display); wl_display_run(server->wl_display);
return true; return true;

View file

@ -17,6 +17,7 @@ add_project_arguments(
) )
git = find_program('git', required: false) git = find_program('git', required: false)
lua = dependency('lua')
wayland_server = dependency('wayland-server') wayland_server = dependency('wayland-server')
wlroots = dependency('wlroots') wlroots = dependency('wlroots')
xkbcommon = dependency('xkbcommon') xkbcommon = dependency('xkbcommon')