Add {,user}_LAYOUT modifiers to desktop selectors

`.tiled`, `.monocle`, `.user_tiled` and `.user_monocle` can now be used
in desktop selectors.
This commit is contained in:
Emanuele Torre 2020-09-05 20:45:31 +02:00 committed by Bastien Dejean
parent 09d86ca86c
commit 853bb73452
5 changed files with 59 additions and 3 deletions

View file

@ -4,10 +4,10 @@
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 09/08/2020 .\" Date: 09/08/2020
.\" Manual: Bspwm Manual .\" Manual: Bspwm Manual
.\" Source: Bspwm 0.9.10-8-ge64864b .\" Source: Bspwm 0.9.10-9-gab72002
.\" Language: English .\" Language: English
.\" .\"
.TH "BSPWM" "1" "09/08/2020" "Bspwm 0\&.9\&.10\-8\-ge64864b" "Bspwm Manual" .TH "BSPWM" "1" "09/08/2020" "Bspwm 0\&.9\&.10\-9\-gab72002" "Bspwm Manual"
.\" ----------------------------------------------------------------- .\" -----------------------------------------------------------------
.\" * Define some portability stuff .\" * Define some portability stuff
.\" ----------------------------------------------------------------- .\" -----------------------------------------------------------------
@ -328,6 +328,9 @@ DESKTOP_SEL := [DESKTOP_SEL#](CYCLE_DIR|any|last|newest|older|newer|
[MONITOR_SEL:](focused|^<n>)| [MONITOR_SEL:](focused|^<n>)|
<desktop_id>|<desktop_name>)[\&.[!]focused][\&.[!]active] <desktop_id>|<desktop_name>)[\&.[!]focused][\&.[!]active]
[\&.[!]occupied][\&.[!]urgent][\&.[!]local] [\&.[!]occupied][\&.[!]urgent][\&.[!]local]
[\&.[!]LAYOUT][\&.[!]user_LAYOUT]
LAYOUT := tiled|monocle
.fi .fi
.if n \{\ .if n \{\
.RE .RE
@ -426,6 +429,16 @@ Only consider urgent desktops\&.
.RS 4 .RS 4
Only consider desktops inside the reference monitor\&. Only consider desktops inside the reference monitor\&.
.RE .RE
.PP
[!](tiled|monocle)
.RS 4
Only consider desktops with the given layout\&.
.RE
.PP
[!](user_tiled|user_monocle)
.RS 4
Only consider desktops which have the given layout as userLayout\&.
.RE
.RE .RE
.SS "Monitor" .SS "Monitor"
.sp .sp

View file

@ -211,6 +211,9 @@ DESKTOP_SEL := [DESKTOP_SEL#](CYCLE_DIR|any|last|newest|older|newer|
[MONITOR_SEL:](focused|^<n>)| [MONITOR_SEL:](focused|^<n>)|
<desktop_id>|<desktop_name>)[.[!]focused][.[!]active] <desktop_id>|<desktop_name>)[.[!]focused][.[!]active]
[.[!]occupied][.[!]urgent][.[!]local] [.[!]occupied][.[!]urgent][.[!]local]
[.[!]LAYOUT][.[!]user_LAYOUT]
LAYOUT := tiled|monocle
---- ----
Descriptors Descriptors
@ -264,6 +267,12 @@ Modifiers
[!]local:: [!]local::
Only consider desktops inside the reference monitor. Only consider desktops inside the reference monitor.
[!](tiled|monocle)::
Only consider desktops with the given layout.
[!](user_tiled|user_monocle)::
Only consider desktops which have the given layout as userLayout.
Monitor Monitor
~~~~~~~ ~~~~~~~

View file

@ -503,6 +503,10 @@ bool parse_desktop_modifiers(char *desc, desktop_select_t *sel)
GET_MOD(active) GET_MOD(active)
GET_MOD(urgent) GET_MOD(urgent)
GET_MOD(local) GET_MOD(local)
GET_MOD(tiled)
GET_MOD(monocle)
GET_MOD(user_tiled)
GET_MOD(user_monocle)
} else { } else {
return false; return false;
} }

View file

@ -511,7 +511,11 @@ desktop_select_t make_desktop_select(void)
.focused = OPTION_NONE, .focused = OPTION_NONE,
.active = OPTION_NONE, .active = OPTION_NONE,
.urgent = OPTION_NONE, .urgent = OPTION_NONE,
.local = OPTION_NONE .local = OPTION_NONE,
.tiled = OPTION_NONE,
.monocle = OPTION_NONE,
.user_tiled = OPTION_NONE,
.user_monocle = OPTION_NONE
}; };
return sel; return sel;
} }
@ -1240,6 +1244,28 @@ bool desktop_matches(coordinates_t *loc, coordinates_t *ref, desktop_select_t *s
return false; return false;
} }
#define DLAYOUT(p, e) \
if (sel->p != OPTION_NONE && \
loc->desktop->layout != e \
? sel->p == OPTION_TRUE \
: sel->p == OPTION_FALSE) { \
return false; \
}
DLAYOUT(tiled, LAYOUT_TILED)
DLAYOUT(monocle, LAYOUT_MONOCLE)
#undef DLAYOUT
#define DUSERLAYOUT(p, e) \
if (sel->p != OPTION_NONE && \
loc->desktop->user_layout != e \
? sel->p == OPTION_TRUE \
: sel->p == OPTION_FALSE) { \
return false; \
}
DUSERLAYOUT(user_tiled, LAYOUT_TILED)
DUSERLAYOUT(user_monocle, LAYOUT_MONOCLE)
#undef DUSERLAYOUT
return true; return true;
} }

View file

@ -193,6 +193,10 @@ typedef struct {
option_bool_t active; option_bool_t active;
option_bool_t urgent; option_bool_t urgent;
option_bool_t local; option_bool_t local;
option_bool_t tiled;
option_bool_t monocle;
option_bool_t user_tiled;
option_bool_t user_monocle;
} desktop_select_t; } desktop_select_t;
typedef struct { typedef struct {