mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-06-19 14:33:16 -04:00
feat: add smartkillclient dispatcher
Add a smartkillclient bind function that removes the focused client from the currently viewed tag(s) when it lives on more than one tag, and only falls back to closing it (killclient behaviour) when it is on a single tag, or when removing the viewed tag(s) would leave it on none.
This commit is contained in:
parent
adc1239075
commit
e4c74de7df
4 changed files with 24 additions and 0 deletions
|
|
@ -89,6 +89,7 @@ bindr=Super,Super_L,spawn,rofi -show run
|
||||||
| Command | Param | Description |
|
| Command | Param | Description |
|
||||||
| :--- | :--- | :--- |
|
| :--- | :--- | :--- |
|
||||||
| `killclient` | `force` | Close the focused window. If `force` is specified, sends `SIGKILL`. |
|
| `killclient` | `force` | Close the focused window. If `force` is specified, sends `SIGKILL`. |
|
||||||
|
| `smartkillclient` | - | Remove the focused window from the current tag(s) if it is on multiple tags; otherwise close it. |
|
||||||
| `togglefloating` | - | Toggle floating state. |
|
| `togglefloating` | - | Toggle floating state. |
|
||||||
| `toggle_all_floating` | - | Toggle all visible clients floating state. |
|
| `toggle_all_floating` | - | Toggle all visible clients floating state. |
|
||||||
| `togglefullscreen` | - | Toggle fullscreen. |
|
| `togglefullscreen` | - | Toggle fullscreen. |
|
||||||
|
|
|
||||||
|
|
@ -1061,6 +1061,8 @@ FuncType parse_func_name(char *func_name, Arg *arg, char *arg_value,
|
||||||
} else if (strcmp(func_name, "killclient") == 0) {
|
} else if (strcmp(func_name, "killclient") == 0) {
|
||||||
func = killclient;
|
func = killclient;
|
||||||
(*arg).i = parse_force(arg_value);
|
(*arg).i = parse_force(arg_value);
|
||||||
|
} else if (strcmp(func_name, "smartkillclient") == 0) {
|
||||||
|
func = smartkillclient;
|
||||||
} else if (strcmp(func_name, "centerwin") == 0) {
|
} else if (strcmp(func_name, "centerwin") == 0) {
|
||||||
func = centerwin;
|
func = centerwin;
|
||||||
} else if (strcmp(func_name, "focuslast") == 0) {
|
} else if (strcmp(func_name, "focuslast") == 0) {
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ int32_t moveresize(const Arg *arg);
|
||||||
int32_t exchange_client(const Arg *arg);
|
int32_t exchange_client(const Arg *arg);
|
||||||
int32_t exchange_stack_client(const Arg *arg);
|
int32_t exchange_stack_client(const Arg *arg);
|
||||||
int32_t killclient(const Arg *arg);
|
int32_t killclient(const Arg *arg);
|
||||||
|
int32_t smartkillclient(const Arg *arg);
|
||||||
int32_t toggleglobal(const Arg *arg);
|
int32_t toggleglobal(const Arg *arg);
|
||||||
int32_t incnmaster(const Arg *arg);
|
int32_t incnmaster(const Arg *arg);
|
||||||
int32_t focusmon(const Arg *arg);
|
int32_t focusmon(const Arg *arg);
|
||||||
|
|
|
||||||
|
|
@ -360,6 +360,26 @@ int32_t killclient(const Arg *arg) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t smartkillclient(const Arg *arg) {
|
||||||
|
Client *c = arg->tc ? arg->tc : (selmon ? selmon->sel : NULL);
|
||||||
|
if (!c)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
uint32_t newtags = c->tags & ~(c->mon->tagset[c->mon->seltags] & TAGMASK);
|
||||||
|
if (__builtin_popcount(c->tags & TAGMASK) <= 1 || !newtags) {
|
||||||
|
pending_kill_client(c);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove the client from the currently viewed tag(s) on its own monitor
|
||||||
|
// (the one that changed) while keeping focus on the user's active monitor.
|
||||||
|
c->tags = newtags;
|
||||||
|
focusclient(focustop(selmon), 1);
|
||||||
|
arrange(c->mon, false, false);
|
||||||
|
printstatus(IPC_WATCH_ARRANGGE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t moveresize(const Arg *arg) {
|
int32_t moveresize(const Arg *arg) {
|
||||||
const char *cursors[] = {"nw-resize", "ne-resize", "sw-resize",
|
const char *cursors[] = {"nw-resize", "ne-resize", "sw-resize",
|
||||||
"se-resize"};
|
"se-resize"};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue