]> git.lizzy.rs Git - bspwm.git/blob - settings.c
Fix hang related to SIGCHLD
[bspwm.git] / settings.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <unistd.h>
5 #include <lua.h>
6 #include <lualib.h>
7 #include <lauxlib.h>
8 #include <xcb/xcb.h>
9 #include <xcb/xcb_event.h>
10 #include "helpers.h"
11 #include "types.h"
12 #include "bspwm.h"
13 #include "utils.h"
14 #include "luautils.h"
15 #include "common.h"
16 #include "settings.h"
17
18 void load_settings(void)
19 {
20     char path[MAXLEN];
21     lua_State *L = lua_open();
22     luaopen_base(L);
23     /* luaL_openlibs(L); */
24
25     snprintf(path, sizeof(path), "%s/%s/%s", getenv("XDG_CONFIG_HOME"), WM_NAME, CONFIG_FILE);
26
27     if (luaL_loadfile(L, path) == 0) {
28         if (lua_pcall(L, 0, 0, 0) == 0)
29             apply_settings(L);
30         else
31             PUTS("error: cannot interpret configuration file\n");
32     } else {
33         PUTS("error: could not load configuration file\n");
34     }
35
36     lua_close(L);
37 }
38
39 void run_autostart(void)
40 {
41     char path[MAXLEN];
42
43     snprintf(path, sizeof(path), "%s/%s/%s", getenv("XDG_CONFIG_HOME"), WM_NAME, AUTOSTART_FILE);
44
45     if (fork() != 0)
46         return;
47
48     if (dpy != NULL)
49         close(xcb_get_file_descriptor(dpy));
50
51     setsid();
52     execl(path, path, NULL);
53         
54     PUTS("error: could not load autostart file\n");
55     exit(EXIT_SUCCESS);
56 }
57
58 void apply_settings(lua_State *L)
59 {
60     string_expr(L, normal_border_color, "normal_border_color", NORMAL_BORDER_COLOR);
61     string_expr(L, active_border_color, "active_border_color", ACTIVE_BORDER_COLOR);
62     string_expr(L, inner_border_color, "inner_border_color", INNER_BORDER_COLOR);
63     string_expr(L, outer_border_color, "outer_border_color", OUTER_BORDER_COLOR);
64     string_expr(L, presel_border_color, "presel_border_color", PRESEL_BORDER_COLOR);
65     string_expr(L, locked_border_color, "locked_border_color", LOCKED_BORDER_COLOR);
66
67     normal_border_color_pxl = get_color(normal_border_color);
68     active_border_color_pxl = get_color(active_border_color);
69     inner_border_color_pxl = get_color(inner_border_color);
70     outer_border_color_pxl = get_color(outer_border_color);
71     presel_border_color_pxl = get_color(presel_border_color);
72     locked_border_color_pxl = get_color(locked_border_color);
73
74     string_expr(L, wm_name, "wm_name", WM_NAME);
75
76     adaptive_window_border = bool_expr(L, "adaptive_window_border", ADAPTIVE_WINDOW_BORDER);
77
78     inner_border_width = int_expr(L, "inner_border_width", INNER_BORDER_WIDTH);
79     main_border_width = int_expr(L, "main_border_width", MAIN_BORDER_WIDTH);
80     outer_border_width = int_expr(L, "outer_border_width", OUTER_BORDER_WIDTH);
81
82     border_width = inner_border_width + main_border_width + outer_border_width;
83
84     window_gap = int_expr(L, "window_gap", WINDOW_GAP);
85     left_padding = int_expr(L, "left_padding", LEFT_PADDING);
86     right_padding = int_expr(L, "right_padding", RIGHT_PADDING);
87     top_padding = int_expr(L, "top_padding", TOP_PADDING);
88     bottom_padding = int_expr(L, "bottom_padding", BOTTOM_PADDING);
89 }