]> git.lizzy.rs Git - bspwm.git/commitdiff
Add {,user}_LAYOUT modifiers to desktop selectors
authorEmanuele Torre <torreemanuele6@gmail.com>
Sat, 5 Sep 2020 18:45:31 +0000 (20:45 +0200)
committerBastien Dejean <nihilhill@gmail.com>
Tue, 8 Sep 2020 09:12:15 +0000 (11:12 +0200)
`.tiled`, `.monocle`, `.user_tiled` and `.user_monocle` can now be used
in desktop selectors.

doc/bspwm.1
doc/bspwm.1.asciidoc
src/parse.c
src/query.c
src/types.h

index 3879ea1471cabb0fe7be0282cec7e9a70d16098a..c3cbd6ec3e87743840fbd97de72c00d1446e47e6 100644 (file)
@@ -4,10 +4,10 @@
 .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
 .\"      Date: 09/08/2020
 .\"    Manual: Bspwm Manual
-.\"    Source: Bspwm 0.9.10-8-ge64864b
+.\"    Source: Bspwm 0.9.10-9-gab72002
 .\"  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
 .\" -----------------------------------------------------------------
@@ -328,6 +328,9 @@ DESKTOP_SEL := [DESKTOP_SEL#](CYCLE_DIR|any|last|newest|older|newer|
                               [MONITOR_SEL:](focused|^<n>)|
                               <desktop_id>|<desktop_name>)[\&.[!]focused][\&.[!]active]
                                                           [\&.[!]occupied][\&.[!]urgent][\&.[!]local]
+                                                          [\&.[!]LAYOUT][\&.[!]user_LAYOUT]
+
+LAYOUT := tiled|monocle
 .fi
 .if n \{\
 .RE
@@ -426,6 +429,16 @@ Only consider urgent desktops\&.
 .RS 4
 Only consider desktops inside the reference monitor\&.
 .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
 .SS "Monitor"
 .sp
index 06263bcb9be66d9c61b9768b7deeff59aa485f78..7a17b8d94d739e51856ba8d9a12c87a0e8757fb7 100644 (file)
@@ -211,6 +211,9 @@ DESKTOP_SEL := [DESKTOP_SEL#](CYCLE_DIR|any|last|newest|older|newer|
                               [MONITOR_SEL:](focused|^<n>)|
                               <desktop_id>|<desktop_name>)[.[!]focused][.[!]active]
                                                           [.[!]occupied][.[!]urgent][.[!]local]
+                                                          [.[!]LAYOUT][.[!]user_LAYOUT]
+
+LAYOUT := tiled|monocle
 ----
 
 Descriptors
@@ -264,6 +267,12 @@ Modifiers
 [!]local::
        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
 ~~~~~~~
 
index d623fa0067ceb277ceee93d270c56362601ebd53..05adf4483800af6bce15f870f8020f125e7d142d 100644 (file)
@@ -503,6 +503,10 @@ bool parse_desktop_modifiers(char *desc, desktop_select_t *sel)
                GET_MOD(active)
                GET_MOD(urgent)
                GET_MOD(local)
+               GET_MOD(tiled)
+               GET_MOD(monocle)
+               GET_MOD(user_tiled)
+               GET_MOD(user_monocle)
                } else {
                        return false;
                }
index 5181413a4e762932e622a12db6efd8491d36a33d..9e0cc63bedba0440c234df93d53b4832bc7636c5 100644 (file)
@@ -511,7 +511,11 @@ desktop_select_t make_desktop_select(void)
                .focused = OPTION_NONE,
                .active = 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;
 }
@@ -1240,6 +1244,28 @@ bool desktop_matches(coordinates_t *loc, coordinates_t *ref, desktop_select_t *s
                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;
 }
 
index 425b1f6f5dd0d21f1d7213a0566020b053e02186..c11b591c7eb4d33ba147a0d0bc621deadeca0779 100644 (file)
@@ -193,6 +193,10 @@ typedef struct {
        option_bool_t active;
        option_bool_t urgent;
        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;
 
 typedef struct {