!! IMPORTANT !! NEW CONFIG FILE SYNTAX, NO LIBCONFUSE NEEDED ANYMORE.

This commit is contained in:
Martin Duquesnoy 2009-08-23 01:58:24 +02:00
parent 324b6bc5d4
commit bf3038cb78
8 changed files with 416 additions and 1526 deletions

View File

@ -28,7 +28,6 @@ set(wmfs_src
src/confparse/confparse.c src/confparse/confparse.c
src/barwin.c src/barwin.c
src/client.c src/client.c
# src/config_new.c
src/config.c src/config.c
src/ src/
src/draw.c src/draw.c
@ -93,7 +92,6 @@ endif (X11_FOUND)
set(LIBRARIES_TO_LINK set(LIBRARIES_TO_LINK
${FREETYPE_LIBRARIES} ${FREETYPE_LIBRARIES}
${X11_LIBRARIES} ${X11_LIBRARIES}
confuse
Xft) Xft)
# Includes # Includes
@ -103,7 +101,6 @@ include(FindPkgConfig)
# Use pkgconfig to get required libraries # Use pkgconfig to get required libraries
pkg_check_modules(WMFS_REQUIRED REQUIRED pkg_check_modules(WMFS_REQUIRED REQUIRED
x11 x11
libconfuse
freetype2 freetype2
xft) xft)

View File

@ -534,8 +534,8 @@ client_manage(Window w, XWindowAttributes *wa, Bool ar)
for(t = clients; t && t->win != trans; t = t->next); for(t = clients; t && t->win != trans; t = t->next);
if(t) if(t)
c->tag = t->tag; c->tag = t->tag;
if(!(c->flags & FreeFlag)) if(!(c->flags & FreeFlag)
if(rettrans == Success || (c->flags & HintFlag)) && (rettrans == Success || (c->flags & HintFlag)))
c->flags |= FreeFlag; c->flags |= FreeFlag;
free(t); free(t);
@ -576,7 +576,7 @@ client_geo_hints(XRectangle *geo, Client *c)
/* aspect */ /* aspect */
if(c->minay > 0 && c->maxay > 0 if(c->minay > 0 && c->maxay > 0
&& c->minax > 0 && c->maxax > 0) && c->minax > 0 && c->maxax > 0)
{ {
if(geo->width * c->maxay > geo->height * c->maxax) if(geo->width * c->maxay > geo->height * c->maxax)
geo->width = geo->height * c->maxax / c->maxay; geo->width = geo->height * c->maxax / c->maxay;

View File

@ -30,231 +30,221 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "config_struct.h" #include "wmfs.h"
func_name_list_t tmp_func_list[] =
{
{"spawn", uicb_spawn },
{"client_kill", uicb_client_kill },
{"client_prev", uicb_client_prev },
{"client_next", uicb_client_next },
{"client_swap_next", uicb_client_swap_next },
{"client_swap_prev", uicb_client_swap_prev },
{"client_screen_next", uicb_client_screen_next },
{"client_screen_prev", uicb_client_screen_prev },
{"toggle_max", uicb_togglemax },
{"layout_next", uicb_layout_next },
{"layout_prev", uicb_layout_prev },
{"tag", uicb_tag },
{"tag_next", uicb_tag_next },
{"tag_prev", uicb_tag_prev },
{"tag_transfert", uicb_tagtransfert },
{"set_mwfact", uicb_set_mwfact },
{"set_nmaster", uicb_set_nmaster },
{"quit", uicb_quit },
{"toggle_infobar_position", uicb_infobar_togglepos },
{"toggle_resizehint", uicb_toggle_resizehint },
{"mouse_move", uicb_mouse_move },
{"mouse_resize", uicb_mouse_resize },
{"client_raise", uicb_client_raise },
{"toggle_free", uicb_togglefree },
{"screen_select", uicb_screen_select },
{"screen_next", uicb_screen_next },
{"screen_prev", uicb_screen_prev },
{"reload", uicb_reload },
{"launcher", uicb_launcher },
{"set_layout", uicb_set_layout },
{"menu", uicb_menu }
};
key_name_list_t key_list[] =
{
{"Control", ControlMask },
{"Shift", ShiftMask },
{"Lock", LockMask },
{"Alt", Mod1Mask },
{"Mod2", Mod2Mask },
{"Mod3", Mod3Mask },
{"Mod4", Mod4Mask },
{"Super", Mod4Mask },
{"Mod5", Mod5Mask },
{NULL, NoSymbol }
};
name_to_uint_t mouse_button_list[] =
{
{"Button1", Button1 },
{"Button2", Button2 },
{"Button3", Button3 },
{"Button4", Button4 },
{"Button5", Button5 },
{"1", Button1 },
{"2", Button2 },
{"3", Button3 },
{"4", Button4 },
{"5", Button5 },
};
void void
conf_init_func_list(void) mouse_section(MouseBinding mb[], char *src, int ns)
{ {
int i; int i;
char *tmp;
func_name_list_t tmp_list[] =
{
{"spawn", uicb_spawn },
{"client_kill", uicb_client_kill },
{"client_prev", uicb_client_prev },
{"client_next", uicb_client_next },
{"client_move", uicb_client_move },
{"client_resize", uicb_client_resize },
{"client_swap_next", uicb_client_swap_next },
{"client_swap_prev", uicb_client_swap_prev },
{"client_screen_next", uicb_client_screen_next },
{"client_screen_prev", uicb_client_screen_prev },
{"toggle_max", uicb_togglemax },
{"layout_next", uicb_layout_next },
{"layout_prev", uicb_layout_prev },
{"tag", uicb_tag },
{"tag_next", uicb_tag_next },
{"tag_prev", uicb_tag_prev },
{"tag_transfert", uicb_tagtransfert },
{"set_mwfact", uicb_set_mwfact },
{"set_nmaster", uicb_set_nmaster },
{"quit", uicb_quit },
{"toggle_infobar_position", uicb_infobar_togglepos },
{"toggle_resizehint", uicb_toggle_resizehint },
{"mouse_move", uicb_mouse_move },
{"mouse_resize", uicb_mouse_resize },
{"client_raise", uicb_client_raise },
{"toggle_free", uicb_togglefree },
{"screen_select", uicb_screen_select },
{"screen_next", uicb_screen_next },
{"screen_prev", uicb_screen_prev },
{"reload", uicb_reload },
{"launcher", uicb_launcher },
{"set_layout", uicb_set_layout },
{"menu", uicb_menu }
};
func_list = emalloc(LEN(tmp_list), sizeof(func_name_list_t));
for(i = 0; i < LEN(tmp_list); ++i)
func_list[i] = tmp_list[i];
return;
}
/* The following function are the
different configuration section. {{{
*/
void
mouse_section(MouseBinding mb[], cfg_t *cfg, int ns)
{
int i;
cfg_t *tmp;
for(i = 0; i < ns; ++i) for(i = 0; i < ns; ++i)
{ {
tmp = cfg_getnsec(cfg, "mouse", i); tmp = get_nsec(src, "mouse", i);
mb[i].tag = cfg_getint(tmp, "tag"); mb[i].tag = get_opt(tmp, "-1", "tag").num;
mb[i].screen = cfg_getint(tmp, "screen"); mb[i].screen = get_opt(tmp, "-1", "screen").num;
mb[i].button = char_to_button(cfg_getstr(tmp, "button"), mouse_button_list); mb[i].button = char_to_button(get_opt(tmp, "1", "button").str, mouse_button_list);
mb[i].func = name_to_func(cfg_getstr(tmp, "func"), func_list); mb[i].func = name_to_func(get_opt(tmp, "", "func").str, func_list);
mb[i].cmd = _strdup(alias_to_str(cfg_getstr(tmp, "cmd"))); mb[i].cmd = get_opt(tmp, "", "cmd").str;
} }
return; return;
} }
void void
conf_alias_section(cfg_t *cfg_a) conf_misc_section(char *src)
{ {
int i; int pad = 12;
if(cfg_size(cfg_a, "alias") < 256) conf.font = get_opt(src, "sans-9", "font").str;
for(i = 0; i < cfg_size(cfg_a, "alias"); ++i) conf.raisefocus = get_opt(src, "false", "raisefocus").bool;
{ conf.raiseswitch = get_opt(src, "false", "raiseswitch").bool;
cfgtmp = cfg_getnsec(cfg_a, "alias", i); conf.focus_fmouse = get_opt(src, "true", "focus_follow_mouse").bool;
conf.alias[i].name = _strdup(cfg_title(cfgtmp)); pad = get_opt(src, "12", "pad").num;
conf.alias[i].content = _strdup(cfg_getstr(cfgtmp, "content"));
} if(pad > 24 || pad < 1)
else
{ {
fprintf(stderr,"WMFS Configuration: Too many alias (%d) !\n", cfg_size(cfg_a, "alias")); fprintf(stderr, "WMFS Configuration: pad value (%d) incorrect.\n", pad);
exit(EXIT_FAILURE);
pad = 12;
} }
conf.pad = pad;
return; return;
} }
void void
conf_misc_section(cfg_t *cfg_m) conf_bar_section(char *src)
{ {
conf.font = alias_to_str(_strdup(cfg_getstr(cfg_m, "font"))); conf.border.bar = get_opt(src, "false", "border").bool;
conf.raisefocus = cfg_getbool(cfg_m, "raisefocus"); conf.bars.height = get_opt(src, "-1", "height").num;
conf.raiseswitch = cfg_getbool(cfg_m, "raiseswitch"); conf.colors.bar = getcolor(get_opt(src, "#000000", "bg").str);
conf.focus_fmouse = cfg_getbool(cfg_m, "focus_follow_mouse"); conf.colors.text = get_opt(src, "#ffffff", "fg").str;
if(cfg_getint(cfg_m, "pad") > 24 || cfg_getint(cfg_m, "pad") < 1) if((conf.bars.nmouse = get_size_sec(src, "mouse")))
{
fprintf(stderr, "WMFS Configuration: pad value (%ld) incorrect.\n",
cfg_getint(cfg_m, "pad"));
conf.pad = 12;
}
else
conf.pad = cfg_getint(cfg_m, "pad");
return;
}
void
conf_bar_section(cfg_t *cfg_b)
{
conf.border.bar = cfg_getbool(cfg_b, "border");
conf.bars.height = cfg_getint(cfg_b, "height");
conf.colors.bar = getcolor(alias_to_str(cfg_getstr(cfg_b, "bg")));
conf.colors.text = _strdup(alias_to_str(cfg_getstr(cfg_b, "fg")));
if((conf.bars.nmouse = cfg_size(cfg_b, "mouse")))
{ {
conf.bars.mouse = emalloc(conf.bars.nmouse, sizeof(MouseBinding)); conf.bars.mouse = emalloc(conf.bars.nmouse, sizeof(MouseBinding));
mouse_section(conf.bars.mouse, cfg_b, conf.bars.nmouse); mouse_section(conf.bars.mouse, src, conf.bars.nmouse);
} }
return; return;
} }
void void
conf_root_section(cfg_t *cfg_r) conf_root_section(char *src)
{ {
conf.root.background_command = _strdup(alias_to_str(cfg_getstr(cfg_r, "background_command"))); conf.root.background_command = get_opt(src, "", "background_command").str;
if((conf.root.nmouse = cfg_size(cfg_r, "mouse"))) if((conf.root.nmouse = get_size_sec(src, "mouse")))
{ {
conf.root.mouse = emalloc(conf.root.nmouse, sizeof(MouseBinding)); conf.root.mouse = emalloc(conf.root.nmouse, sizeof(MouseBinding));
mouse_section(conf.root.mouse, cfg_r, conf.root.nmouse); mouse_section(conf.root.mouse, src, conf.root.nmouse);
} }
return; return;
} }
void void
conf_client_section(cfg_t *cfg_c) conf_client_section(char *src)
{ {
int i, j; int i, j, d;
cfg_t *cfgtmp2, *cfgtmp3; char *tmp, *tmp2, *tmp3;
opt_type *buf;
/* Client misc */ /* Client misc */
conf.client.borderheight = (cfg_getint(cfg_c, "border_height")) ? cfg_getint(cfg_c, "border_height") : 1; conf.client.borderheight = (get_opt(src, "1", "border_height").num) ? get_opt(src, "1", "border_height").num : 1;
conf.client.border_shadow = cfg_getbool(cfg_c, "border_shadow"); conf.client.border_shadow = get_opt(src, "false", "border_shadow").bool;
conf.client.place_at_mouse = cfg_getbool(cfg_c, "place_at_mouse"); conf.client.place_at_mouse = get_opt(src, "false", "place_at_mouse").bool;
conf.client.bordernormal = getcolor(alias_to_str(cfg_getstr(cfg_c, "border_normal"))); conf.client.bordernormal = getcolor(get_opt(src, "#000000", "border_normal").str);
conf.client.borderfocus = getcolor(alias_to_str(cfg_getstr(cfg_c, "border_focus"))); conf.client.borderfocus = getcolor(get_opt(src, "#ffffff", "border_focus").str);
conf.client.resizecorner_normal = getcolor(alias_to_str(cfg_getstr(cfg_c, "resize_corner_normal"))); conf.client.resizecorner_normal = getcolor(get_opt(src, "#222222", "resize_corner_normal").str);
conf.client.resizecorner_focus = getcolor(alias_to_str(cfg_getstr(cfg_c, "resize_corner_focus"))); conf.client.resizecorner_focus = getcolor(get_opt(src, "#DDDDDD", "resize_corner_focus").str);
conf.client.mod |= char_to_modkey(cfg_getstr(cfg_c, "modifier"), key_list); conf.client.mod |= char_to_modkey(get_opt(src, "Alt", "modifier").str, key_list);
if((conf.client.nmouse = cfg_size(cfg_c, "mouse"))) if((conf.client.nmouse = get_size_sec(src, "mouse")))
{ {
conf.client.mouse = emalloc(conf.client.nmouse, sizeof(MouseBinding)); conf.client.mouse = emalloc(conf.client.nmouse, sizeof(MouseBinding));
mouse_section(conf.client.mouse, cfg_c, conf.client.nmouse); mouse_section(conf.client.mouse, src, conf.client.nmouse);
} }
/* Titlebar part {{ */ /* Titlebar part {{ */
cfgtmp = cfg_getsec(cfg_c, "titlebar"); tmp = get_sec(src, "titlebar");
conf.titlebar.height = cfg_getint(cfgtmp, "height"); conf.titlebar.height = get_opt(tmp, "0", "height").num;
conf.titlebar.fg_normal = alias_to_str(cfg_getstr(cfgtmp, "fg_normal")); conf.titlebar.fg_normal = get_opt(tmp, "#ffffff", "fg_normal").str;
conf.titlebar.fg_focus = alias_to_str(cfg_getstr(cfgtmp, "fg_focus")); conf.titlebar.fg_focus = get_opt(tmp, "#000000", "fg_focus").str;
/* Stipple */ /* Stipple */
conf.titlebar.stipple.active = cfg_getbool(cfgtmp, "stipple"); conf.titlebar.stipple.active = get_opt(tmp, "false", "stipple").bool;
if(!strcmp(alias_to_str(cfg_getstr(cfgtmp, "stipple_normal")), "-1")) if(!strcmp(get_opt(tmp, "-1", "stipple_normal").str, "-1"))
conf.titlebar.stipple.colors.normal = getcolor(conf.titlebar.fg_normal); conf.titlebar.stipple.colors.normal = getcolor(conf.titlebar.fg_normal);
else else
conf.titlebar.stipple.colors.normal = getcolor(alias_to_str(cfg_getstr(cfgtmp, "stipple_normal"))); conf.titlebar.stipple.colors.normal = getcolor(get_opt(tmp, "-1", "stipple_normal").str);
if(!strcmp(alias_to_str(cfg_getstr(cfgtmp, "stipple_focus")), "-1")) if(!strcmp(get_opt(tmp, "-1", "stipple_focus").str, "-1"))
conf.titlebar.stipple.colors.focus = getcolor(conf.titlebar.fg_focus); conf.titlebar.stipple.colors.focus = getcolor(conf.titlebar.fg_focus);
else else
conf.titlebar.stipple.colors.focus = getcolor(alias_to_str(cfg_getstr(cfgtmp, "stipple_focus"))); conf.titlebar.stipple.colors.focus = getcolor(get_opt(tmp, "-1", "stipple_focus").str);
if((conf.titlebar.nmouse = cfg_size(cfgtmp, "mouse"))) if((conf.titlebar.nmouse = get_size_sec(tmp, "mouse")))
{ {
conf.titlebar.mouse = emalloc(conf.titlebar.nmouse, sizeof(MouseBinding)); conf.titlebar.mouse = emalloc(conf.titlebar.nmouse, sizeof(MouseBinding));
mouse_section(conf.titlebar.mouse, cfgtmp, conf.titlebar.nmouse); mouse_section(conf.titlebar.mouse, tmp, conf.titlebar.nmouse);
} }
/* Multi button part */ /* Multi button part */
if((conf.titlebar.nbutton = cfg_size(cfgtmp, "button"))) if((conf.titlebar.nbutton = get_size_sec(tmp, "button")))
{ {
conf.titlebar.button = emalloc(conf.titlebar.nbutton, sizeof(Button)); conf.titlebar.button = emalloc(conf.titlebar.nbutton, sizeof(Button));
for(i = 0; i < conf.titlebar.nbutton; ++i) for(i = 0; i < conf.titlebar.nbutton; ++i)
{ {
cfgtmp2 = cfg_getnsec(cfgtmp, "button", i); tmp2 = get_nsec(tmp, "button", i);
/* Multi mouse section */ /* Multi mouse section */
if((conf.titlebar.button[i].nmouse = cfg_size(cfgtmp2, "mouse"))) if((conf.titlebar.button[i].nmouse = get_size_sec(tmp2, "mouse")))
{ {
conf.titlebar.button[i].mouse = emalloc(conf.titlebar.button[i].nmouse, sizeof(MouseBinding)); conf.titlebar.button[i].mouse = emalloc(conf.titlebar.button[i].nmouse, sizeof(MouseBinding));
mouse_section(conf.titlebar.button[i].mouse, cfgtmp2, conf.titlebar.button[i].nmouse); mouse_section(conf.titlebar.button[i].mouse, tmp2, conf.titlebar.button[i].nmouse);
} }
/* Multi line section */ /* Multi line section */
if((conf.titlebar.button[i].nlines = cfg_size(cfgtmp2, "line"))) if((conf.titlebar.button[i].nlines = get_size_sec(tmp2, "line")))
{ {
conf.titlebar.button[i].linecoord = emalloc(conf.titlebar.button[i].nlines, sizeof(XSegment)); conf.titlebar.button[i].linecoord = emalloc(conf.titlebar.button[i].nlines, sizeof(XSegment));
for(j = 0; j < conf.titlebar.button[i].nlines; ++j) for(j = 0; j < conf.titlebar.button[i].nlines; ++j)
{ {
cfgtmp3 = cfg_getnsec(cfgtmp2, "line", j); tmp3 = get_nsec(tmp2, "line", j);
conf.titlebar.button[i].linecoord[j].x1 = cfg_getnint(cfgtmp3, "coord", 0); buf = get_list_opt(tmp3, "{0, 0, 0, 0}", "coord", &d);
conf.titlebar.button[i].linecoord[j].y1 = cfg_getnint(cfgtmp3, "coord", 1);
conf.titlebar.button[i].linecoord[j].x2 = cfg_getnint(cfgtmp3, "coord", 2); conf.titlebar.button[i].linecoord[j].x1 = buf[0].num;
conf.titlebar.button[i].linecoord[j].y2 = cfg_getnint(cfgtmp3, "coord", 3); conf.titlebar.button[i].linecoord[j].y1 = buf[1].num;
conf.titlebar.button[i].linecoord[j].x2 = buf[2].num;
conf.titlebar.button[i].linecoord[j].y2 = buf[3].num;
} }
} }
} }
@ -265,9 +255,10 @@ conf_client_section(cfg_t *cfg_c)
} }
void void
conf_layout_section(cfg_t *cfg_l) conf_layout_section(char *src)
{ {
int i; int i;
char *tmp = NULL;
/* Set conf.layout NULL for conf reload */ /* Set conf.layout NULL for conf reload */
for(i = 0; i < NUM_OF_LAYOUT; ++i) for(i = 0; i < NUM_OF_LAYOUT; ++i)
@ -276,15 +267,15 @@ conf_layout_section(cfg_t *cfg_l)
conf.layout[i].func = NULL; conf.layout[i].func = NULL;
} }
conf.border.layout = cfg_getbool(cfg_l, "border"); conf.border.layout = get_opt(src, "false", "border").bool;
conf.colors.layout_fg = _strdup(alias_to_str(cfg_getstr(cfg_l, "fg"))); conf.colors.layout_fg = get_opt(src, "#ffffff", "fg").str;
conf.colors.layout_bg = getcolor(alias_to_str(cfg_getstr(cfg_l, "bg"))); conf.colors.layout_bg = getcolor((get_opt(src, "#000000", "bg").str));
if(strcmp(_strdup(alias_to_str(cfg_getstr(cfg_l, "system"))), "menu") == 0) if(strcmp(get_opt(src, "menu", "system").str, "menu") == 0)
conf.layout_system = True; conf.layout_system = True;
if((conf.nlayout = cfg_size(cfg_l, "layout")) > NUM_OF_LAYOUT if((conf.nlayout = get_size_sec(src, "layout")) > NUM_OF_LAYOUT
|| !(conf.nlayout = cfg_size(cfg_l, "layout"))) || !(conf.nlayout = get_size_sec(src, "layout")))
{ {
fprintf(stderr, "WMFS Configuration: Too many or no layouts (%d)\n", conf.nlayout); fprintf(stderr, "WMFS Configuration: Too many or no layouts (%d)\n", conf.nlayout);
conf.nlayout = 1; conf.nlayout = 1;
@ -293,6 +284,7 @@ conf_layout_section(cfg_t *cfg_l)
} }
if(conf.layout_system && conf.nlayout > 1) if(conf.layout_system && conf.nlayout > 1)
{
menu_init(&menulayout, "menulayout", conf.nlayout, menu_init(&menulayout, "menulayout", conf.nlayout,
/* Colors */ /* Colors */
conf.colors.layout_bg, conf.colors.layout_bg,
@ -300,27 +292,29 @@ conf_layout_section(cfg_t *cfg_l)
conf.colors.bar, conf.colors.bar,
conf.colors.text); conf.colors.text);
if(!conf.layout[0].symbol if(!conf.layout[0].symbol
&& !conf.layout[0].func) && !conf.layout[0].func)
{
for(i = 0; i < conf.nlayout; ++i)
{ {
cfgtmp = cfg_getnsec(cfg_l, "layout", i); for(i = 0; i < conf.nlayout; ++i)
if(!name_to_func(_strdup(cfg_getstr(cfgtmp, "type")), layout_list))
{ {
fprintf(stderr, "WMFS Configuration: Unknow Layout type: \"%s\"\n", tmp = get_nsec(src, "layout", i);
_strdup(cfg_getstr(cfgtmp, "type")));
exit(EXIT_FAILURE);
}
else
{
if(conf.layout_system && conf.nlayout > 1)
menu_new_item(&menulayout.item[i],
_strdup(alias_to_str(cfg_getstr(cfgtmp, "symbol"))),
uicb_set_layout, _strdup(cfg_getstr(cfgtmp, "type")));
conf.layout[i].symbol = _strdup(alias_to_str(cfg_getstr(cfgtmp, "symbol"))); if(!name_to_func(get_opt(tmp, "", "type").str, layout_list))
conf.layout[i].func = name_to_func(_strdup(cfg_getstr(cfgtmp, "type")), layout_list); {
fprintf(stderr, "WMFS Configuration: Unknow Layout type: \"%s\"\n",
get_opt(tmp, "", "type").str);
/* exit(EXIT_FAILURE); */
}
else
{
if(conf.layout_system && conf.nlayout > 1)
menu_new_item(&menulayout.item[i], get_opt(tmp, "", "symbol").str,
uicb_set_layout,
get_opt(tmp, "", "type").str);
conf.layout[i].symbol = get_opt(tmp, "", "symbol").str;
conf.layout[i].func = name_to_func(get_opt(tmp, "", "type").str, layout_list);
}
} }
} }
} }
@ -329,10 +323,11 @@ conf_layout_section(cfg_t *cfg_l)
} }
void void
conf_tag_section(cfg_t *cfg_t) conf_tag_section(char *src)
{ {
int i, j, k, l = 0, m, n; int i, j, k, l = 0, m, n;
char *tmp; char *cfgtmp, *tmp;
opt_type *buf;
/* If there is no tag in the conf or more than /* If there is no tag in the conf or more than
* MAXTAG (32) print an error and create only one. * MAXTAG (32) print an error and create only one.
@ -341,11 +336,11 @@ conf_tag_section(cfg_t *cfg_t)
0.50, 1, False, False, IB_Top, 0.50, 1, False, False, IB_Top,
layout_name_to_struct(conf.layout, "tile_right", conf.nlayout, layout_list) }; layout_name_to_struct(conf.layout, "tile_right", conf.nlayout, layout_list) };
conf.tag_round = cfg_getbool(cfg_t, "tag_round"); conf.tag_round = get_opt(src, "false", "tag_round").bool;
conf.colors.tagselfg = _strdup(alias_to_str(cfg_getstr(cfg_t, "sel_fg"))); conf.colors.tagselfg = get_opt(src, "#ffffff", "sel_fg").str;
conf.colors.tagselbg = getcolor(alias_to_str(cfg_getstr(cfg_t, "sel_bg"))); conf.colors.tagselbg = getcolor(get_opt(src, "#000000", "sel_bg").str);
conf.colors.tag_occupied_bg = getcolor(alias_to_str(cfg_getstr(cfg_t, "occupied_bg"))); conf.colors.tag_occupied_bg = getcolor(get_opt(src, "#222222", "occupied_bg").str);
conf.border.tag = cfg_getbool(cfg_t, "border"); conf.border.tag = get_opt(src, "false", "border").bool;
/* Alloc all */ /* Alloc all */
conf.ntag = emalloc(screen_count(), sizeof(int)); conf.ntag = emalloc(screen_count(), sizeof(int));
@ -356,12 +351,14 @@ conf_tag_section(cfg_t *cfg_t)
seltag[i] = 1; seltag[i] = 1;
for(i = 0; i < screen_count(); ++i) for(i = 0; i < screen_count(); ++i)
tags[i] = emalloc(cfg_size(cfg_t, "tag") + 2, sizeof(Tag)); tags[i] = emalloc(get_size_sec(src, "tag") + 2, sizeof(Tag));
for(i = 0; i < cfg_size(cfg_t, "tag"); ++i) for(i = 0; i < get_size_sec(src, "tag"); ++i)
{ {
cfgtmp = cfg_getnsec(cfg_t, "tag", i); /* printf("%d -> %s\n", i, (cfgtmp = get_nsec(src, "tag", i)));*/
j = cfg_getint(cfgtmp, "screen"); cfgtmp = get_nsec(src, "tag", i);
j = get_opt(cfgtmp, "-1", "screen").num;
if(j < 0 || j > screen_count() - 1) if(j < 0 || j > screen_count() - 1)
j = -1; j = -1;
@ -370,33 +367,33 @@ conf_tag_section(cfg_t *cfg_t)
((j == -1) ? ++k : --l)) ((j == -1) ? ++k : --l))
{ {
++conf.ntag[k]; ++conf.ntag[k];
tags[k][conf.ntag[k]].name = _strdup(cfg_getstr(cfgtmp, "name")); tags[k][conf.ntag[k]].name = get_opt(cfgtmp, "", "name").str;
tags[k][conf.ntag[k]].mwfact = cfg_getfloat(cfgtmp, "mwfact"); tags[k][conf.ntag[k]].mwfact = get_opt(cfgtmp, "0.65", "mwfact").fnum;
tags[k][conf.ntag[k]].nmaster = cfg_getint(cfgtmp, "nmaster"); tags[k][conf.ntag[k]].nmaster = get_opt(cfgtmp, "1", "nmaster").num;
tags[k][conf.ntag[k]].resizehint = cfg_getbool(cfgtmp, "resizehint"); tags[k][conf.ntag[k]].resizehint = get_opt(cfgtmp, "false", "resizehint").bool;
tmp = _strdup(cfg_getstr(cfgtmp, "infobar_position")); tmp = _strdup(get_opt(cfgtmp, "top", "infobar_position").str);
if(!strcmp(tmp ,"none") if(!strcmp(tmp ,"none") || !strcmp(tmp, "hide") || !strcmp(tmp, "hidden"))
|| !strcmp(tmp, "hide")
|| !strcmp(tmp, "hidden"))
tags[k][conf.ntag[k]].barpos = IB_Hide; tags[k][conf.ntag[k]].barpos = IB_Hide;
else if(!strcmp(tmp, "bottom") else if(!strcmp(tmp, "bottom") || !strcmp(tmp, "down"))
|| !strcmp(tmp, "down"))
tags[k][conf.ntag[k]].barpos = IB_Bottom; tags[k][conf.ntag[k]].barpos = IB_Bottom;
else else
tags[k][conf.ntag[k]].barpos = IB_Top; tags[k][conf.ntag[k]].barpos = IB_Top;
tags[k][conf.ntag[k]].layout = layout_name_to_struct(conf.layout, cfg_getstr(cfgtmp, "layout"), tags[k][conf.ntag[k]].layout = layout_name_to_struct(conf.layout,
conf.nlayout, layout_list); get_opt(cfgtmp, "tile_right", "layout").str,
conf.nlayout,
layout_list);
/* Clients list */ /* Clients list */
if((n = cfg_size(cfgtmp, "clients"))) buf = get_list_opt(cfgtmp, "", "clients", &n);
if(n)
{ {
tags[k][conf.ntag[k]].nclients = n; tags[k][conf.ntag[k]].nclients = n;
tags[k][conf.ntag[k]].clients = emalloc(n, sizeof(char *)); tags[k][conf.ntag[k]].clients = emalloc(n, sizeof(char *));
for(m = 0; m < n; ++m) for(m = 0; m < n; ++m)
tags[k][conf.ntag[k]].clients[m] = _strdup(cfg_getnstr(cfgtmp, "clients", m)); tags[k][conf.ntag[k]].clients[m] = (buf[m].str) ? buf[m].str : NULL;
} }
} }
@ -417,45 +414,42 @@ conf_tag_section(cfg_t *cfg_t)
} }
void void
conf_menu_section(cfg_t *cfg_m) conf_menu_section(char *src)
{ {
cfg_t *cfgtmp2; char *tmp, *tmp2;
int i, j; int i, j;
conf.nmenu = cfg_size(cfg_m, "set_menu"); CHECK((conf.nmenu = get_size_sec(src, "set_menu")));
CHECK(conf.nmenu);
conf.menu = emalloc(conf.nmenu, sizeof(Menu)); conf.menu = calloc(conf.nmenu, sizeof(Menu));
for(i = 0; i < conf.nmenu; ++i) for(i = 0; i < conf.nmenu; ++i)
{ {
cfgtmp = cfg_getnsec(cfg_m, "set_menu", i); tmp = get_nsec(src, "set_menu", i);
conf.menu[i].name = _strdup(cfg_getstr(cfgtmp, "name")); conf.menu[i].name = get_opt(tmp, "menu_wname", "name").str;
if(!(conf.menu[i].place_at_mouse = cfg_getbool(cfgtmp, "place_at_mouse"))) if(!(conf.menu[i].place_at_mouse = get_opt(tmp, "true", "place_at_mouse").bool))
{ {
conf.menu[i].x = cfg_getint(cfgtmp, "x"); conf.menu[i].x = get_opt(tmp, "0", "x").num;
conf.menu[i].y = cfg_getint(cfgtmp, "y"); conf.menu[i].y = get_opt(tmp, "0", "y").num;
} }
conf.menu[i].colors.focus.bg = getcolor(alias_to_str(_strdup(cfg_getstr(cfgtmp, "bg_focus")))); conf.menu[i].colors.focus.bg = getcolor(get_opt(tmp, "#000000", "bg_focus").str);
conf.menu[i].colors.focus.fg = _strdup(alias_to_str(cfg_getstr(cfgtmp, "fg_focus"))); conf.menu[i].colors.focus.fg = get_opt(tmp, "#ffffff", "fg_focus").str;
conf.menu[i].colors.normal.bg = getcolor(alias_to_str(_strdup(cfg_getstr(cfgtmp, "bg_normal")))); conf.menu[i].colors.normal.bg = getcolor(get_opt(tmp, "#000000", "bg_normal").str);
conf.menu[i].colors.normal.fg = _strdup(alias_to_str(cfg_getstr(cfgtmp, "fg_normal"))); conf.menu[i].colors.normal.fg = get_opt(tmp, "#ffffff", "fg_normal").str;
conf.menu[i].nitem = cfg_size(cfgtmp, "item"); if((conf.menu[i].nitem = get_size_sec(tmp, "item")))
if(conf.menu[i].nitem)
{ {
conf.menu[i].item = emalloc(conf.menu[i].nitem, sizeof(MenuItem)); conf.menu[i].item = emalloc(conf.menu[i].nitem, sizeof(MenuItem));
for(j = 0; j < cfg_size(cfgtmp, "item"); ++j) for(j = 0; j < get_size_sec(tmp, "item"); ++j)
{ {
cfgtmp2 = cfg_getnsec(cfgtmp, "item", j); tmp2 = get_nsec(tmp, "item", j);
conf.menu[i].item[j].name = _strdup(cfg_getstr(cfgtmp2, "name")); conf.menu[i].item[j].name = get_opt(tmp2, "item_wname", "name").str;
conf.menu[i].item[j].func = name_to_func(_strdup(cfg_getstr(cfgtmp2, "func")), func_list); conf.menu[i].item[j].func = name_to_func(get_opt(tmp2, "", "func").str, func_list);
conf.menu[i].item[j].cmd = (!_strdup(alias_to_str((cfg_getstr(cfgtmp2, "cmd")))) conf.menu[i].item[j].cmd = (!get_opt(tmp2, "", "cmd").str) ? NULL : get_opt(tmp2, "", "cmd").str;
? NULL : _strdup(alias_to_str(cfg_getstr(cfgtmp2, "cmd"))));
} }
} }
} }
@ -464,90 +458,94 @@ conf_menu_section(cfg_t *cfg_m)
} }
void void
conf_launcher_section(cfg_t *cfg_l) conf_launcher_section(char *src)
{ {
int i; int i;
char *tmp;
CHECK((conf.nlauncher = get_size_sec(src, "set_launcher")));
conf.nlauncher = cfg_size(cfg_l, "set_launcher");
CHECK(conf.nlauncher);
conf.launcher = emalloc(conf.nlauncher, sizeof(Launcher)); conf.launcher = emalloc(conf.nlauncher, sizeof(Launcher));
for(i = 0; i < conf.nlauncher; ++i) for(i = 0; i < conf.nlauncher; ++i)
{ {
cfgtmp = cfg_getnsec(cfg_l, "set_launcher", i); tmp = get_nsec(src, "set_launcher", i);
conf.launcher[i].name = alias_to_str(_strdup(cfg_getstr(cfgtmp, "name"))); conf.launcher[i].name = get_opt(tmp, "launcher", "name").str;
conf.launcher[i].prompt = alias_to_str(_strdup(cfg_getstr(cfgtmp, "prompt"))); conf.launcher[i].prompt = get_opt(tmp, "Exec:", "prompt").str;
conf.launcher[i].command = alias_to_str(_strdup(cfg_getstr(cfgtmp, "command"))); conf.launcher[i].command = get_opt(tmp, "exec", "command").str;
} }
return; return;
} }
void void
conf_keybind_section(cfg_t *cfg_k) conf_keybind_section(char *src)
{ {
int i, j; int i, j, n = 0;
char *tmp;
opt_type *buf;
conf.nkeybind = cfg_size(cfg_k, "key"); conf.nkeybind = get_size_sec(src, "key");
keys = emalloc(conf.nkeybind, sizeof(Key)); keys = emalloc(conf.nkeybind, sizeof(Key));
for(i = 0; i < conf.nkeybind; ++i) for(i = 0; i < conf.nkeybind; ++i)
{ {
cfgtmp = cfg_getnsec(cfg_k, "key", i); tmp = get_nsec(src, "key", i);
buf = get_list_opt(tmp, "{Control}", "mod", &n);
for(j = 0; j < cfg_size(cfgtmp, "mod"); ++j) for(j = 0; j < n; ++j)
keys[i].mod |= char_to_modkey(cfg_getnstr(cfgtmp, "mod", j), key_list); keys[i].mod |= char_to_modkey(buf[j].str, key_list);
keys[i].keysym = XStringToKeysym(get_opt(tmp, "None", "key").str);
keys[i].func = name_to_func(get_opt(tmp, "", "func").str, func_list);
keys[i].keysym = XStringToKeysym(cfg_getstr(cfgtmp, "key"));
keys[i].func = name_to_func(cfg_getstr(cfgtmp, "func"), func_list);
if(keys[i].func == NULL) if(keys[i].func == NULL)
{ {
fprintf(stderr, "WMFS Configuration error: Unknow Function \"%s\"\n", fprintf(stderr, "WMFS Configuration warning: Unknow Function \"%s\"\n", get_opt(tmp, "", "func").str);
cfg_getstr(cfgtmp, "func")); keys[i].func = uicb_spawn;
exit(EXIT_FAILURE);
} }
keys[i].cmd = (!_strdup(alias_to_str((cfg_getstr(cfgtmp, "cmd")))) keys[i].cmd = (!get_opt(tmp, "", "cmd").str) ? NULL : get_opt(tmp, "", "cmd").str;
? NULL : _strdup(alias_to_str(cfg_getstr(cfgtmp, "cmd"))));
} }
return; return;
} }
/* }}} */
/** Configuration initialization /** Configuration initialization
*/ */
void void
init_conf(void) init_conf(void)
{ {
int ret; char *file;
cfg = cfg_init(opts, CFGF_NONE); if(!(file = file_to_str(conf.confpath)))
ret = cfg_parse(cfg, conf.confpath);
if(ret == CFG_FILE_ERROR || ret == CFG_PARSE_ERROR)
{ {
fprintf(stderr, "WMFS: parsing configuration file (%s) failed\n", conf.confpath); fprintf(stderr, "WMFS: parsing configuration file (%s) failed\n", conf.confpath);
sprintf(conf.confpath, "%s/wmfs/wmfsrc", XDG_CONFIG_DIR); sprintf(conf.confpath, "%s/wmfs/wmfsrc", XDG_CONFIG_DIR);
fprintf(stderr, "Use the default configuration (%s).\n", conf.confpath); fprintf(stderr, "Use the default configuration (%s).\n", conf.confpath);
cfg = cfg_init(opts, CFGF_NONE); file = file_to_str(conf.confpath);
ret = cfg_parse(cfg, conf.confpath);
} }
conf_init_func_list(); /* Set func_list */
func_list = emalloc(LEN(tmp_func_list), sizeof(func_name_list_t));
memcpy(func_list, tmp_func_list, LEN(tmp_func_list) * sizeof(func_name_list_t));
conf_alias_section(cfg_getsec(cfg, "alias")); conf_misc_section(get_sec(file, "misc"));
conf_misc_section(cfg_getsec(cfg, "misc")); conf_bar_section(get_sec(file, "bar"));
conf_bar_section(cfg_getsec(cfg, "bar")); conf_root_section(get_sec(file, "root"));
conf_root_section(cfg_getsec(cfg, "root")); conf_client_section(get_sec(file, "client"));
conf_client_section(cfg_getsec(cfg, "client")); conf_layout_section(get_sec(file, "layouts"));
conf_layout_section(cfg_getsec(cfg, "layouts")); conf_tag_section(get_sec(file, "tags"));
conf_tag_section(cfg_getsec(cfg, "tags")); conf_menu_section(get_sec(file, "menu"));
conf_menu_section(cfg_getsec(cfg, "menu")); conf_launcher_section(get_sec(file, "launcher"));
conf_launcher_section(cfg_getsec(cfg, "launcher")); conf_keybind_section(get_sec(file, "keys"));
conf_keybind_section(cfg_getsec(cfg, "keys"));
cfg_free(cfg); free(file);
return; return;
} }

View File

@ -1,551 +0,0 @@
/*
* config.c
* Copyright © 2008, 2009 Martin Duquesnoy <xorg62@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of the nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "wmfs.h"
func_name_list_t tmp_func_list[] =
{
{"spawn", uicb_spawn },
{"client_kill", uicb_client_kill },
{"client_prev", uicb_client_prev },
{"client_next", uicb_client_next },
{"client_swap_next", uicb_client_swap_next },
{"client_swap_prev", uicb_client_swap_prev },
{"client_screen_next", uicb_client_screen_next },
{"client_screen_prev", uicb_client_screen_prev },
{"toggle_max", uicb_togglemax },
{"layout_next", uicb_layout_next },
{"layout_prev", uicb_layout_prev },
{"tag", uicb_tag },
{"tag_next", uicb_tag_next },
{"tag_prev", uicb_tag_prev },
{"tag_transfert", uicb_tagtransfert },
{"set_mwfact", uicb_set_mwfact },
{"set_nmaster", uicb_set_nmaster },
{"quit", uicb_quit },
{"toggle_infobar_position", uicb_infobar_togglepos },
{"toggle_resizehint", uicb_toggle_resizehint },
{"mouse_move", uicb_mouse_move },
{"mouse_resize", uicb_mouse_resize },
{"client_raise", uicb_client_raise },
{"toggle_free", uicb_togglefree },
{"screen_select", uicb_screen_select },
{"screen_next", uicb_screen_next },
{"screen_prev", uicb_screen_prev },
{"reload", uicb_reload },
{"launcher", uicb_launcher },
{"set_layout", uicb_set_layout },
{"menu", uicb_menu }
};
key_name_list_t key_list[] =
{
{"Control", ControlMask },
{"Shift", ShiftMask },
{"Lock", LockMask },
{"Alt", Mod1Mask },
{"Mod2", Mod2Mask },
{"Mod3", Mod3Mask },
{"Mod4", Mod4Mask },
{"Super", Mod4Mask },
{"Mod5", Mod5Mask },
{NULL, NoSymbol }
};
name_to_uint_t mouse_button_list[] =
{
{"Button1", Button1 },
{"Button2", Button2 },
{"Button3", Button3 },
{"Button4", Button4 },
{"Button5", Button5 },
{"1", Button1 },
{"2", Button2 },
{"3", Button3 },
{"4", Button4 },
{"5", Button5 },
};
void
mouse_section(MouseBinding mb[], char *src, int ns)
{
int i;
char *tmp;
for(i = 0; i < ns; ++i)
{
tmp = get_nsec(src, "mouse", i);
mb[i].tag = get_opt(tmp, "-1", "tag").num;
mb[i].screen = get_opt(tmp, "-1", "screen").num;
mb[i].button = char_to_button(get_opt(tmp, "1", "button").str, mouse_button_list);
mb[i].func = name_to_func(get_opt(tmp, "", "func").str, func_list);
mb[i].cmd = get_opt(tmp, "", "cmd").str;
}
return;
}
void
conf_misc_section(char *src)
{
int pad = 12;
conf.font = get_opt(src, "sans-9", "font").str;
conf.raisefocus = get_opt(src, "false", "raisefocus").bool;
conf.raiseswitch = get_opt(src, "false", "raiseswitch").bool;
conf.focus_fmouse = get_opt(src, "true", "focus_follow_mouse").bool;
pad = get_opt(src, "12", "pad").num;
if(pad > 24 || pad < 1)
{
fprintf(stderr, "WMFS Configuration: pad value (%d) incorrect.\n", pad);
pad = 12;
}
conf.pad = pad;
return;
}
void
conf_bar_section(char *src)
{
conf.border.bar = get_opt(src, "false", "border").bool;
conf.bars.height = get_opt(src, "-1", "height").num;
conf.colors.bar = getcolor(get_opt(src, "#000000", "bg").str);
conf.colors.text = get_opt(src, "#ffffff", "fg").str;
if((conf.bars.nmouse = get_size_sec(src, "mouse")))
{
conf.bars.mouse = emalloc(conf.bars.nmouse, sizeof(MouseBinding));
mouse_section(conf.bars.mouse, src, conf.bars.nmouse);
}
return;
}
void
conf_root_section(char *src)
{
conf.root.background_command = get_opt(src, "", "background_command").str;
if((conf.root.nmouse = get_size_sec(src, "mouse")))
{
conf.root.mouse = emalloc(conf.root.nmouse, sizeof(MouseBinding));
mouse_section(conf.root.mouse, src, conf.root.nmouse);
}
return;
}
void
conf_client_section(char *src)
{
int i, j, d;
char *tmp, *tmp2, *tmp3;
opt_type *buf;
/* Client misc */
conf.client.borderheight = (get_opt(src, "1", "border_height").num) ? get_opt(src, "1", "border_height").num : 1;
conf.client.border_shadow = get_opt(src, "false", "border_shadow").bool;
conf.client.place_at_mouse = get_opt(src, "false", "place_at_mouse").bool;
conf.client.bordernormal = getcolor(get_opt(src, "#000000", "border_normal").str);
conf.client.borderfocus = getcolor(get_opt(src, "#ffffff", "border_focus").str);
conf.client.resizecorner_normal = getcolor(get_opt(src, "#222222", "resize_corner_normal").str);
conf.client.resizecorner_focus = getcolor(get_opt(src, "#DDDDDD", "resize_corner_focus").str);
conf.client.mod |= char_to_modkey(get_opt(src, "Alt", "modifier").str, key_list);
if((conf.client.nmouse = get_size_sec(src, "mouse")))
{
conf.client.mouse = emalloc(conf.client.nmouse, sizeof(MouseBinding));
mouse_section(conf.client.mouse, src, conf.client.nmouse);
}
/* Titlebar part {{ */
tmp = get_sec(src, "titlebar");
conf.titlebar.height = get_opt(tmp, "0", "height").num;
conf.titlebar.fg_normal = get_opt(tmp, "#ffffff", "fg_normal").str;
conf.titlebar.fg_focus = get_opt(tmp, "#000000", "fg_focus").str;
/* Stipple */
conf.titlebar.stipple.active = get_opt(tmp, "false", "stipple").bool;
if(!strcmp(get_opt(tmp, "-1", "stipple_normal").str, "-1"))
conf.titlebar.stipple.colors.normal = getcolor(conf.titlebar.fg_normal);
else
conf.titlebar.stipple.colors.normal = getcolor(get_opt(tmp, "-1", "stipple_normal").str);
if(!strcmp(get_opt(tmp, "-1", "stipple_focus").str, "-1"))
conf.titlebar.stipple.colors.focus = getcolor(conf.titlebar.fg_focus);
else
conf.titlebar.stipple.colors.focus = getcolor(get_opt(tmp, "-1", "stipple_focus").str);
if((conf.titlebar.nmouse = get_size_sec(tmp, "mouse")))
{
conf.titlebar.mouse = emalloc(conf.titlebar.nmouse, sizeof(MouseBinding));
mouse_section(conf.titlebar.mouse, tmp, conf.titlebar.nmouse);
}
/* Multi button part */
if((conf.titlebar.nbutton = get_size_sec(tmp, "button")))
{
conf.titlebar.button = emalloc(conf.titlebar.nbutton, sizeof(Button));
for(i = 0; i < conf.titlebar.nbutton; ++i)
{
tmp2 = get_nsec(tmp, "button", i);
/* Multi mouse section */
if((conf.titlebar.button[i].nmouse = get_size_sec(tmp2, "mouse")))
{
conf.titlebar.button[i].mouse = emalloc(conf.titlebar.button[i].nmouse, sizeof(MouseBinding));
mouse_section(conf.titlebar.button[i].mouse, tmp2, conf.titlebar.button[i].nmouse);
}
/* Multi line section */
if((conf.titlebar.button[i].nlines = get_size_sec(tmp2, "line")))
{
conf.titlebar.button[i].linecoord = emalloc(conf.titlebar.button[i].nlines, sizeof(XSegment));
for(j = 0; j < conf.titlebar.button[i].nlines; ++j)
{
tmp3 = get_nsec(tmp2, "line", j);
buf = get_list_opt(tmp3, "{0, 0, 0, 0}", "coord", &d);
conf.titlebar.button[i].linecoord[j].x1 = buf[0].num;
conf.titlebar.button[i].linecoord[j].y1 = buf[1].num;
conf.titlebar.button[i].linecoord[j].x2 = buf[2].num;
conf.titlebar.button[i].linecoord[j].y2 = buf[3].num;
}
}
}
}
/* }} */
return;
}
void
conf_layout_section(char *src)
{
int i;
char *tmp = NULL;
/* Set conf.layout NULL for conf reload */
for(i = 0; i < NUM_OF_LAYOUT; ++i)
{
conf.layout[i].symbol = NULL;
conf.layout[i].func = NULL;
}
conf.border.layout = get_opt(src, "false", "border").bool;
conf.colors.layout_fg = get_opt(src, "#ffffff", "fg").str;
conf.colors.layout_bg = getcolor((get_opt(src, "#000000", "bg").str));
if(strcmp(get_opt(src, "menu", "system").str, "menu") == 0)
conf.layout_system = True;
if((conf.nlayout = get_size_sec(src, "layout")) > NUM_OF_LAYOUT
|| !(conf.nlayout = get_size_sec(src, "layout")))
{
fprintf(stderr, "WMFS Configuration: Too many or no layouts (%d)\n", conf.nlayout);
conf.nlayout = 1;
conf.layout[0].symbol = _strdup("TILE");
conf.layout[0].func = tile;
}
if(conf.layout_system && conf.nlayout > 1)
{
menu_init(&menulayout, "menulayout", conf.nlayout,
/* Colors */
conf.colors.layout_bg,
conf.colors.layout_fg,
conf.colors.bar,
conf.colors.text);
if(!conf.layout[0].symbol
&& !conf.layout[0].func)
{
for(i = 0; i < conf.nlayout; ++i)
{
tmp = get_nsec(src, "layout", i);
if(!name_to_func(get_opt(tmp, "", "type").str, layout_list))
{
fprintf(stderr, "WMFS Configuration: Unknow Layout type: \"%s\"\n",
get_opt(tmp, "", "type").str);
/* exit(EXIT_FAILURE); */
}
else
{
if(conf.layout_system && conf.nlayout > 1)
menu_new_item(&menulayout.item[i], get_opt(tmp, "", "symbol").str,
uicb_set_layout,
get_opt(tmp, "", "type").str);
conf.layout[i].symbol = get_opt(tmp, "", "symbol").str;
conf.layout[i].func = name_to_func(get_opt(tmp, "", "type").str, layout_list);
}
}
}
}
return;
}
void
conf_tag_section(char *src)
{
int i, j, k, l = 0, m, n;
char *cfgtmp, *tmp;
opt_type *buf;
/* If there is no tag in the conf or more than
* MAXTAG (32) print an error and create only one.
*/
Tag default_tag = { "WMFS", NULL, 0,
0.50, 1, False, False, IB_Top,
layout_name_to_struct(conf.layout, "tile_right", conf.nlayout, layout_list) };
conf.tag_round = get_opt(src, "false", "tag_round").bool;
conf.colors.tagselfg = get_opt(src, "#ffffff", "sel_fg").str;
conf.colors.tagselbg = getcolor(get_opt(src, "#000000", "sel_bg").str);
conf.colors.tag_occupied_bg = getcolor(get_opt(src, "#222222", "occupied_bg").str);
conf.border.tag = get_opt(src, "false", "border").bool;
/* Alloc all */
conf.ntag = emalloc(screen_count(), sizeof(int));
tags = emalloc(screen_count(), sizeof(Tag*));
seltag = emalloc(screen_count(), sizeof(int));
for(i = 0; i < screen_count(); ++i)
seltag[i] = 1;
for(i = 0; i < screen_count(); ++i)
tags[i] = emalloc(get_size_sec(src, "tag") + 2, sizeof(Tag));
for(i = 0; i < get_size_sec(src, "tag"); ++i)
{
/* printf("%d -> %s\n", i, (cfgtmp = get_nsec(src, "tag", i)));*/
cfgtmp = get_nsec(src, "tag", i);
j = get_opt(cfgtmp, "-1", "screen").num;
if(j < 0 || j > screen_count() - 1)
j = -1;
for(k = ((j == -1) ? 0 : j);
((j == -1) ? (k < screen_count()) : !l);
((j == -1) ? ++k : --l))
{
++conf.ntag[k];
tags[k][conf.ntag[k]].name = get_opt(cfgtmp, "", "name").str;
tags[k][conf.ntag[k]].mwfact = get_opt(cfgtmp, "0.65", "mwfact").fnum;
tags[k][conf.ntag[k]].nmaster = get_opt(cfgtmp, "1", "nmaster").num;
tags[k][conf.ntag[k]].resizehint = get_opt(cfgtmp, "false", "resizehint").bool;
tmp = _strdup(get_opt(cfgtmp, "top", "infobar_position").str);
if(!strcmp(tmp ,"none") || !strcmp(tmp, "hide") || !strcmp(tmp, "hidden"))
tags[k][conf.ntag[k]].barpos = IB_Hide;
else if(!strcmp(tmp, "bottom") || !strcmp(tmp, "down"))
tags[k][conf.ntag[k]].barpos = IB_Bottom;
else
tags[k][conf.ntag[k]].barpos = IB_Top;
tags[k][conf.ntag[k]].layout = layout_name_to_struct(conf.layout,
get_opt(cfgtmp, "tile_right", "layout").str,
conf.nlayout,
layout_list);
/* Clients list */
buf = get_list_opt(cfgtmp, "", "clients", &n);
if(n)
{
tags[k][conf.ntag[k]].nclients = n;
tags[k][conf.ntag[k]].clients = emalloc(n, sizeof(char *));
for(m = 0; m < n; ++m)
tags[k][conf.ntag[k]].clients[m] = (buf[m].str) ? buf[m].str : NULL;
}
}
l = 0;
}
for(i = 0; i < screen_count(); ++i)
if(!conf.ntag[i] || conf.ntag[i] > MAXTAG)
{
fprintf(stderr, "WMFS Configuration: Too many or no tag"
" (%d) in the screen %d\n", conf.ntag[i], i);
conf.ntag[i] = 1;
tags[i][1] = default_tag;
}
return;
}
void
conf_menu_section(char *src)
{
char *tmp, *tmp2;
int i, j;
CHECK((conf.nmenu = get_size_sec(src, "set_menu")));
conf.menu = calloc(conf.nmenu, sizeof(Menu));
for(i = 0; i < conf.nmenu; ++i)
{
tmp = get_nsec(src, "set_menu", i);
conf.menu[i].name = get_opt(tmp, "menu_wname", "name").str;
if(!(conf.menu[i].place_at_mouse = get_opt(tmp, "true", "place_at_mouse").bool))
{
conf.menu[i].x = get_opt(tmp, "0", "x").num;
conf.menu[i].y = get_opt(tmp, "0", "y").num;
}
conf.menu[i].colors.focus.bg = getcolor(get_opt(tmp, "#000000", "bg_focus").str);
conf.menu[i].colors.focus.fg = get_opt(tmp, "#ffffff", "fg_focus").str;
conf.menu[i].colors.normal.bg = getcolor(get_opt(tmp, "#000000", "bg_normal").str);
conf.menu[i].colors.normal.fg = get_opt(tmp, "#ffffff", "fg_normal").str;
if((conf.menu[i].nitem = get_size_sec(tmp, "item")))
{
conf.menu[i].item = emalloc(conf.menu[i].nitem, sizeof(MenuItem));
for(j = 0; j < get_size_sec(tmp, "item"); ++j)
{
tmp2 = get_nsec(tmp, "item", j);
conf.menu[i].item[j].name = get_opt(tmp2, "item_wname", "name").str;
conf.menu[i].item[j].func = name_to_func(get_opt(tmp2, "", "func").str, func_list);
conf.menu[i].item[j].cmd = (!get_opt(tmp2, "", "cmd").str) ? NULL : get_opt(tmp2, "", "cmd").str;
}
}
}
return;
}
void
conf_launcher_section(char *src)
{
int i;
char *tmp;
CHECK((conf.nlauncher = get_size_sec(src, "set_launcher")));
conf.launcher = emalloc(conf.nlauncher, sizeof(Launcher));
for(i = 0; i < conf.nlauncher; ++i)
{
tmp = get_nsec(src, "set_launcher", i);
conf.launcher[i].name = get_opt(tmp, "launcher", "name").str;
conf.launcher[i].prompt = get_opt(tmp, "Exec:", "prompt").str;
conf.launcher[i].command = get_opt(tmp, "exec", "command").str;
}
return;
}
void
conf_keybind_section(char *src)
{
int i, j, n = 0;
char *tmp;
opt_type *buf;
conf.nkeybind = get_size_sec(src, "key");
keys = emalloc(conf.nkeybind, sizeof(Key));
for(i = 0; i < conf.nkeybind; ++i)
{
tmp = get_nsec(src, "key", i);
buf = get_list_opt(tmp, "{Control}", "mod", &n);
for(j = 0; j < n; ++j)
keys[i].mod |= char_to_modkey(buf[j].str, key_list);
keys[i].keysym = XStringToKeysym(get_opt(tmp, "None", "key").str);
keys[i].func = name_to_func(get_opt(tmp, "", "func").str, func_list);
if(keys[i].func == NULL)
{
fprintf(stderr, "WMFS Configuration warning: Unknow Function \"%s\"\n", get_opt(tmp, "", "func").str);
keys[i].func = uicb_spawn;
}
keys[i].cmd = (!get_opt(tmp, "", "cmd").str) ? NULL : get_opt(tmp, "", "cmd").str;
}
return;
}
/** Configuration initialization
*/
void
init_conf(void)
{
char *file;
if(!(file = file_to_str(conf.confpath)))
{
fprintf(stderr, "WMFS: parsing configuration file (%s) failed\n", conf.confpath);
sprintf(conf.confpath, "%s/wmfs/wmfsrc", XDG_CONFIG_DIR);
fprintf(stderr, "Use the default configuration (%s).\n", conf.confpath);
file = file_to_str(conf.confpath);
}
/* Set func_list */
func_list = emalloc(LEN(tmp_func_list), sizeof(func_name_list_t));
memcpy(func_list, tmp_func_list, LEN(tmp_func_list) * sizeof(func_name_list_t));
conf_misc_section(get_sec(file, "misc"));
conf_bar_section(get_sec(file, "bar"));
conf_root_section(get_sec(file, "root"));
conf_client_section(get_sec(file, "client"));
conf_layout_section(get_sec(file, "layouts"));
conf_tag_section(get_sec(file, "tags"));
conf_menu_section(get_sec(file, "menu"));
conf_launcher_section(get_sec(file, "launcher"));
conf_keybind_section(get_sec(file, "keys"));
free(file);
return;
}

View File

@ -1,296 +0,0 @@
/*
* config_struct.h
* Copyright © 2008, 2009 Martin Duquesnoy <xorg62@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of the nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "wmfs.h"
cfg_t *cfg, *cfgtmp;
cfg_opt_t misc_opts[] =
{
CFG_STR("font", "sans-9", CFGF_NONE),
CFG_INT("pad", 12, CFGF_NONE),
CFG_BOOL("raisefocus", cfg_false, CFGF_NONE),
CFG_BOOL("raiseswitch", cfg_true, CFGF_NONE),
CFG_BOOL("focus_follow_mouse", cfg_true, CFGF_NONE),
CFG_END()
};
cfg_opt_t mouse_button_opts[] =
{
CFG_INT("tag", -1, CFGF_NONE),
CFG_INT("screen", -1, CFGF_NONE),
CFG_STR("button", "Button1", CFGF_NONE),
CFG_STR("func", "", CFGF_NONE),
CFG_STR("cmd", "", CFGF_NONE),
CFG_END()
};
cfg_opt_t bar_opts[] =
{
CFG_STR("bg", "#090909", CFGF_NONE),
CFG_STR("fg", "#6289A1", CFGF_NONE),
CFG_INT("height", -1, CFGF_NONE),
CFG_BOOL("border", cfg_false, CFGF_NONE),
CFG_SEC("mouse", mouse_button_opts, CFGF_MULTI),
CFG_END()
};
cfg_opt_t root_opts[] =
{
CFG_STR("background_command", "", CFGF_NONE),
CFG_SEC("mouse", mouse_button_opts, CFGF_MULTI),
CFG_END()
};
/* CLIENT {{{ */
cfg_opt_t line_opts[] =
{
CFG_INT_LIST("coord", "{0, 0, 0, 0}", CFGF_NONE),
CFG_END()
};
cfg_opt_t button_opts[] =
{
CFG_SEC("mouse", mouse_button_opts, CFGF_MULTI),
CFG_SEC("line", line_opts, CFGF_MULTI),
CFG_END()
};
cfg_opt_t titlebar_opts[] =
{
CFG_INT("height", 0, CFGF_NONE),
CFG_BOOL("stipple", cfg_false, CFGF_NONE),
CFG_STR("stipple_normal", "-1", CFGF_NONE),
CFG_STR("stipple_focus", "-1", CFGF_NONE),
CFG_STR("fg_normal", "#FFFFFF", CFGF_NONE),
CFG_STR("fg_focus", "#FFFFFF", CFGF_NONE),
CFG_SEC("mouse", mouse_button_opts, CFGF_MULTI),
CFG_SEC("button", button_opts, CFGF_MULTI),
CFG_END()
};
cfg_opt_t client_opts[]=
{
CFG_BOOL("place_at_mouse", cfg_false, CFGF_NONE),
CFG_BOOL("border_shadow", cfg_false, CFGF_NONE),
CFG_INT("border_height", 1, CFGF_NONE),
CFG_STR("border_normal", "#354B5C", CFGF_NONE),
CFG_STR("border_focus", "#6286A1", CFGF_NONE),
CFG_STR("resize_corner_normal", "#ff0000", CFGF_NONE),
CFG_STR("resize_corner_focus", "#ff0000", CFGF_NONE),
CFG_STR("modifier", "Alt", CFGF_NONE),
CFG_SEC("mouse", mouse_button_opts, CFGF_MULTI),
CFG_SEC("titlebar", titlebar_opts, CFGF_NONE),
CFG_END()
};
/* }}} */
/* LAYOUTS {{{ */
cfg_opt_t layout_opts[] =
{
CFG_STR("type", "", CFGF_NONE),
CFG_STR("symbol", "", CFGF_NONE),
CFG_END()
};
cfg_opt_t layouts_opts[] =
{
CFG_STR("fg", "#FFFFFF", CFGF_NONE),
CFG_STR("bg", "#292929", CFGF_NONE),
CFG_BOOL("border", cfg_false, CFGF_NONE),
CFG_STR("system", "menu", CFGF_NONE),
CFG_SEC("layout", layout_opts, CFGF_MULTI),
CFG_END()
};
/* }}} */
/* TAGS {{{ */
cfg_opt_t tag_opts[] =
{
CFG_INT("screen", -1, CFGF_NONE),
CFG_STR("name", "", CFGF_NONE),
CFG_FLOAT("mwfact", 0.65, CFGF_NONE),
CFG_INT("nmaster", 1, CFGF_NONE),
CFG_STR("layout", "tile_right", CFGF_NONE),
CFG_STR("infobar_position", "top", CFGF_NONE),
CFG_BOOL("resizehint", cfg_false, CFGF_NONE),
CFG_STR_LIST("clients", "{}", CFGF_NONE),
CFG_END()
};
cfg_opt_t tags_opts[] =
{
CFG_BOOL("tag_round", cfg_false, CFGF_NONE),
CFG_BOOL("global_resizehint", cfg_false, CFGF_NONE),
CFG_STR("occupied_bg", "#003366", CFGF_NONE),
CFG_STR("sel_fg", "#FFFFFF", CFGF_NONE),
CFG_STR("sel_bg", "#354B5C", CFGF_NONE),
CFG_BOOL("border", cfg_false, CFGF_NONE),
CFG_SEC("tag", tag_opts, CFGF_MULTI),
CFG_END()
};
/* }}} */
/* MENU {{{ */
cfg_opt_t menu_items_opts[] =
{
CFG_STR("name", "item_wname", CFGF_NONE),
CFG_STR("func", "", CFGF_NONE),
CFG_STR("cmd", "", CFGF_NONE),
CFG_END()
};
cfg_opt_t menus_opts[] =
{
CFG_STR("name", "menu_wname", CFGF_NONE),
CFG_BOOL("place_at_mouse", cfg_true, CFGF_NONE),
CFG_INT("x", 0, CFGF_NONE),
CFG_INT("y", 0, CFGF_NONE),
CFG_STR("fg_normal", "#ffffff", CFGF_NONE),
CFG_STR("bg_normal", "#000000", CFGF_NONE),
CFG_STR("fg_focus", "#ffffff", CFGF_NONE),
CFG_STR("bg_focus", "#000000", CFGF_NONE),
CFG_SEC("item", menu_items_opts, CFGF_MULTI),
CFG_END()
};
cfg_opt_t menu_opts[] =
{
CFG_SEC("set_menu", menus_opts, CFGF_MULTI),
CFG_END()
};
/* }}} */
/* LAUNCHER {{{ */
cfg_opt_t launchers_opts[] =
{
CFG_STR("name", "launcher", CFGF_NONE),
CFG_STR("prompt", "Execute:", CFGF_NONE),
CFG_STR("command", "exec", CFGF_NONE),
CFG_END()
};
cfg_opt_t launcher_opts[] =
{
CFG_SEC("set_launcher", launchers_opts, CFGF_MULTI),
CFG_END()
};
/* }}} */
/* KEYBIND {{{ */
cfg_opt_t key_opts[] =
{
CFG_STR_LIST("mod", "{Control}", CFGF_NONE),
CFG_STR("key", "None", CFGF_NONE),
CFG_STR("func", "", CFGF_NONE),
CFG_STR("cmd", "", CFGF_NONE),
CFG_END()
};
cfg_opt_t keys_opts[] =
{
CFG_SEC("key", key_opts, CFGF_MULTI),
CFG_END()
};
/* }}} */
/* ALIAS {{{ */
cfg_opt_t _alias_opts[] =
{
CFG_STR("content", "", CFGF_NONE),
CFG_END()
};
cfg_opt_t alias_opts[] =
{
CFG_SEC("alias", _alias_opts, CFGF_TITLE | CFGF_MULTI),
CFG_END()
};
/* }}} */
cfg_opt_t opts[] =
{
CFG_SEC("misc", misc_opts, CFGF_NONE),
CFG_SEC("alias", alias_opts, CFGF_NONE),
CFG_SEC("root", root_opts, CFGF_NONE),
CFG_SEC("client", client_opts, CFGF_NONE),
CFG_SEC("bar", bar_opts, CFGF_NONE),
CFG_SEC("layouts", layouts_opts, CFGF_NONE),
CFG_SEC("tags", tags_opts, CFGF_NONE),
CFG_SEC("menu", menu_opts, CFGF_NONE),
CFG_SEC("launcher", launcher_opts, CFGF_NONE),
CFG_SEC("keys", keys_opts, CFGF_NONE),
CFG_END()
};
key_name_list_t key_list[] =
{
{"Control", ControlMask },
{"Shift", ShiftMask },
{"Lock", LockMask },
{"Alt", Mod1Mask },
{"Mod2", Mod2Mask },
{"Mod3", Mod3Mask },
{"Mod4", Mod4Mask },
{"Super", Mod4Mask },
{"Mod5", Mod5Mask },
{NULL, NoSymbol }
};
name_to_uint_t mouse_button_list[] =
{
{"Button1", Button1 },
{"Button2", Button2 },
{"Button3", Button3 },
{"Button4", Button4 },
{"Button5", Button5 },
{"1", Button1 },
{"2", Button2 },
{"3", Button3 },
{"4", Button4 },
{"5", Button5 },
};

View File

@ -42,11 +42,12 @@ file_to_str(char *path)
if(!path || !(fd = open(path, O_RDONLY))) if(!path || !(fd = open(path, O_RDONLY)))
return NULL; return NULL;
/* To get the file size */ /* Get the file size */
stat(path, &st); stat(path, &st);
/* Bufferize file */ /* Bufferize file */
buf = (char*)mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd, SEEK_SET); if((buf = (char*)mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd, SEEK_SET)) == (char*) -1)
return NULL;
/* Copy buffer in return value */ /* Copy buffer in return value */
ret = _strdup(buf); ret = _strdup(buf);

317
wmfsrc.in
View File

@ -3,29 +3,19 @@
# ~/.config/wmfs/wmfsrc and edit it. # ~/.config/wmfs/wmfsrc and edit it.
# #
alias [misc]
{ font = "dejavu-10"
alias term { content = "@WMFS_TERM@" }
}
misc
{
font = "dejavu-10"
raisefocus = false raisefocus = false
raiseswitch = true
focus_follow_mouse = true focus_follow_mouse = true
pad = 12 [/misc]
}
bar [bar]
{ bg = "#191919"
bg = "#191919" fg = "#D4D4D4"
fg = "#D4D4D4" border = true
border = true [/bar]
}
layouts [layouts]
{
fg = "#191919" fg = "#191919"
bg = "#7E89A2" bg = "#7E89A2"
@ -36,94 +26,99 @@ layouts
system = "menu" system = "menu"
# Tiling layouts. # Tiling layouts.
layout { type = "tile_right" symbol = "RIGHT" } [layout] type = "tile_right" symbol = "RIGHT" [/layout]
layout { type = "tile_left" symbol = "LEFT" } [layout] type = "tile_left" symbol = "LEFT" [/layout]
layout { type = "tile_top" symbol = "TOP" } [layout] type = "tile_top" symbol = "TOP" [/layout]
layout { type = "tile_bottom" symbol = "BOTTOM" } [layout] type = "tile_bottom" symbol = "BOTTOM" [/layout]
layout { type = "tile_grid" symbol = "GRID" } [layout] type = "tile_grid" symbol = "GRID" [/layout]
layout { type = "mirror_vertical" symbol = "MIRROR_V" } [layout] type = "mirror_vertical" symbol = "MIRROR_V" [/layout]
layout { type = "mirror_horizontal" symbol = "MIRROR_H" } [layout] type = "mirror_horizontal" symbol = "MIRROR_H" [/layout]
# Other. # Other layouts.
layout { type = "max" symbol = "MAX" } [layout] type = "max" symbol = "MAX" [/layout]
layout { type = "free" symbol = "FREE" } [layout] type = "free" symbol = "FREE" [/layout]
}
tags [/layouts]
{
tag_round = false [tags]
occupied_bg = "#003366" tag_round = false
sel_fg = "#191919" occupied_bg = "#003366"
sel_bg = "#7E89A2" sel_fg = "#191919"
sel_bg = "#7E89A2"
# Border around the tag buttons. # Border around the tag buttons.
border = true border = true
tag { screen = 1 name = "one" mwfact = 0.65 nmaster = 1 layout = "tile_right" resizehint = false infobar_position = "top" } [tag]
tag { name = "two" } name = "one"
tag { name = "three" } screen = 0
tag { name = "four" } mwfact = 0.65
tag { name = "five" } nmaster = 1
tag { name = "six" } layout = "tile_right"
tag { name = "seven" } resizehint = false
tag { name = "eight" } infobar_position = "top"
tag { name = "nine" } [/tag]
}
root [tag] name = "two" clients = {"Browser"} [/tag]
{ [tag] name = "three" [/tag]
# Command you can execute to set the background. [tag] name = "four" [/tag]
[tag] name = "five" [/tag]
[tag] name = "six" [/tag]
[tag] name = "seven" [/tag]
[tag] name = "eight" [/tag]
[tag] name = "nine" [/tag]
[/tags]
[root]
# Command you can execute to set the background.
background_command = "xsetroot -solid black" background_command = "xsetroot -solid black"
mouse { button = "4" func = "tag_next" } [mouse] button = "4" func = "tag_next" [/mouse]
mouse { button = "5" func = "tag_prev" } [mouse] button = "5" func = "tag_prev" [/mouse]
mouse { button = "3" func = "menu" cmd = "rootmenu" } [mouse] button = "3" func = "menu" cmd = "rootmenu" [/mouse]
} [/root]
client [client]
{ border_height = 3
border_height = 3 border_shadow = true
border_shadow = true border_normal = "#191919"
border_normal = "#191919" border_focus = "#003366"
border_focus = "#003366" resize_corner_normal = "#191919"
resize_corner_normal = "#191919" resize_corner_focus = "#003366"
resize_corner_focus = "#003366"
modifier = "Alt" modifier = "Alt"
mouse { button = "1" func = "client_raise" }
mouse { button = "1" func = "mouse_move" } [mouse] button = "1" func = "client_raise" [/mouse]
mouse { button = "3" func = "client_raise" } [mouse] button = "1" func = "mouse_move" [/mouse]
mouse { button = "3" func = "mouse_resize" } [mouse] button = "3" func = "client_raise" [/mouse]
[mouse] button = "3" func = "mouse_resize" [/mouse]
# Remove this section to delete the titlebar. # Remove this section to delete the titlebar.
titlebar [titlebar]
{ stipple = false
stipple = false height = 12
height = 12 fg_normal = "#7E89A2"
fg_normal = "#7E89A2" fg_focus = "#9F9AB3"
fg_focus = "#9F9AB3"
mouse { button = "1" func = "client_raise" } [mouse] button = "1" func = "client_raise" [/mouse]
mouse { button = "1" func = "mouse_move" } [mouse] button = "1" func = "mouse_move" [/mouse]
mouse { button = "3" func = "client_raise" } [mouse] button = "3" func = "client_raise" [/mouse]
mouse { button = "3" func = "mouse_resize" } [mouse] button = "3" func = "mouse_resize" [/mouse]
button [button]
{ [mouse] button = "1" func = "client_kill" [/mouse]
mouse { button = "1" func = "client_kill" } [mouse] button = "3" func = "menu" cmd = "clientmenu" [/mouse]
mouse { button = "3" func = "menu" cmd = "clientmenu" }
line { coord = {1, 1, 4, 1} }
line { coord = {1, 1, 1, 4} }
line { coord = {1, 4, 4, 4} }
}
}
}
menu [line] coord = {1, 1, 4, 1} [/line]
{ [line] coord = {1, 1, 1, 4} [/line]
# Default menu, binded on the root window. [line] coord = {1, 4, 4, 4} [/line]
set_menu [/button]
{ [/titlebar]
[/client]
[menu]
# Default menu, binded on the root window, button 3.
[set_menu]
name = "rootmenu" name = "rootmenu"
# place_at_mouse = false # place_at_mouse = false
@ -132,129 +127,127 @@ menu
fg_focus = "#191919" bg_focus = "#7E89A2" fg_focus = "#191919" bg_focus = "#7E89A2"
fg_normal = "#9F9AB3" bg_normal = "#191919" fg_normal = "#9F9AB3" bg_normal = "#191919"
item { name = "Terminal" func = "spawn" cmd = term } [item] name = "Terminal" func = "spawn" cmd = "@WMFS_TERM@" [/item]
item { name = "Next tag" func = "tag_next" } [item] name = "Next tag" func = "tag_next" [/item]
item { name = "Previous tag" func = "tag_prev" } [item] name = "Previous tag" func = "tag_prev" [/item]
item { name = "Next layout" func = "layout_next" } [item] name = "Next layout" func = "layout_next" [/item]
item { name = "Previous layout" func = "layout_prev" } [item] name = "Previous layout" func = "layout_prev" [/item]
item { name = "Toggle infobar" func = "toggle_infobar_position" } [item] name = "Toggle infobar" func = "toggle_infobar_position" [/item]
item { name = "Quit WMFS" func = "quit" } [item] name = "Quit WMFS" func = "quit" [/item]
} [/set_menu]
set_menu [set_menu]
{
name = "clientmenu" name = "clientmenu"
fg_focus = "#D4D4D4" bg_focus = "#003366" fg_focus = "#D4D4D4" bg_focus = "#003366"
fg_normal = "#D4D4D4" bg_normal = "#191919" fg_normal = "#D4D4D4" bg_normal = "#191919"
item { name = "Close" func = "client_kill" } [item] name = "Close" func = "client_kill" [/item]
item { name = "Maximize" func = "toggle_max" } [item] name = "Maximize" func = "toggle_max" [/item]
item { name = "Free" func = "toggle_free" } [item] name = "Free" func = "toggle_free" [/item]
} [/set_menu]
} [/menu]
launcher [launcher]
{ [set_launcher]
set_launcher
{
name = "launcher_exec" name = "launcher_exec"
prompt = "Exec: " prompt = "Exec: "
command = "exec" command = "exec"
} [/set_launcher]
set_launcher
{ [set_launcher]
name = "launcher_ssh" name = "launcher_ssh"
prompt = "ssh to: " prompt = "ssh to: "
command = "@WMFS_TERM@ -e ssh" command = "@WMFS_TERM@ -e ssh"
} [/set_launcher]
} [/launcher]
keys [keys]
{ # Reload the configuration of wmfs.
# Reload the configuration of wmfs. [key] mod = {"Alt", "Control"} key = "r" func = "reload" [/key]
key { mod = {"Alt", "Control"} key = "r" func = "reload" }
# Open a terminal. # Open a terminal.
key { mod = {"Control"} key = "Return" func = "spawn" cmd = term } [key] mod = {"Control"} key = "Return" func = "spawn" cmd = "@WMFS_TERM@" [/key]
# Kill the selected client. # Kill the selected client.
key { mod = {"Alt"} key = "q" func = "client_kill" } [key] mod = {"Alt"} key = "q" func = "client_kill" [/key]
# Quit wmfs. # Quit wmfs.
key { mod = {"Control", "Alt", "Shift"} key = "q" func = "quit" } [key] mod = {"Control", "Alt", "Shift"} key = "q" func = "quit" [/key]
# Swap current client with the next. # Swap current client with the next.
key { mod = {"Alt"} key = "t" func = "client_swap_next" } [key] mod = {"Alt"} key = "t" func = "client_swap_next" [/key]
# Swap current client with the previous. # Swap current client with the previous.
key { mod = {"Alt", "Shift"} key = "t" func = "client_swap_prev" } [key] mod = {"Alt", "Shift"} key = "t" func = "client_swap_prev" [/key]
# Toggle maximum the selected client. # Toggle maximum the selected client
key { mod = {"Alt"} key = "m" func = "toggle_max" } [key] mod = {"Alt"} key = "m" func = "toggle_max" [/key]
# Toggle free the selected client. # Toggle free the selected client.
key { mod = {"Alt"} key = "f" func = "toggle_free" } [key] mod = {"Alt"} key = "f" func = "toggle_free" [/key]
# Toggle the position of the infobar. # Toggle the position of the infobar.
key { mod = {"Alt"} key = "b" func = "toggle_infobar_position" } [key] mod = {"Alt"} key = "b" func = "toggle_infobar_position" [/key]
# Toggle the resizehint of the current tag/screen # Toggle the resizehint of the current tag/screen
key { mod = { "Shift", "Control" } key = "r" func = "toggle_resizehint" } [key] mod = {"Shift", "Control"} key = "r" func = "toggle_resizehint" [/key]
# Select the next client. # Select the next client.
key { mod = {"Alt"} key = "Tab" func = "client_next" } [key] mod = {"Alt"} key = "Tab" func = "client_next" [/key]
# Select the previous client. # Select the previous client.
key { mod = {"Alt","Shift"} key = "Tab" func = "client_prev" } [key] mod = {"Alt","Shift"} key = "Tab" func = "client_prev" [/key]
# Select the next tag. # Select the next tag.
key { mod = {"Control"} key = "Right" func = "tag_next" } [key] mod = {"Control"} key = "Right" func = "tag_next" [/key]
# Select the previous tag. # Select the previous tag.
key { mod = {"Control"} key = "Left" func = "tag_prev" } [key] mod = {"Control"} key = "Left" func = "tag_prev" [/key]
# Set the next layout. # Set the next layout.
key { mod = {"Alt"} key = "space" func = "layout_next" } [key] mod = {"Alt"} key = "space" func = "layout_next" [/key]
# Set the previous layout. # Set the previous layout.
key { mod = {"Alt", "Shift"} key = "space" func = "layout_prev" } [key] mod = {"Alt", "Shift"} key = "space" func = "layout_prev" [/key]
# Increase mwfact. # Increase mwfact.
key { mod = {"Alt", "Shift"} key = "l" func = "set_mwfact" cmd = "+0.025" } [key] mod = {"Alt"} key = "l" func = "set_mwfact" cmd = "+0.025" [/key]
# Decrease mwfact. # Decrease mwfact.
key { mod = {"Alt", "Shift"} key = "h" func = "set_mwfact" cmd = "-0.025" } [key] mod = {"Alt"} key = "h" func = "set_mwfact" cmd = "-0.025" [/key]
# Increase nmaster. # Increase nmaster.
key { mod = {"Alt"} key = "d" func = "set_nmaster" cmd = "+1" } [key] mod = {"Alt"} key = "d" func = "set_nmaster" cmd = "+1" [/key]
# Decease nmaster. # Decease nmaster.
key { mod = {"Alt", "Shift"} key = "d" func = "set_nmaster" cmd = "-1" } [key] mod = {"Alt", "Shift"} key = "d" func = "set_nmaster" cmd = "-1" [/key]
# Launchers. #Launchers.
key { mod = { "Alt" } key = "p" func = "launcher" cmd = "launcher_exec" } [key] mod = {"Alt"} key = "p" func = "launcher" cmd = "launcher_exec" [/key]
key { mod = { "Alt", "Shift" } key = "p" func = "launcher" cmd = "launcher_ssh" } [key] mod = {"Alt", "Shift"} key = "p" func = "launcher" cmd = "launcher_ssh" [/key]
# Set the tag x. # Set the tag x.
key { mod = {"Alt"} key = "F1" func = "tag" cmd = "1" } [key] mod = {"Alt"} key = "F1" func = "tag" cmd = "1" [/key]
key { mod = {"Alt"} key = "F2" func = "tag" cmd = "2" } [key] mod = {"Alt"} key = "F2" func = "tag" cmd = "2" [/key]
key { mod = {"Alt"} key = "F3" func = "tag" cmd = "3" } [key] mod = {"Alt"} key = "F3" func = "tag" cmd = "3" [/key]
key { mod = {"Alt"} key = "F4" func = "tag" cmd = "4" } [key] mod = {"Alt"} key = "F4" func = "tag" cmd = "4" [/key]
key { mod = {"Alt"} key = "F5" func = "tag" cmd = "5" } [key] mod = {"Alt"} key = "F5" func = "tag" cmd = "5" [/key]
key { mod = {"Alt"} key = "F6" func = "tag" cmd = "6" } [key] mod = {"Alt"} key = "F6" func = "tag" cmd = "6" [/key]
key { mod = {"Alt"} key = "F7" func = "tag" cmd = "7" } [key] mod = {"Alt"} key = "F7" func = "tag" cmd = "7" [/key]
key { mod = {"Alt"} key = "F8" func = "tag" cmd = "8" } [key] mod = {"Alt"} key = "F8" func = "tag" cmd = "8" [/key]
key { mod = {"Alt"} key = "F9" func = "tag" cmd = "9" } [key] mod = {"Alt"} key = "F9" func = "tag" cmd = "9" [/key]
# Transfert selected client to x. # Transfert selected client to x.
key { mod = {"Alt", "Shift"} key = "F1" func = "tag_transfert" cmd ="1" } [key] mod = {"Alt", "Shift"} key = "F1" func = "tag_transfert" cmd ="1" [/key]
key { mod = {"Alt", "Shift"} key = "F2" func = "tag_transfert" cmd ="2" } [key] mod = {"Alt", "Shift"} key = "F2" func = "tag_transfert" cmd ="2" [/key]
key { mod = {"Alt", "Shift"} key = "F3" func = "tag_transfert" cmd ="3" } [key] mod = {"Alt", "Shift"} key = "F3" func = "tag_transfert" cmd ="3" [/key]
key { mod = {"Alt", "Shift"} key = "F4" func = "tag_transfert" cmd ="4" } [key] mod = {"Alt", "Shift"} key = "F4" func = "tag_transfert" cmd ="4" [/key]
key { mod = {"Alt", "Shift"} key = "F5" func = "tag_transfert" cmd ="5" } [key] mod = {"Alt", "Shift"} key = "F5" func = "tag_transfert" cmd ="5" [/key]
key { mod = {"Alt", "Shift"} key = "F6" func = "tag_transfert" cmd ="6" } [key] mod = {"Alt", "Shift"} key = "F6" func = "tag_transfert" cmd ="6" [/key]
key { mod = {"Alt", "Shift"} key = "F7" func = "tag_transfert" cmd ="7" } [key] mod = {"Alt", "Shift"} key = "F7" func = "tag_transfert" cmd ="7" [/key]
key { mod = {"Alt", "Shift"} key = "F8" func = "tag_transfert" cmd ="8" } [key] mod = {"Alt", "Shift"} key = "F8" func = "tag_transfert" cmd ="8" [/key]
key { mod = {"Alt", "Shift"} key = "F9" func = "tag_transfert" cmd ="9" } [key] mod = {"Alt", "Shift"} key = "F9" func = "tag_transfert" cmd ="9" [/key]
} [/keys]

View File

@ -1,252 +0,0 @@
#
# This is the default wmfs config file, copy it to
# ~/.config/wmfs/wmfsrc and edit it.
#
[misc]
font = "dejavu-10"
raisefocus = false
focus_follow_mouse = true
[/misc]
[bar]
bg = "#191919"
fg = "#D4D4D4"
border = true
[/bar]
[layouts]
fg = "#191919"
bg = "#7E89A2"
# Border around the layout button.
border = true
# Value menu or switch.
system = "menu"
# Tiling layouts.
[layout] type = "tile_right" symbol = "RIGHT" [/layout]
[layout] type = "tile_left" symbol = "LEFT" [/layout]
[layout] type = "tile_top" symbol = "TOP" [/layout]
[layout] type = "tile_bottom" symbol = "BOTTOM" [/layout]
[layout] type = "tile_grid" symbol = "GRID" [/layout]
[layout] type = "mirror_vertical" symbol = "MIRROR_V" [/layout]
[layout] type = "mirror_horizontal" symbol = "MIRROR_H" [/layout]
# Other layouts.
[layout] type = "max" symbol = "MAX" [/layout]
[layout] type = "free" symbol = "FREE" [/layout]
[/layouts]
[tags]
tag_round = false
occupied_bg = "#003366"
sel_fg = "#191919"
sel_bg = "#7E89A2"
# Border around the tag buttons.
border = true
[tag]
name = "one"
screen = 0
mwfact = 0.65
nmaster = 1
layout = "tile_right"
resizehint = false
infobar_position = "top"
[/tag]
[tag] name = "two" clients = {"Browser"} [/tag]
[tag] name = "three" [/tag]
[tag] name = "four" [/tag]
[tag] name = "five" [/tag]
[tag] name = "six" [/tag]
[tag] name = "seven" [/tag]
[tag] name = "eight" [/tag]
[tag] name = "nine" [/tag]
[/tags]
[root]
# Command you can execute to set the background.
background_command = "xsetroot -solid black"
[mouse] button = "4" func = "tag_next" [/mouse]
[mouse] button = "5" func = "tag_prev" [/mouse]
[mouse] button = "3" func = "menu" cmd = "rootmenu" [/mouse]
[/root]
[client]
border_height = 3
border_shadow = true
border_normal = "#191919"
border_focus = "#003366"
resize_corner_normal = "#191919"
resize_corner_focus = "#003366"
modifier = "Alt"
[mouse] button = "1" func = "client_raise" [/mouse]
[mouse] button = "1" func = "mouse_move" [/mouse]
[mouse] button = "3" func = "client_raise" [/mouse]
[mouse] button = "3" func = "mouse_resize" [/mouse]
# Remove this section to delete the titlebar.
[titlebar]
stipple = false
height = 12
fg_normal = "#7E89A2"
fg_focus = "#9F9AB3"
[mouse] button = "1" func = "client_raise" [/mouse]
[mouse] button = "1" func = "mouse_move" [/mouse]
[mouse] button = "3" func = "client_raise" [/mouse]
[mouse] button = "3" func = "mouse_resize" [/mouse]
[button]
[mouse] button = "1" func = "client_kill" [/mouse]
[mouse] button = "3" func = "menu" cmd = "clientmenu" [/mouse]
[line] coord = {1, 1, 4, 1} [/line]
[line] coord = {1, 1, 1, 4} [/line]
[line] coord = {1, 4, 4, 4} [/line]
[/button]
[/titlebar]
[/client]
[menu]
# Default menu, binded on the root window, button 3.
[set_menu]
name = "rootmenu"
# place_at_mouse = false
# x = 40 y = 50
fg_focus = "#191919" bg_focus = "#7E89A2"
fg_normal = "#9F9AB3" bg_normal = "#191919"
[item] name = "Terminal" func = "spawn" cmd = term [/item]
[item] name = "Next tag" func = "tag_next" [/item]
[item] name = "Previous tag" func = "tag_prev" [/item]
[item] name = "Next layout" func = "layout_next" [/item]
[item] name = "Previous layout" func = "layout_prev" [/item]
[item] name = "Toggle infobar" func = "toggle_infobar_position" [/item]
[item] name = "Quit WMFS" func = "quit" [/item]
[/set_menu]
[set_menu]
name = "clientmenu"
fg_focus = "#D4D4D4" bg_focus = "#003366"
fg_normal = "#D4D4D4" bg_normal = "#191919"
[item] name = "Close" func = "client_kill" [/item]
[item] name = "Maximize" func = "toggle_max" [/item]
[item] name = "Free" func = "toggle_free" [/item]
[/set_menu]
[/menu]
[launcher]
[set_launcher]
name = "launcher_exec"
prompt = "Exec: "
command = "exec"
[/set_launcher]
[set_launcher]
name = "launcher_ssh"
prompt = "ssh to: "
command = "urxvt -e ssh"
[/set_launcher]
[/launcher]
[keys]
# Reload the configuration of wmfs.
[key] mod = {"Alt", "Control"} key = "r" func = "reload" [/key]
# Open a terminal.
[key] mod = {"Control"} key = "Return" func = "spawn" cmd = term [/key]
# Kill the selected client.
[key] mod = {"Alt"} key = "q" func = "client_kill" [/key]
# Quit wmfs.
[key] mod = {"Control", "Alt", "Shift"} key = "q" func = "quit" [/key]
# Swap current client with the next.
[key] mod = {"Alt"} key = "t" func = "client_swap_next" [/key]
# Swap current client with the previous.
[key] mod = {"Alt", "Shift"} key = "t" func = "client_swap_prev" [/key]
# Toggle maximum the selected client
[key] mod = {"Alt"} key = "m" func = "toggle_max" [/key]
# Toggle free the selected client.
[key] mod = {"Alt"} key = "f" func = "toggle_free" [/key]
# Toggle the position of the infobar.
[key] mod = {"Alt"} key = "b" func = "toggle_infobar_position" [/key]
# Toggle the resizehint of the current tag/screen
[key] mod = {"Shift", "Control"} key = "r" func = "toggle_resizehint" [/key]
# Select the next client.
[key] mod = {"Alt"} key = "Tab" func = "client_next" [/key]
# Select the previous client.
[key] mod = {"Alt","Shift"} key = "Tab" func = "client_prev" [/key]
# Select the next tag.
[key] mod = {"Control"} key = "Right" func = "tag_next" [/key]
# Select the previous tag.
[key] mod = {"Control"} key = "Left" func = "tag_prev" [/key]
# Set the next layout.
[key] mod = {"Alt"} key = "space" func = "layout_next" [/key]
# Set the previous layout.
[key] mod = {"Alt", "Shift"} key = "space" func = "layout_prev" [/key]
# Increase mwfact.
[key] mod = {"Alt"} key = "l" func = "set_mwfact" cmd = "+0.025" [/key]
# Decrease mwfact.
[key] mod = {"Alt"} key = "h" func = "set_mwfact" cmd = "-0.025" [/key]
# Increase nmaster.
[key] mod = {"Alt"} key = "d" func = "set_nmaster" cmd = "+1" [/key]
# Decease nmaster.
[key] mod = {"Alt", "Shift"} key = "d" func = "set_nmaster" cmd = "-1" [/key]
#Launchers.
[key] mod = {"Alt"} key = "p" func = "launcher" cmd = "launcher_exec" [/key]
[key] mod = {"Alt", "Shift"} key = "p" func = "launcher" cmd = "launcher_ssh" [/key]
# Set the tag x.
[key] mod = {"Alt"} key = "F1" func = "tag" cmd = "1" [/key]
[key] mod = {"Alt"} key = "F2" func = "tag" cmd = "2" [/key]
[key] mod = {"Alt"} key = "F3" func = "tag" cmd = "3" [/key]
[key] mod = {"Alt"} key = "F4" func = "tag" cmd = "4" [/key]
[key] mod = {"Alt"} key = "F5" func = "tag" cmd = "5" [/key]
[key] mod = {"Alt"} key = "F6" func = "tag" cmd = "6" [/key]
[key] mod = {"Alt"} key = "F7" func = "tag" cmd = "7" [/key]
[key] mod = {"Alt"} key = "F8" func = "tag" cmd = "8" [/key]
[key] mod = {"Alt"} key = "F9" func = "tag" cmd = "9" [/key]
# Transfert selected client to x.
[key] mod = {"Alt", "Shift"} key = "F1" func = "tag_transfert" cmd ="1" [/key]
[key] mod = {"Alt", "Shift"} key = "F2" func = "tag_transfert" cmd ="2" [/key]
[key] mod = {"Alt", "Shift"} key = "F3" func = "tag_transfert" cmd ="3" [/key]
[key] mod = {"Alt", "Shift"} key = "F4" func = "tag_transfert" cmd ="4" [/key]
[key] mod = {"Alt", "Shift"} key = "F5" func = "tag_transfert" cmd ="5" [/key]
[key] mod = {"Alt", "Shift"} key = "F6" func = "tag_transfert" cmd ="6" [/key]
[key] mod = {"Alt", "Shift"} key = "F7" func = "tag_transfert" cmd ="7" [/key]
[key] mod = {"Alt", "Shift"} key = "F8" func = "tag_transfert" cmd ="8" [/key]
[key] mod = {"Alt", "Shift"} key = "F9" func = "tag_transfert" cmd ="9" [/key]
[/keys]