From 1bbf6adbc98287e24ca48952d551fd4c905c1a48 Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Sat, 14 Jun 2025 15:59:41 +0800 Subject: [PATCH] feat: focusmon dispatch support mon name --- src/config/parse_config.h | 3 +++ src/maomao.c | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) 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);