Signal config errors via a naughty popup
If loading of any config file fails, awesome will now remember the error message and make it available to lua. The default config is modified to open a naughty popup on errors. This should help all those people who modify their config and then wonder why there change is ignored, not noticing awesome's error message on stderr Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
bf8e6418f5
commit
be02406f77
|
@ -300,6 +300,7 @@ main(int argc, char **argv)
|
||||||
p_clear(&globalconf, 1);
|
p_clear(&globalconf, 1);
|
||||||
globalconf.keygrabber = LUA_REFNIL;
|
globalconf.keygrabber = LUA_REFNIL;
|
||||||
globalconf.mousegrabber = LUA_REFNIL;
|
globalconf.mousegrabber = LUA_REFNIL;
|
||||||
|
buffer_init(&globalconf.startup_errors);
|
||||||
|
|
||||||
/* save argv */
|
/* save argv */
|
||||||
for(i = 0; i < argc; i++)
|
for(i = 0; i < argc; i++)
|
||||||
|
|
|
@ -7,6 +7,16 @@ require("beautiful")
|
||||||
-- Notification library
|
-- Notification library
|
||||||
require("naughty")
|
require("naughty")
|
||||||
|
|
||||||
|
-- {{{ Error handling
|
||||||
|
-- Check if awesome encountered an error during startup and fell back to
|
||||||
|
-- another config (This code will only ever execute for the fallback config)
|
||||||
|
if awesome.startup_errors then
|
||||||
|
naughty.notify({ preset = naughty.config.presets.critical,
|
||||||
|
title = "Oops, there were errors during startup!",
|
||||||
|
text = awesome.startup_errors })
|
||||||
|
end
|
||||||
|
-- }}}
|
||||||
|
|
||||||
-- {{{ Variable definitions
|
-- {{{ Variable definitions
|
||||||
-- Themes define colours, icons, and wallpapers
|
-- Themes define colours, icons, and wallpapers
|
||||||
beautiful.init("@AWESOME_THEMES_PATH@/default/theme.lua")
|
beautiful.init("@AWESOME_THEMES_PATH@/default/theme.lua")
|
||||||
|
|
|
@ -95,6 +95,7 @@ skip_taskbar
|
||||||
south
|
south
|
||||||
start
|
start
|
||||||
started
|
started
|
||||||
|
startup_errors
|
||||||
sticky
|
sticky
|
||||||
system
|
system
|
||||||
systray
|
systray
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "common/xembed.h"
|
#include "common/xembed.h"
|
||||||
|
#include "common/buffer.h"
|
||||||
|
|
||||||
typedef struct wibox_t wibox_t;
|
typedef struct wibox_t wibox_t;
|
||||||
typedef struct a_screen screen_t;
|
typedef struct a_screen screen_t;
|
||||||
|
@ -81,6 +82,8 @@ typedef struct
|
||||||
char *argv;
|
char *argv;
|
||||||
/** Lua VM state */
|
/** Lua VM state */
|
||||||
lua_State *L;
|
lua_State *L;
|
||||||
|
/** All errors messages from loading config files */
|
||||||
|
buffer_t startup_errors;
|
||||||
/** Default colors */
|
/** Default colors */
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
|
22
luaa.c
22
luaa.c
|
@ -574,6 +574,10 @@ luaA_awesome_index(lua_State *L)
|
||||||
case A_TK_RELEASE:
|
case A_TK_RELEASE:
|
||||||
lua_pushliteral(L, AWESOME_RELEASE);
|
lua_pushliteral(L, AWESOME_RELEASE);
|
||||||
break;
|
break;
|
||||||
|
case A_TK_STARTUP_ERRORS:
|
||||||
|
if (globalconf.startup_errors.len == 0)
|
||||||
|
return 0;
|
||||||
|
lua_pushstring(L, globalconf.startup_errors.s);
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -846,6 +850,14 @@ luaA_init(xdgHandle* xdg)
|
||||||
lua_setfield(L, 1, "path"); /* package.path = "concatenated string" */
|
lua_setfield(L, 1, "path"); /* package.path = "concatenated string" */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
luaA_startup_error(const char *err)
|
||||||
|
{
|
||||||
|
if (globalconf.startup_errors.len > 0)
|
||||||
|
buffer_addsl(&globalconf.startup_errors, "\n\n");
|
||||||
|
buffer_adds(&globalconf.startup_errors, err);
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
luaA_loadrc(const char *confpath, bool run)
|
luaA_loadrc(const char *confpath, bool run)
|
||||||
{
|
{
|
||||||
|
@ -858,7 +870,9 @@ luaA_loadrc(const char *confpath, bool run)
|
||||||
globalconf.conffile = a_strdup(confpath);
|
globalconf.conffile = a_strdup(confpath);
|
||||||
if(lua_pcall(globalconf.L, 0, LUA_MULTRET, 0))
|
if(lua_pcall(globalconf.L, 0, LUA_MULTRET, 0))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s\n", lua_tostring(globalconf.L, -1));
|
const char *err = lua_tostring(globalconf.L, -1);
|
||||||
|
luaA_startup_error(err);
|
||||||
|
fprintf(stderr, "%s\n", err);
|
||||||
/* An error happened, so reset this. */
|
/* An error happened, so reset this. */
|
||||||
globalconf.conffile = NULL;
|
globalconf.conffile = NULL;
|
||||||
}
|
}
|
||||||
|
@ -872,7 +886,11 @@ luaA_loadrc(const char *confpath, bool run)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fprintf(stderr, "%s\n", lua_tostring(globalconf.L, -1));
|
{
|
||||||
|
const char *err = lua_tostring(globalconf.L, -1);
|
||||||
|
luaA_startup_error(err);
|
||||||
|
fprintf(stderr, "%s\n", err);
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue