From 1a5f80bd0b9865994ef02244da597044dd99a309 Mon Sep 17 00:00:00 2001 From: okan Date: Fri, 9 Feb 2018 19:54:54 +0000 Subject: Clean up conf_file/homedir and conf_init() bits. --- calmwm.c | 41 ++++++++--------------------------------- calmwm.h | 6 ++---- conf.c | 25 ++++++++++++++++++------- 3 files changed, 28 insertions(+), 44 deletions(-) diff --git a/calmwm.c b/calmwm.c index 9deb9a3..875b0ca 100644 --- a/calmwm.c +++ b/calmwm.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -54,23 +53,24 @@ static int x_wmerrorhandler(Display *, XErrorEvent *); int main(int argc, char **argv) { - const char *conf_file = NULL; - char *conf_path, *display_name = NULL; + char *display_name = NULL; char *fallback; int ch, xfd; struct pollfd pfd[1]; - struct passwd *pw; if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) warnx("no locale support"); mbtowc(NULL, NULL, MB_CUR_MAX); + conf_init(&Conf); + fallback = u_argv(argv); Conf.wm_argv = u_argv(argv); while ((ch = getopt(argc, argv, "c:d:v")) != -1) { switch (ch) { case 'c': - conf_file = optarg; + free(Conf.conf_file); + Conf.conf_file = xstrdup(optarg); break; case 'd': display_name = optarg; @@ -90,32 +90,8 @@ main(int argc, char **argv) if (signal(SIGHUP, sighdlr) == SIG_ERR) err(1, "signal"); - Conf.homedir = getenv("HOME"); - if ((Conf.homedir == NULL) || (Conf.homedir[0] == '\0')) { - pw = getpwuid(getuid()); - if (pw != NULL && pw->pw_dir != NULL && *pw->pw_dir != '\0') - Conf.homedir = pw->pw_dir; - else - Conf.homedir = "/"; - } - - if (conf_file == NULL) - xasprintf(&conf_path, "%s/%s", Conf.homedir, CONFFILE); - else - conf_path = xstrdup(conf_file); - - if (access(conf_path, R_OK) != 0) { - if (conf_file != NULL) - warn("%s", conf_file); - free(conf_path); - conf_path = NULL; - } - - conf_init(&Conf); - - if (conf_path && (parse_config(conf_path, &Conf) == -1)) - warnx("config file %s has errors", conf_path); - free(conf_path); + if (parse_config(Conf.conf_file, &Conf) == -1) + warnx("error parsing config file"); xfd = x_init(display_name); cwm_status = CWM_RUNNING; @@ -136,7 +112,7 @@ main(int argc, char **argv) x_teardown(); if (cwm_status == CWM_EXEC_WM) { u_exec(Conf.wm_argv); - warnx("'%s' failed to start, restarting fallback", Conf.wm_argv); + warnx("'%s' failed to start, starting fallback", Conf.wm_argv); u_exec(fallback); } @@ -198,7 +174,6 @@ static int x_wmerrorhandler(Display *dpy, XErrorEvent *e) { errx(1, "root window unavailable - perhaps another wm is running?"); - return(0); } diff --git a/calmwm.h b/calmwm.h index f87640a..faa8506 100644 --- a/calmwm.h +++ b/calmwm.h @@ -45,8 +45,6 @@ #define nitems(_a) (sizeof((_a)) / sizeof((_a)[0])) #endif -#define CONFFILE ".cwmrc" - #define BUTTONMASK (ButtonPressMask | ButtonReleaseMask) #define MOUSEMASK (BUTTONMASK | PointerMotionMask) #define MENUMASK (MOUSEMASK | ButtonMotionMask | KeyPressMask | \ @@ -308,10 +306,10 @@ struct conf { Cursor cursor[CF_NITEMS]; int xrandr; int xrandr_event_base; - char *homedir; + char *conf_file; char *known_hosts; char *wm_argv; - u_int32_t debug; + int debug; }; /* MWM hints */ diff --git a/conf.c b/conf.c index 9c02e3e..5d85fdc 100644 --- a/conf.c +++ b/conf.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -248,6 +249,8 @@ mouse_binds[] = { void conf_init(struct conf *c) { + const char *home; + struct passwd *pw; unsigned int i; c->stickygroups = 0; @@ -258,11 +261,11 @@ conf_init(struct conf *c) c->nameqlen = 5; TAILQ_INIT(&c->ignoreq); - TAILQ_INIT(&c->cmdq); - TAILQ_INIT(&c->wmq); - TAILQ_INIT(&c->keybindq); TAILQ_INIT(&c->autogroupq); + TAILQ_INIT(&c->keybindq); TAILQ_INIT(&c->mousebindq); + TAILQ_INIT(&c->cmdq); + TAILQ_INIT(&c->wmq); for (i = 0; i < nitems(key_binds); i++) conf_bind_key(c, key_binds[i].key, key_binds[i].func); @@ -275,13 +278,21 @@ conf_init(struct conf *c) conf_cmd_add(c, "lock", "xlock"); conf_cmd_add(c, "term", "xterm"); - conf_wm_add(c, "cwm", "cwm"); - xasprintf(&c->known_hosts, "%s/%s", c->homedir, ".ssh/known_hosts"); - c->font = xstrdup("sans-serif:pixelsize=14:bold"); c->wmname = xstrdup("CWM"); + + home = getenv("HOME"); + if ((home == NULL) || (*home == '\0')) { + pw = getpwuid(getuid()); + if (pw != NULL && pw->pw_dir != NULL && *pw->pw_dir != '\0') + home = pw->pw_dir; + else + home = "/"; + } + xasprintf(&c->conf_file, "%s/%s", home, ".cwmrc"); + xasprintf(&c->known_hosts, "%s/%s", home, ".ssh/known_hosts"); } void @@ -327,6 +338,7 @@ conf_clear(struct conf *c) for (i = 0; i < CWM_COLOR_NITEMS; i++) free(c->color[i]); + free(c->conf_file); free(c->known_hosts); free(c->font); free(c->wmname); @@ -703,7 +715,6 @@ static char *ewmhints[] = { "_NET_WM_STATE_SKIP_TASKBAR", "_CWM_WM_STATE_FREEZE", }; - void conf_atoms(void) { -- cgit 1.4.1 From e6bf7429b3443b2ed6491774995658aaad0a5b3a Mon Sep 17 00:00:00 2001 From: okan Date: Fri, 9 Feb 2018 20:08:07 +0000 Subject: limit scope of screen_apply_gap() --- calmwm.h | 1 - screen.c | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/calmwm.h b/calmwm.h index faa8506..451e634 100644 --- a/calmwm.h +++ b/calmwm.h @@ -476,7 +476,6 @@ void search_print_text(struct menu *, int); void search_print_wm(struct menu *, int); struct region_ctx *region_find(struct screen_ctx *, int, int); -struct geom screen_apply_gap(struct screen_ctx *, struct geom); struct screen_ctx *screen_find(Window); struct geom screen_area(struct screen_ctx *, int, int, enum apply_gap); diff --git a/screen.c b/screen.c index 5025899..0cb4ae0 100644 --- a/screen.c +++ b/screen.c @@ -31,6 +31,8 @@ #include "calmwm.h" +static struct geom screen_apply_gap(struct screen_ctx *, struct geom); + void screen_init(int which) { @@ -220,7 +222,7 @@ screen_update_geometry(struct screen_ctx *sc) xu_ewmh_net_workarea(sc); } -struct geom +static struct geom screen_apply_gap(struct screen_ctx *sc, struct geom geom) { geom.x += sc->gap.left; -- cgit 1.4.1 From 13763662c9ba3c0fed9732b14fb81a63235a1f26 Mon Sep 17 00:00:00 2001 From: okan Date: Tue, 13 Feb 2018 15:06:22 +0000 Subject: Consolidate region 'view' and 'area'. --- calmwm.h | 1 - screen.c | 12 ++++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/calmwm.h b/calmwm.h index 451e634..a99ba02 100644 --- a/calmwm.h +++ b/calmwm.h @@ -204,7 +204,6 @@ TAILQ_HEAD(autogroup_q, autogroup); struct region_ctx { TAILQ_ENTRY(region_ctx) entry; int num; - struct geom area; struct geom view; /* viewable area */ struct geom work; /* workable area, gap-applied */ }; diff --git a/screen.c b/screen.c index 0cb4ae0..8d05f25 100644 --- a/screen.c +++ b/screen.c @@ -146,12 +146,12 @@ struct geom screen_area(struct screen_ctx *sc, int x, int y, enum apply_gap apply_gap) { struct region_ctx *rc; - struct geom area = sc->work; + struct geom area = sc->view; TAILQ_FOREACH(rc, &sc->regionq, entry) { - if ((x >= rc->area.x) && (x < (rc->area.x + rc->area.w)) && - (y >= rc->area.y) && (y < (rc->area.y + rc->area.h))) { - area = rc->area; + if ((x >= rc->view.x) && (x < (rc->view.x + rc->view.w)) && + (y >= rc->view.y) && (y < (rc->view.y + rc->view.h))) { + area = rc->view; break; } } @@ -193,10 +193,6 @@ screen_update_geometry(struct screen_ctx *sc) rc = xmalloc(sizeof(*rc)); rc->num = i; - rc->area.x = ci->x; - rc->area.y = ci->y; - rc->area.w = ci->width; - rc->area.h = ci->height; rc->view.x = ci->x; rc->view.y = ci->y; rc->view.w = ci->width; -- cgit 1.4.1 From b1929b5ed6a33fa6d031912c9963ab5e113f81ea Mon Sep 17 00:00:00 2001 From: okan Date: Tue, 13 Feb 2018 15:43:15 +0000 Subject: Store the screen's visual type and colormap. --- calmwm.h | 2 ++ conf.c | 13 ++++++------- screen.c | 2 ++ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/calmwm.h b/calmwm.h index a99ba02..e4dbe3a 100644 --- a/calmwm.h +++ b/calmwm.h @@ -223,6 +223,8 @@ struct screen_ctx { struct region_q regionq; struct group_q groupq; struct group_ctx *group_active; + Colormap colormap; + Visual *visual; struct { Window win; XftDraw *xftdraw; diff --git a/conf.c b/conf.c index 5d85fdc..b77425c 100644 --- a/conf.c +++ b/conf.c @@ -451,8 +451,6 @@ conf_screen(struct screen_ctx *sc) { unsigned int i; XftColor xc; - Colormap colormap = DefaultColormap(X_Dpy, sc->which); - Visual *visual = DefaultVisual(X_Dpy, sc->which); sc->gap = Conf.gap; sc->snapdist = Conf.snapdist; @@ -469,18 +467,18 @@ conf_screen(struct screen_ctx *sc) xu_xorcolor(sc->xftcolor[CWM_COLOR_MENU_BG], sc->xftcolor[CWM_COLOR_MENU_FG], &xc); xu_xorcolor(sc->xftcolor[CWM_COLOR_MENU_FONT], xc, &xc); - if (!XftColorAllocValue(X_Dpy, visual, colormap, + if (!XftColorAllocValue(X_Dpy, sc->visual, sc->colormap, &xc.color, &sc->xftcolor[CWM_COLOR_MENU_FONT_SEL])) warnx("XftColorAllocValue: %s", Conf.color[i]); break; } - if (XftColorAllocName(X_Dpy, visual, colormap, + if (XftColorAllocName(X_Dpy, sc->visual, sc->colormap, Conf.color[i], &xc)) { sc->xftcolor[i] = xc; - XftColorFree(X_Dpy, visual, colormap, &xc); + XftColorFree(X_Dpy, sc->visual, sc->colormap, &xc); } else { warnx("XftColorAllocName: %s", Conf.color[i]); - XftColorAllocName(X_Dpy, visual, colormap, + XftColorAllocName(X_Dpy, sc->visual, sc->colormap, color_binds[i], &sc->xftcolor[i]); } } @@ -490,7 +488,8 @@ conf_screen(struct screen_ctx *sc) sc->xftcolor[CWM_COLOR_MENU_FG].pixel, sc->xftcolor[CWM_COLOR_MENU_BG].pixel); - sc->menu.xftdraw = XftDrawCreate(X_Dpy, sc->menu.win, visual, colormap); + sc->menu.xftdraw = XftDrawCreate(X_Dpy, sc->menu.win, + sc->visual, sc->colormap); if (sc->menu.xftdraw == NULL) errx(1, "%s: XftDrawCreate", __func__); diff --git a/screen.c b/screen.c index 8d05f25..845a323 100644 --- a/screen.c +++ b/screen.c @@ -50,6 +50,8 @@ screen_init(int which) sc->which = which; sc->rootwin = RootWindow(X_Dpy, sc->which); + sc->colormap = DefaultColormap(X_Dpy, sc->which); + sc->visual = DefaultVisual(X_Dpy, sc->which); sc->cycling = 0; sc->hideall = 0; -- cgit 1.4.1 From 05510941822cb14969bae35d57ff7778fc4daee1 Mon Sep 17 00:00:00 2001 From: anton Date: Mon, 19 Feb 2018 19:29:42 +0000 Subject: Do not print any parse errors when ~/.cwmrc is missing. Regression introduced in revision 1.109 of calmwm.c. ok okan@ --- parse.y | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/parse.y b/parse.y index 6c4a556..0e4f791 100644 --- a/parse.y +++ b/parse.y @@ -43,7 +43,7 @@ static struct file { int lineno; int errors; } *file, *topfile; -struct file *pushfile(const char *); +struct file *pushfile(const char *, FILE *); int popfile(void); int yyparse(void); int yylex(void); @@ -557,19 +557,13 @@ nodigits: } struct file * -pushfile(const char *name) +pushfile(const char *name, FILE *stream) { struct file *nfile; nfile = xcalloc(1, sizeof(struct file)); nfile->name = xstrdup(name); - - if ((nfile->stream = fopen(nfile->name, "r")) == NULL) { - warn("%s", nfile->name); - free(nfile->name); - free(nfile); - return (NULL); - } + nfile->stream = stream; nfile->lineno = 1; TAILQ_INSERT_TAIL(&files, nfile, entry); return (nfile); @@ -594,13 +588,19 @@ popfile(void) int parse_config(const char *filename, struct conf *xconf) { + FILE *stream; int errors = 0; conf = xconf; - if ((file = pushfile(filename)) == NULL) { + stream = fopen(filename, "r"); + if (stream == NULL) { + if (errno == ENOENT) + return (0); + warn("%s", filename); return (-1); } + file = pushfile(filename, stream); topfile = file; yyparse(); -- cgit 1.4.1