diff --git a/src/config/parse_config.h b/src/config/parse_config.h index 25c5db8..e6c123b 100644 --- a/src/config/parse_config.h +++ b/src/config/parse_config.h @@ -686,6 +686,9 @@ FuncType parse_func_name(char *func_name, Arg *arg, char *arg_value, } else if (strcmp(func_name, "focusmon") == 0) { func = focusmon; (*arg).i = parse_direction(arg_value); + if((*arg).i == UNDIR) { + (*arg).v = strdup(arg_value); + } } else if (strcmp(func_name, "tagmon") == 0) { func = tagmon; (*arg).i = parse_direction(arg_value); diff --git a/src/maomao.c b/src/maomao.c index b4c3769..9d3f08f 100644 --- a/src/maomao.c +++ b/src/maomao.c @@ -4061,11 +4061,24 @@ void focusclient(Client *c, int lift) { void focusmon(const Arg *arg) { Client *c; + Monitor *m = NULL; int i = 0, nmons = wl_list_length(&mons); - if (nmons) { + if (nmons && arg->i != UNDIR) { do /* don't switch to disabled mons */ selmon = dirtomon(arg->i); while (!selmon->wlr_output->enabled && i++ < nmons); + } else if(arg->v) { + wl_list_for_each(m, &mons, link) { + if (!m->wlr_output->enabled) { + continue; + } + if(regex_match(arg->v, m->wlr_output->name)) { + selmon = m; + break; + } + } + } else { + return; } warp_cursor_to_selmon(selmon); c = focustop(selmon);