allow awesome to be run without configuration file
This commit is contained in:
parent
b7ef890148
commit
62a43c0f8c
1
TODO
1
TODO
|
@ -4,7 +4,6 @@ For v1.0:
|
||||||
- Check spiral layout
|
- Check spiral layout
|
||||||
- Check togglemax
|
- Check togglemax
|
||||||
- Check that all uicb have key binding in default conf
|
- Check that all uicb have key binding in default conf
|
||||||
- Allow awesome to be run without any configuration file
|
|
||||||
- Write manpage
|
- Write manpage
|
||||||
|
|
||||||
For future:
|
For future:
|
||||||
|
|
91
config.c
91
config.c
|
@ -154,14 +154,43 @@ name_func_lookup(const char *funcname, const NameFuncLink * list)
|
||||||
* \param awesomeconf awesome config ref
|
* \param awesomeconf awesome config ref
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
set_default_config(awesome_config *awesomeconf)
|
set_default_config(awesome_config *awesomeconf, DC *drawcontext)
|
||||||
{
|
{
|
||||||
|
/** \todo most of this stuff aren't freed when we initialize
|
||||||
|
* the real configuration, we should add a clean conf function */
|
||||||
strcpy(awesomeconf->statustext, "awesome-" VERSION);
|
strcpy(awesomeconf->statustext, "awesome-" VERSION);
|
||||||
awesomeconf->statusbar.width = 0;
|
awesomeconf->statusbar.width = 0;
|
||||||
awesomeconf->statusbar.height = 0;
|
awesomeconf->statusbar.height = 0;
|
||||||
awesomeconf->opacity_unfocused = -1;
|
awesomeconf->opacity_unfocused = -1;
|
||||||
awesomeconf->nkeys = 0;
|
awesomeconf->nkeys = 0;
|
||||||
awesomeconf->nrules = 0;
|
awesomeconf->nrules = 0;
|
||||||
|
|
||||||
|
awesomeconf->nlayouts = 2;
|
||||||
|
awesomeconf->layouts = p_new(Layout, awesomeconf->nlayouts + 1);
|
||||||
|
awesomeconf->layouts[0].symbol = a_strdup("[]=");
|
||||||
|
awesomeconf->layouts[0].arrange = tile;
|
||||||
|
awesomeconf->layouts[1].symbol = a_strdup("<><");
|
||||||
|
awesomeconf->layouts[1].arrange = floating;
|
||||||
|
awesomeconf->layouts[2].symbol = NULL;
|
||||||
|
awesomeconf->layouts[2].arrange = NULL;
|
||||||
|
|
||||||
|
awesomeconf->ntags = 3;
|
||||||
|
awesomeconf->tags = p_new(char *, awesomeconf->ntags);
|
||||||
|
awesomeconf->selected_tags = p_new(Bool, awesomeconf->ntags);
|
||||||
|
awesomeconf->prev_selected_tags = p_new(Bool, awesomeconf->ntags);
|
||||||
|
awesomeconf->tag_layouts = p_new(Layout *, awesomeconf->ntags);
|
||||||
|
awesomeconf->tags[0] = a_strdup("this");
|
||||||
|
awesomeconf->tags[1] = a_strdup("is");
|
||||||
|
awesomeconf->tags[2] = a_strdup("awesome");
|
||||||
|
awesomeconf->selected_tags[0] = True;
|
||||||
|
awesomeconf->selected_tags[1] = False;
|
||||||
|
awesomeconf->selected_tags[2] = False;
|
||||||
|
awesomeconf->prev_selected_tags[0] = False;
|
||||||
|
awesomeconf->prev_selected_tags[1] = False;
|
||||||
|
awesomeconf->prev_selected_tags[2] = False;
|
||||||
|
awesomeconf->tag_layouts[0] = awesomeconf->layouts;
|
||||||
|
awesomeconf->tag_layouts[1] = awesomeconf->layouts;
|
||||||
|
awesomeconf->tag_layouts[2] = awesomeconf->layouts;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Parse configuration file and initialize some stuff
|
/** Parse configuration file and initialize some stuff
|
||||||
|
@ -184,7 +213,7 @@ parse_config(Display * disp, int scr, DC * drawcontext, awesome_config *awesomec
|
||||||
char *confpath;
|
char *confpath;
|
||||||
KeySym tmp_key;
|
KeySym tmp_key;
|
||||||
|
|
||||||
set_default_config(awesomeconf);
|
set_default_config(awesomeconf, drawcontext);
|
||||||
|
|
||||||
homedir = getenv("HOME");
|
homedir = getenv("HOME");
|
||||||
confpath = p_new(char, strlen(homedir) + strlen(AWESOME_CONFIG_FILE) + 2);
|
confpath = p_new(char, strlen(homedir) + strlen(AWESOME_CONFIG_FILE) + 2);
|
||||||
|
@ -198,8 +227,9 @@ parse_config(Display * disp, int scr, DC * drawcontext, awesome_config *awesomec
|
||||||
awesomeconf->screen = scr;
|
awesomeconf->screen = scr;
|
||||||
|
|
||||||
if(config_read_file(&awesomelibconf, confpath) == CONFIG_FALSE)
|
if(config_read_file(&awesomelibconf, confpath) == CONFIG_FALSE)
|
||||||
eprint("awesome: error parsing configuration file at line %d: %s\n",
|
fprintf(stderr, "awesome: error parsing configuration file at line %d: %s\n",
|
||||||
config_error_line(&awesomelibconf), config_error_text(&awesomelibconf));
|
config_error_line(&awesomelibconf), config_error_text(&awesomelibconf));
|
||||||
|
|
||||||
|
|
||||||
/* font */
|
/* font */
|
||||||
tmp = config_lookup_string(&awesomelibconf, "awesome.font");
|
tmp = config_lookup_string(&awesomelibconf, "awesome.font");
|
||||||
|
@ -209,7 +239,7 @@ parse_config(Display * disp, int scr, DC * drawcontext, awesome_config *awesomec
|
||||||
conflayouts = config_lookup(&awesomelibconf, "awesome.layouts");
|
conflayouts = config_lookup(&awesomelibconf, "awesome.layouts");
|
||||||
|
|
||||||
if(!conflayouts)
|
if(!conflayouts)
|
||||||
fprintf(stderr, "layouts not found in configuration file\n");
|
fprintf(stderr, "awesome: layouts not found in configuration file\n");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
awesomeconf->nlayouts = config_setting_length(conflayouts);
|
awesomeconf->nlayouts = config_setting_length(conflayouts);
|
||||||
|
@ -225,41 +255,50 @@ parse_config(Display * disp, int scr, DC * drawcontext, awesome_config *awesomec
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
awesomeconf->layouts[i].symbol = a_strdup(config_setting_get_string_elem(confsublayouts, 0));
|
awesomeconf->layouts[i].symbol = a_strdup(config_setting_get_string_elem(confsublayouts, 0));
|
||||||
|
|
||||||
j = textw(drawcontext->font.set, drawcontext->font.xfont, awesomeconf->layouts[i].symbol, drawcontext->font.height);
|
|
||||||
if(j > awesomeconf->statusbar.width)
|
|
||||||
awesomeconf->statusbar.width = j;
|
|
||||||
}
|
}
|
||||||
awesomeconf->layouts[i].symbol = NULL;
|
awesomeconf->layouts[i].symbol = NULL;
|
||||||
awesomeconf->layouts[i].arrange = NULL;
|
awesomeconf->layouts[i].arrange = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!awesomeconf->nlayouts)
|
||||||
if(!awesomeconf->layouts[0].arrange)
|
|
||||||
eprint("awesome: fatal: no default layout available\n");
|
eprint("awesome: fatal: no default layout available\n");
|
||||||
/** \todo put this in set_default_layout */
|
|
||||||
|
for(i = 0; i < awesomeconf->nlayouts; i++)
|
||||||
|
{
|
||||||
|
j = textw(drawcontext->font.set, drawcontext->font.xfont, awesomeconf->layouts[i].symbol, drawcontext->font.height);
|
||||||
|
if(j > awesomeconf->statusbar.width)
|
||||||
|
awesomeconf->statusbar.width = j;
|
||||||
|
}
|
||||||
|
|
||||||
awesomeconf->current_layout = awesomeconf->layouts;
|
awesomeconf->current_layout = awesomeconf->layouts;
|
||||||
|
|
||||||
/* tags */
|
/* tags */
|
||||||
conftags = config_lookup(&awesomelibconf, "awesome.tags");
|
conftags = config_lookup(&awesomelibconf, "awesome.tags");
|
||||||
|
|
||||||
if(!conftags)
|
if(!conftags)
|
||||||
eprint("awesome: fatal: no tags found in configuration file\n");
|
fprintf(stderr, "awesome: tags not found in configuration file\n");
|
||||||
awesomeconf->ntags = config_setting_length(conftags);
|
else
|
||||||
awesomeconf->tags = p_new(char *, awesomeconf->ntags);
|
|
||||||
awesomeconf->selected_tags = p_new(Bool, awesomeconf->ntags);
|
|
||||||
awesomeconf->prev_selected_tags = p_new(Bool, awesomeconf->ntags);
|
|
||||||
awesomeconf->tag_layouts = p_new(Layout *, awesomeconf->ntags);
|
|
||||||
|
|
||||||
for(i = 0; (tmp = config_setting_get_string_elem(conftags, i)); i++)
|
|
||||||
{
|
{
|
||||||
awesomeconf->tags[i] = a_strdup(tmp);
|
awesomeconf->ntags = config_setting_length(conftags);
|
||||||
awesomeconf->selected_tags[i] = False;
|
awesomeconf->tags = p_new(char *, awesomeconf->ntags);
|
||||||
awesomeconf->prev_selected_tags[i] = False;
|
awesomeconf->selected_tags = p_new(Bool, awesomeconf->ntags);
|
||||||
/** \todo add support for default tag/layout in configuration file */
|
awesomeconf->prev_selected_tags = p_new(Bool, awesomeconf->ntags);
|
||||||
awesomeconf->tag_layouts[i] = awesomeconf->layouts;
|
/** \todo move this in tags or layouts */
|
||||||
|
awesomeconf->tag_layouts = p_new(Layout *, awesomeconf->ntags);
|
||||||
|
|
||||||
|
for(i = 0; (tmp = config_setting_get_string_elem(conftags, i)); i++)
|
||||||
|
{
|
||||||
|
awesomeconf->tags[i] = a_strdup(tmp);
|
||||||
|
awesomeconf->selected_tags[i] = False;
|
||||||
|
awesomeconf->prev_selected_tags[i] = False;
|
||||||
|
/** \todo add support for default tag/layout in configuration file */
|
||||||
|
awesomeconf->tag_layouts[i] = awesomeconf->layouts;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!awesomeconf->ntags)
|
||||||
|
eprint("awesome: fatal: no tags found in configuration file\n");
|
||||||
|
|
||||||
/* select first tag by default */
|
/* select first tag by default */
|
||||||
awesomeconf->selected_tags[0] = True;
|
awesomeconf->selected_tags[0] = True;
|
||||||
awesomeconf->prev_selected_tags[0] = True;
|
awesomeconf->prev_selected_tags[0] = True;
|
||||||
|
@ -420,7 +459,7 @@ initfont(const char *fontstr, Display * disp, DC * drawcontext)
|
||||||
drawcontext->font.xfont = NULL;
|
drawcontext->font.xfont = NULL;
|
||||||
if(!(drawcontext->font.xfont = XLoadQueryFont(disp, fontstr))
|
if(!(drawcontext->font.xfont = XLoadQueryFont(disp, fontstr))
|
||||||
|| !(drawcontext->font.xfont = XLoadQueryFont(disp, "fixed")))
|
|| !(drawcontext->font.xfont = XLoadQueryFont(disp, "fixed")))
|
||||||
eprint("error, cannot load font: '%s'\n", fontstr);
|
die("awesome: error, cannot load font: '%s'\n", fontstr);
|
||||||
drawcontext->font.ascent = drawcontext->font.xfont->ascent;
|
drawcontext->font.ascent = drawcontext->font.xfont->ascent;
|
||||||
drawcontext->font.descent = drawcontext->font.xfont->descent;
|
drawcontext->font.descent = drawcontext->font.xfont->descent;
|
||||||
}
|
}
|
||||||
|
@ -460,6 +499,6 @@ initcolor(const char *colstr, Display * disp, int scr)
|
||||||
Colormap cmap = DefaultColormap(disp, scr);
|
Colormap cmap = DefaultColormap(disp, scr);
|
||||||
XColor color;
|
XColor color;
|
||||||
if(!XAllocNamedColor(disp, cmap, colstr, &color, &color))
|
if(!XAllocNamedColor(disp, cmap, colstr, &color, &color))
|
||||||
eprint("error, cannot allocate color '%s'\n", colstr);
|
die("awesome: error, cannot allocate color '%s'\n", colstr);
|
||||||
return color.pixel;
|
return color.pixel;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue