Conversation
Provide conditional variants of 'ModifiedLayout' and 'Choose', so that modifications (specific layouts) are only applied when a particular condition is met. Co-authored-by: Tomas Janousek <tomi@nomi.cz> Co-authored-by: Ivan Malison <IvanMalison@gmail.com>
|
There's a but that I can't figure out right now: Assuming something like myLayout = onWorkspace "4" (tall ||| Full) $ Full ||| tall ||| Mirror tall
where
tall = Tall 1 (3/100) (1/2)one needs to issue five Haven't tried debugging this yet, as its getting late, but perhaps someone else immediately knows what's up. |
|
Is using |
|
Also it may be better to leave |
| conditional :: ModifierCondition c => c -> (l a -> ModifiedLayout m l a) -> (l a -> CondModifiedLayout c m l a) | ||
| conditional c ml = CondModifiedLayout True c . ml | ||
| conditional :: ModifierCondition c => c -> (l a -> l' a) -> l a -> CondChoose c l' l a | ||
| conditional c ml l = CondChoose True c (Choose CL (ml l) l) |
There was a problem hiding this comment.
I wonder if we really want this — this gives you two separate instances of l, so whenever the condition flips, you "lose" (as in, no longer observe, rather than losing the actual data) the internal state of l.
If l is something like l1 ||| l2 ||| l3, then the actual Chosen layout might switch every time the condition flips, and also the effect of Shrink/Expand/… only applies to the instance you're looking at.
So I'd say the implementation simplification this provides isn't worth it.
I'm generally in favor of having everything implemented via CondChoose/CondModifiedLayout and making sure these two are perfect (as in, no resource leaks, no stuck decorations, etc.). (Apologies for disappearing for a couple years. I've been extremely busy, and also extremely burned out. That's not getting better any time soon, but I finally reached a point of needing ConditionalLayout myself, so at least I have some motivation to progress this specific one…) |
Supersedes #582
What I haven't done, yet we probably should (not necessarily in this PR):
RewriteIfMax,PreScreen, andPerWorkspacewith this, which would close Display bug with IfMax, PerScreen, PerWorkspace with decorated layouts #75Provide some QOL functions so that it's easier to write predicates. E.g., I reckon lots of people will want to use a variant ofgets $ find ((t ==) . W.tag) . W.workspaces . windowset.TODOS:
New module: X.L.ConditionalLayout
Provide conditional variants of 'ModifiedLayout' and 'Choose', so that modifications (specific layouts) are only applied when a particular condition is met.
Co-authored-by: Tomas Janousek tomi@nomi.cz
Co-authored-by: Ivan Malison IvanMalison@gmail.com
Description
Include a description for your changes, including the motivation
behind them.
Checklist
I've read CONTRIBUTING.md
I've considered how to best test these changes (property, unit,
manually, ...) and concluded: cursory testing on my computer yielded the desired results, though someone else should look at this.
I updated the
CHANGES.mdfile