-
-
Notifications
You must be signed in to change notification settings - Fork 276
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multi-workspace projects/scopes #387
Comments
That's definitely a feature I would want :) |
Unfortunately it doesn't provide a way to read that metadata. And I feel like I could use this feature as well! I now have 11 workspaces, 6 of which are related to a project that is currently on hold while I'm hacking on xmonad. Would be awesome to be able to hide those somehow. I'm a bit afraid that this will need to be wired into quite a lot of various places, but we can figure something out! |
Hi, I've been working on something similar to this for my personal use. Feel free to message me if you have any suggestions 🙂. |
Thanks @mislavzanic, I for one am still very interested in this feature. Regretfully, I haven't looked into it for a while, but this is a good reason to revisit it. |
@ivanbrennan If you help me with the docs (TODOs) in https://github.com/liskin/xmonad-contrib/commits/layout-inspect, specifically liskin@07dd219, then a PR can definitely be opened. I've been burned out lately so my initiative is limited, but you're right that this one doesn't need much additional work to be generally usable. |
@ivanbrennan I would love to help out, so don't hesitate to contact me. |
@liskin @mislavzanic Thanks! I'll take a look at those TODOs. I'm just starting to play around with possible implementations of workspace scopes. I just came across XMonad.Actions.WorkspaceCursors, which looks very powerful (and cleanly implemented) and could be used to implement such layers. I haven't yet explored dynamic layer manipulation or naming layers, but plan to do so -- thanks @mislavzanic for sharing the Profiles idea. |
Anybody still interested in this? I've been using my extension for about a year.. There may be some details that need to be discussed, but it's working pretty nicely. If anybody is interested in using it feel free to ping me. |
There's been some interest expressed on the IRC channel recently. In any case, contrib is always open to new submissions. 😀 |
Ok, I'll start working on a PR then. Will need a couple of days to tidy up and write the documentation. |
Problem Description
A project defined by
X.A.DynamicProjects
orX.A.TopicSpace
is limited to a single workspace. I often want to treat a group of workspaces as a scope, constraining workspace cycling and status-bar display to a particular scope.For example, if I have workspaces A B C D E, I can define a "personal" scope spanning A B and a "work" scope spanning C D. When the "personal" scope is active, my statusbar shows
A B
and workspace cycling is limited to those workspaces. Switching to the "work" scope behaves similarly, forC D
. Switching to unscoped makes all workspaces accessible.Tmux has a concept of "sessions" that works like this. Each session has an independent set of workspaces (or rather, "windows", in tmux terminology), and you can easily switch between sessions. This provides a nice way to group related workspaces into independent units and choose which unit you want to work with.
I looked into
X.A.DynamicWorkspaceGroups
, but its group represents a set of simultaneously visible workspaces on a multi-screen setup, as opposed to a set of workspaces that a given screen can cycle through.Solution
I'm interested in implementing this, but I'm not sure how best to do it. I'd be interested to hear anyone's thoughts/suggestions.
After reading through
X.A.DynamicWorkspaceGroups
,X.A.DynamicProjects
, andX.L.IndependentScreens
, I started sketching something out, usingExtensibleState
to keep track of which scopes have been defined, activated, etc.It looks like there's a fair amount of state to keep track of and several edge-cases to consider (e.g. workspaces being renamed/removed, selecting a scope that's active on another screen, ...), so I haven't really settled on how to model it or keep state in sync (maybe using a layout modifier?).
Another approach I'm considering would attach a
Maybe WorkScopeName
to a workspace, and scoping would involve filtering workspaces based on the relevant scope. I suspect this would be more reliable than my initialMap
-based idea, since it wouldn't need to update state any time a workspace is removed or renamed. AndX.L.WorkspaceDir
provides an example of how to use a layout modifier to attach metadata to a workspace. If we wanted to allow a workspace to be a member of multiple scopes, theMaybe WorkScopeName
could instead be aSet WorkScopeName
.Checklist
I've read CONTRIBUTING.md
I tested my configuration with xmonad-testing
The text was updated successfully, but these errors were encountered: