+void set_setting(char *name, char *value, char *rsp)
+{
+ if (name == NULL || value == NULL)
+ return;
+
+ if (strcmp(name, "inner_border_width") == 0) {
+ sscanf(value, "%u", &inner_border_width);
+ border_width = inner_border_width + main_border_width + outer_border_width;
+ } else if (strcmp(name, "main_border_width") == 0) {
+ sscanf(value, "%u", &main_border_width);
+ border_width = inner_border_width + main_border_width + outer_border_width;
+ } else if (strcmp(name, "outer_border_width") == 0) {
+ sscanf(value, "%u", &outer_border_width);
+ border_width = inner_border_width + main_border_width + outer_border_width;
+ } else if (strcmp(name, "window_gap") == 0) {
+ sscanf(value, "%i", &window_gap);
+ } else if (strcmp(name, "left_padding") == 0) {
+ sscanf(value, "%i", &left_padding);
+ } else if (strcmp(name, "right_padding") == 0) {
+ sscanf(value, "%i", &right_padding);
+ } else if (strcmp(name, "top_padding") == 0) {
+ sscanf(value, "%i", &top_padding);
+ } else if (strcmp(name, "bottom_padding") == 0) {
+ sscanf(value, "%i", &bottom_padding);
+ } else if (strcmp(name, "focused_border_color") == 0) {
+ strncpy(focused_border_color, value, sizeof(focused_border_color));
+ focused_border_color_pxl = get_color(focused_border_color);
+ } else if (strcmp(name, "active_border_color") == 0) {
+ strncpy(active_border_color, value, sizeof(active_border_color));
+ active_border_color_pxl = get_color(active_border_color);
+ } else if (strcmp(name, "normal_border_color") == 0) {
+ strncpy(normal_border_color, value, sizeof(normal_border_color));
+ normal_border_color_pxl = get_color(normal_border_color);
+ } else if (strcmp(name, "inner_border_color") == 0) {
+ strncpy(inner_border_color, value, sizeof(inner_border_color));
+ inner_border_color_pxl = get_color(inner_border_color);
+ } else if (strcmp(name, "outer_border_color") == 0) {
+ strncpy(outer_border_color, value, sizeof(outer_border_color));
+ outer_border_color_pxl = get_color(outer_border_color);
+ } else if (strcmp(name, "presel_border_color") == 0) {
+ strncpy(presel_border_color, value, sizeof(presel_border_color));
+ presel_border_color_pxl = get_color(presel_border_color);
+ } else if (strcmp(name, "focused_locked_border_color") == 0) {
+ strncpy(focused_locked_border_color, value, sizeof(focused_locked_border_color));
+ focused_locked_border_color_pxl = get_color(focused_locked_border_color);
+ } else if (strcmp(name, "active_locked_border_color") == 0) {
+ strncpy(active_locked_border_color, value, sizeof(active_locked_border_color));
+ active_locked_border_color_pxl = get_color(active_locked_border_color);
+ } else if (strcmp(name, "normal_locked_border_color") == 0) {
+ strncpy(normal_locked_border_color, value, sizeof(normal_locked_border_color));
+ normal_locked_border_color_pxl = get_color(normal_locked_border_color);
+ } else if (strcmp(name, "urgent_border_color") == 0) {
+ strncpy(urgent_border_color, value, sizeof(urgent_border_color));
+ urgent_border_color_pxl = get_color(urgent_border_color);
+ } else if (strcmp(name, "borderless_monocle") == 0) {
+ bool b;
+ if (parse_bool(value, &b))
+ borderless_monocle = b;
+ } else if (strcmp(name, "gapless_monocle") == 0) {
+ bool b;
+ if (parse_bool(value, &b))
+ gapless_monocle = b;
+ } else if (strcmp(name, "focus_follows_mouse") == 0) {
+ bool b;
+ if (parse_bool(value, &b))
+ focus_follows_mouse = b;
+ } else if (strcmp(name, "wm_name") == 0) {
+ strncpy(wm_name, value, sizeof(wm_name));
+ ewmh_update_wm_name();
+ return;
+ } else if (strcmp(name, "button_modifier") == 0) {
+ unsigned int m;
+ if (parse_modifier_mask(value, &m)) {
+ ungrab_buttons();
+ button_modifier = m;
+ grab_buttons();
+ }
+ return;
+ } else {
+ snprintf(rsp, BUFSIZ, "unknown setting: %s", name);
+ return;
+ }
+
+ arrange(mon, mon->desk);
+}
+
+void get_setting(char *name, char* rsp)
+{
+ if (name == NULL)
+ return;
+
+ if (strcmp(name, "inner_border_width") == 0)
+ snprintf(rsp, BUFSIZ, "%u", inner_border_width);
+ else if (strcmp(name, "main_border_width") == 0)
+ snprintf(rsp, BUFSIZ, "%u", main_border_width);
+ else if (strcmp(name, "outer_border_width") == 0)
+ snprintf(rsp, BUFSIZ, "%u", outer_border_width);
+ else if (strcmp(name, "border_width") == 0)
+ snprintf(rsp, BUFSIZ, "%u", border_width);
+ else if (strcmp(name, "window_gap") == 0)
+ snprintf(rsp, BUFSIZ, "%i", window_gap);
+ else if (strcmp(name, "left_padding") == 0)
+ snprintf(rsp, BUFSIZ, "%i", left_padding);
+ else if (strcmp(name, "right_padding") == 0)
+ snprintf(rsp, BUFSIZ, "%i", right_padding);
+ else if (strcmp(name, "top_padding") == 0)
+ snprintf(rsp, BUFSIZ, "%i", top_padding);
+ else if (strcmp(name, "bottom_padding") == 0)
+ snprintf(rsp, BUFSIZ, "%i", bottom_padding);
+ else if (strcmp(name, "focused_border_color") == 0)
+ snprintf(rsp, BUFSIZ, "%s (%06X)", focused_border_color, focused_border_color_pxl);
+ else if (strcmp(name, "active_border_color") == 0)
+ snprintf(rsp, BUFSIZ, "%s (%06X)", active_border_color, active_border_color_pxl);
+ else if (strcmp(name, "normal_border_color") == 0)
+ snprintf(rsp, BUFSIZ, "%s (%06X)", normal_border_color, normal_border_color_pxl);
+ else if (strcmp(name, "inner_border_color") == 0)
+ snprintf(rsp, BUFSIZ, "%s (%06X)", inner_border_color, inner_border_color_pxl);
+ else if (strcmp(name, "outer_border_color") == 0)
+ snprintf(rsp, BUFSIZ, "%s (%06X)", outer_border_color, outer_border_color_pxl);
+ else if (strcmp(name, "presel_border_color") == 0)
+ snprintf(rsp, BUFSIZ, "%s (%06X)", presel_border_color, presel_border_color_pxl);
+ else if (strcmp(name, "focused_locked_border_color") == 0)
+ snprintf(rsp, BUFSIZ, "%s (%06X)", focused_locked_border_color, focused_locked_border_color_pxl);
+ else if (strcmp(name, "active_locked_border_color") == 0)
+ snprintf(rsp, BUFSIZ, "%s (%06X)", active_locked_border_color, active_locked_border_color_pxl);
+ else if (strcmp(name, "normal_locked_border_color") == 0)
+ snprintf(rsp, BUFSIZ, "%s (%06X)", normal_locked_border_color, normal_locked_border_color_pxl);
+ else if (strcmp(name, "urgent_border_color") == 0)
+ snprintf(rsp, BUFSIZ, "%s (%06X)", urgent_border_color, urgent_border_color_pxl);
+ else if (strcmp(name, "borderless_monocle") == 0)
+ snprintf(rsp, BUFSIZ, "%s", BOOLSTR(borderless_monocle));
+ else if (strcmp(name, "gapless_monocle") == 0)
+ snprintf(rsp, BUFSIZ, "%s", BOOLSTR(gapless_monocle));
+ else if (strcmp(name, "focus_follows_mouse") == 0)
+ snprintf(rsp, BUFSIZ, "%s", BOOLSTR(focus_follows_mouse));
+ else if (strcmp(name, "wm_name") == 0)
+ snprintf(rsp, BUFSIZ, "%s", wm_name);
+ else if (strcmp(name, "button_modifier") == 0)
+ print_modifier_mask(rsp, button_modifier);
+ else
+ snprintf(rsp, BUFSIZ, "unknown setting: %s", name);
+}
+
+bool parse_bool(char *value, bool *b)
+{
+ if (strcmp(value, "true") == 0) {
+ *b = true;
+ return true;
+ } else if (strcmp(value, "false") == 0) {
+ *b = false;
+ return true;
+ }
+ return false;
+}
+
+bool parse_layout(char *s, layout_t *l)
+{
+ if (strcmp(s, "monocle") == 0) {
+ *l = LAYOUT_MONOCLE;
+ return true;
+ } else if (strcmp(s, "tiled") == 0) {
+ *l = LAYOUT_TILED;
+ return true;
+ }
+ return false;
+}
+
+bool parse_direction(char *s, direction_t *d)
+{
+ if (strcmp(s, "up") == 0) {
+ *d = DIR_UP;
+ return true;
+ } else if (strcmp(s, "down") == 0) {
+ *d = DIR_DOWN;
+ return true;
+ } else if (strcmp(s, "left") == 0) {
+ *d = DIR_LEFT;
+ return true;
+ } else if (strcmp(s, "right") == 0) {
+ *d = DIR_RIGHT;
+ return true;
+ }
+ return false;
+}
+
+bool parse_nearest_argument(char *s, nearest_arg_t *a)
+{
+ if (strcmp(s, "older") == 0) {
+ *a = NEAREST_OLDER;
+ return true;
+ } else if (strcmp(s, "newer") == 0) {
+ *a = NEAREST_NEWER;
+ return true;
+ }
+ return false;
+}
+
+bool parse_cycle_direction(char *s, cycle_dir_t *d)
+{
+ if (strcmp(s, "prev") == 0) {
+ *d = CYCLE_PREV;
+ return true;
+ } else if (strcmp(s, "next") == 0) {
+ *d = CYCLE_NEXT;
+ return true;
+ }
+ return false;
+}
+
+bool parse_circulate_direction(char *s, circulate_dir_t *d)
+{
+ if (strcmp(s, "forward") == 0) {
+ *d = CIRCULATE_FORWARD;
+ return true;
+ } else if (strcmp(s, "backward") == 0) {
+ *d = CIRCULATE_BACKWARD;
+ return true;
+ }
+ return false;
+}
+
+bool parse_skip_client(char *s, skip_client_t *k)