From 4cd111d9d1356db27f6c90b9c95144f9c409ec54 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Mon, 23 Jun 2025 20:52:58 +0100 Subject: add new_win_master new windows spawned can now be set as master window --- CHANGELOG.md | 1 + README.md | 1 + default_sxwmrc | 1 + src/defs.h | 1 + src/parser.c | 3 +++ src/sxwm.c | 17 ++++++++++++----- sxwm.1 | 4 ++++ 7 files changed, 23 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 320b2a5..ff3fe90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to this project will be documented in this file. - **NEW**: Can move windows between monitors via keyboard - **NEW**: Can click on a window to set focus to it - **NEW**: Window swallowing +- **NEW**: New windows can now open as master window - **CHANGE**: Renamed `focus_previous` to `focus_prev` - **CHANGE**: Invalid sample config - **CHANGE**: Parser `$HOME` searching order. XDG Compliance diff --git a/README.md b/README.md index 2905b04..47028e8 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ The file uses a `key : value` format. Lines starting with `#` are ignored. | `exec` | String | `Nothing` | Command to run on startup (e.g., `sxbar`, `picom`, "autostart", etc.). | | `can_swallow` | String | `st` | Windows that can swallow. | | `can_be_swallowed` | String | `mpv` | Windows that can be swallowed. | +| `new_win_master` | Bool | `false` | New windows will open as master window. | --- diff --git a/default_sxwmrc b/default_sxwmrc index 78ff91e..746912c 100644 --- a/default_sxwmrc +++ b/default_sxwmrc @@ -16,6 +16,7 @@ new_win_focus : true warp_cursor : true can_swallow : "st" can_be_swallowed : "mpv" +new_win_master : false # Keybinds: # Commands must be surrounded with "" diff --git a/src/defs.h b/src/defs.h index a0e06f2..ae60c94 100644 --- a/src/defs.h +++ b/src/defs.h @@ -91,6 +91,7 @@ typedef struct { int bindsn; Bool new_win_focus; Bool warp_cursor; + Bool new_win_master; Binding binds[256]; char **should_float[256]; char **can_swallow[256]; diff --git a/src/parser.c b/src/parser.c index 315013d..42c57df 100644 --- a/src/parser.c +++ b/src/parser.c @@ -439,6 +439,9 @@ found: token = strtok(NULL, ","); } } + else if (!strcmp(key, "new_win_master")) { + cfg->new_win_master = !strcmp(rest, "true") ? True : False; + } else { fprintf(stderr, "sxwmrc:%d: unknown option '%s'\n", lineno, key); } diff --git a/src/sxwm.c b/src/sxwm.c index b223207..7b35b09 100644 --- a/src/sxwm.c +++ b/src/sxwm.c @@ -12,7 +12,7 @@ * will use this will probably be programmers :) * * (C) Abhinav Prasai 2025 - */ +*/ #include #include @@ -173,11 +173,17 @@ Client *add_client(Window w, int ws) workspaces[ws] = c; } else { - Client *tail = workspaces[ws]; - while (tail->next) { - tail = tail->next; + if (user_config.new_win_master) { + c->next = workspaces[ws]; + workspaces[ws] = c; + } + else { + Client *tail = workspaces[ws]; + while (tail->next) { + tail = tail->next; + } + tail->next = c; } - tail->next = c; } open_windows++; @@ -1437,6 +1443,7 @@ void init_defaults(void) default_config.bindsn = 0; default_config.new_win_focus = True; default_config.warp_cursor = True; + default_config.new_win_master = False; if (backup_binds) { for (unsigned long i = 0; i < LENGTH(binds); i++) { diff --git a/sxwm.1 b/sxwm.1 index 4e05ea5..fabab4d 100644 --- a/sxwm.1 +++ b/sxwm.1 @@ -110,6 +110,10 @@ Windows that can swallow other windows. Default is "st". .B can_be_swallowed Windows that can be swallowed by others. Default is "mpv". +.TP +.B new_win_as_master +New windows will take place as the master window + .SH KEYBINDINGS Keybindings associate key combinations with actions, either running external commands or internal sxwm functions. -- cgit v1.2.3