And it's been doing the trick for years. Prior to building the tmux workspace, it even can call a bootstrap script (https://github.com/tony/tmuxp/blob/master/bootstrap_env.py) to check for and install dependencies.
When a tmuxp session file (https://github.com/tony/tmuxp/blob/master/.tmuxp.yaml) is loaded, it automatically can source the user into virtualenvs, launch file watchers, and so on.
Saves so much time.
Since most software projects involve the same flow (installing packages locally for the project, launching a test runner.)
Other things that help keeping it cross platform are using Makefile and commands conforming to POSIX (https://github.com/tony/tmuxp/blob/master/Makefile). So when bringing up a list of files for entr (a file watcher http://entrproject.org/) to run commands when files are saved, use posix find arguments only. Use $(MAKE) for recursive calls (https://www.gnu.org/software/make/manual/html_node/Recursion...).
So I ended up just writing a quick shell script that set up my environment using regular tmux commands.
I'm strongly in favor of some innovation in this space, but this app's solution (and other, window management type solutions) I don't think has enough isolation between contexts for me.
Windows has traditionally been a Window/document-centric OS where the primary object of interaction is a window (e.g. alt-tab would swap between individual Windows).
macOS has traditionally been an application-centric OS, one tabs between Applications.
What I would love to see is a project-centric system, where I can tab between projects and have all the relevant applications and documents appear and disappear with it.
Linux! I'm a Windows dev now and miss Linux so much.
What I used to do back in the day was simplistic, but still very useful - I'd have multiple desktops open, & have each project on its own desktop. SSH connections, code editors, network drives, VMs whatever. It keeps visual separation between environments, even if not total logical separation.
If you need better separation, you can have multiple sessions open at once with separate window managers, user accounts, file system roots, whatever you need - at the same time. I'm hazy on the implementation details but I've seen it done. Altho, this might be a bit old school today, with VMs taking less resources and stuff like docker existing.
You can set applications to open on specific desktops, or any desktop. This combined with moom really makes macOS a pleasure to work with and alleviates the need for multiple monitors.
There's been a lot of talk of people switching from macOS recently and while it's not unfounded I'd struggle replacing this setup.
The main issue I have with this setup is Cmd-Tab doesn't handle multiple windows of the same app that well. If I have multiple Safari windows in different desktops, it would basically just (randomly?) pick one and open it when I Cmd-Tab into Safari.
I really wish Cmd-Tab would be constrained to the desktop I'm currently using...
Anybody has a solution for this issue?
It provides Cmd-Tab/Option-Tab replacement that shows all apps' all windows regardless of their desktop or full/split screen status. You can even search within window list.
It also has gestures and numberered switch for apps/groups.
Mostly it works without a hitch. Sometimes macOS' original Cmd-Tab manages to get first and both can arrive together, but that rarely happens. When macOS opens apps to multiple desktops and full screens on startup I have to sometimes let it know what apps are available by switching through them using Exposé (or whatever that's called).
I have no affiliation, but I'm a paid user.
Personally I've no issues with cmd+tab - I use it to cycle between 2-3 recently used apps, works fine for apps in the same space (which is the idea of per-project spaces).
The dock I keep minimized, not much use for it with spaces because it has global state.
Cmd+h is handy for hiding global apps out of way (can be revealed again with cmd+tab).
There are couple of issues¹, but this is still by far the best approach I can think of. Actually, I don't understand how other people can manage their stuff without per-project virtual desktops.
¹ cannot rename virtual desktops on macOS, not all apps can restore their windows on correct desktop after reboot, not all apps support multi-window workflow (e.g. Slack), "minimized windows" area in dock should be per-desktop instead of global
PS. Fluid.app is nice way to create project-specific native app instances from web applications, e.g. Trello, Jenkins, etc. Plays nicer with virtual desktops / cmd+tab than browser windows. (With the cost of memory.)
If you don't need workspace specific buffers, eyebrowse is a good (seemingly less buggy) alternative.
As far as the initial setup is concerned, this is fairly easily scriptable. Pretty much everything in System Preferences can be set using `defaults write`, there's loads of dotfile management tools, and most other things can be generated with templates using something like Cookiecutter. You can get a completely customised user account in a few seconds just by running a script and answering a few questions.
Btw your idea is very cool. I have at least three contexts too: personal, job-related and somewhat job-related (trial periods that I always miss without touching, etc). I tired of relogging into different accounts and being careful with my From field, thanks for the hack. Cannot believe I didn't figure it out myself.
On OSX you can achieve something similar with multi-desktops.
I have a functional prototype I'm planning to share as soon as I've polished up the UI.
If you can do that, and do that well, I'll pay you a lot more than $5.99.
I'd like to suggest putting more screenshots up showing how to use it as well as a video.
Basically a bookmark manager for the apps/folders you use, allowing you to restore everything in a click or two.
I specified a terminal and two VSCode windows each set with different project directories and it loaded perfectly. Will purchase.
Feature request: Would like the ability to choose fullscreen/specific space for each application.
I'd also love to be able to give it a window of tabs in Chrome or Firefox and have it open all of those in one window. Perhaps there's already a way but it wasn't obvious to me.
EDIT: I kept reading the comments and found the VSCode solution. You add VSCode first and then specify a folder to open.
* Does it just remember which files/apps were open for a given name, and when I click that name in the list it opens those apps?
* Does it close my other apps when I do this, to only keep one "workspace" active?
* Can I set it to open each Workspace in a specific OSX "Spaces" space? (THIS would be the killer feature, imo)
Here is my 'use case'. Whenever I want to work on one of my mobile or web apps, I set up my environment to open TWO terminal windows within my working folder (one for normal CLI commands, one for IRB or other specific console), perhaps run up a local web server for testing, SSH into the staging server, and load up the local preview URL in at least two installed browsers for testing. Sometimes XCode or Atom/VSCode too with the proper project loaded up. Oh, and opening my BitBucket and Confluence pages to the right project would also help a great deal.
Having to do this sometimes multiple times per day for different projects I am working on can get tedious, so I am hoping that this app could automate a lot of this with a single click, but I don't know from that landing page whether it even comes close to this.
[EDIT - I notice they have added a video to the landing page now which explains what it does and how it works in an infinitely better way. And from that, it DOES look like it will meet my needs above!]
Something practical that appears to their audience, which is probably developers.
The cognitive load needed to task shift takes time and may take up to 20 minutes to get my head into the task, not to mention setting up my session for the client project. Then when I need to shift back to another project I have to start over. Most of my time is spent digging through finder and opening files.
This app, even in it's early stages will save me a lot of money... the AUD$10 is worth it - you could charge more. I have tinkered with spaces in the past to do this as well as thought about (hellish thought) using multiple user account and fast switch between them... nothing has worked quite right.
I think this would be particularly useful for digital agencies. Allowing fast switching between projects. It would be particularly useful if there was workspaces or "projects" were shareable with teams in those environments too. Easily pickup where another team member left off... an enterprise option maybe?
Saving window state is useful, but I find using SizeUp to move things around after it has loaded is probably enough. Also, I tend to move between my eternal monitor and laptop screen only quite regularly, so I'm not sure how window management would work in those scenarios.
The big thing though is to be able to close a workspace... I can see in comments you are working on this for a later release. It's not the end of the world right now - closing everything I don't need open is easy and doesn't require a whole lot of thought.
For now you have nailed the biggest use case for my daily workflow after window management with SizeUp... opening a folder of resources with the click of a button!
And here is a quick intro on how I use it: https://hackernoon.com/how-i-hacked-my-workflow-45e328ad8d9b
If this thing could manage filesystem workspace dependencies and keep them in encrypted DMGs (not hard!), I'd pay a lot for it --- more than I would for Microsoft Office.
I have a script called just c with the following:
if !(tmux has-session -t "$name" 2> /dev/null); then
tmux start \;\
set -g set-remain-on-exit on \;\
new-session -d -s $name
tmux source-file "$HOME/.tmux.conf"
tmux source-file "$HOME/.tmux/profiles/$name.tmuxrc"
tmux attach -t $name
Then I cp a tmux profile from a template depending on the project language/framework into profiles and rename the directories in it then I can just do `c project` in the future to have everything started up.
I can't tell it to open the terminal and activate a Python virtual environment (let alone open Visual Studio Code built-in terminal and activate the env).
It's kind of buggy.
After defining my first work space (and I did mine with two tasks to open websites), I ran the workspace, it only did the first task (open one website), and then for some reason the prompt telling me that I'm using a demo and that I haven't paid for it pops up right away which is annoying cause duh! Of course I haven't paid for it, I'm evaluating it.
And after that I can't bring back focus to the application and it doesn't appear on the menu. So I had to restart it by killing the app process on Activity Monitor.
Ok, I thought I'd try it again, maybe this time it won't trouble me asking me to pay for it before I've evaluated it, same thing.
Not off to a good start here.
I'm using MacOS Sierra (10.12.4).
I really like jigish's Slate for this (maybe I'm just too lazy to switch) but sadly it's not being maintained, and I just noticed that neither is mattr-'s fork as of this month.
1. Does this remember or allow me to configure the Desktop(s) that I had those programs opened on?
2. Is there a shortcut to close all of the programs it opened for a workspace?
We're planning such features for future versions.
I animated gif or video would help people understand what this is.
I think starting a workspace is only half the battle here, though. Considering how I switch from work to play -- it's mostly just app minimization and open the browser window I use for leisure reading. For me, the ideal here would be to find a way to preserve state of each workspace so that I can hop between each but not have to trouble myself with management
From what I can tell, the `open` command doesn't accept any parameters relating to desktop/window placement. I wish it would, that could then be very powerful.
There have been some neat 'ZUI' approaches to this. Like the Raskin app (https://www.youtube.com/watch?v=44u0OFWVt0s).
Did you know that, behind the scenes, macOS (and presumably iOS as well as other operating systems) create a single-file version of the myriad dylibs that are required for most applications? And that apps that link against these individual libs then instead get that big (it's YUUUGE!) combined library mapped into their address space? Without this optimization towards a single image, application launch performance would be wholly unacceptable.
EDIT - actually if you could set it up to run some hotkeys or typing after each application load you could do both these things very easily.
A simple video has been added as well as our introduction image. I hope it helps. It's quite hard to describe that app.
This is the first version, we have lots of ideas for the future. And our todo list includes choosing space, window position, size and ability to close other apps or close apps from the running workspace.
TL;DR Try Freeter: https://freeter.io
Turn on multiple desktops
Put all the windows from one project on this desktop
Leave all these windows open when you decide to stop working on the project and switch to another desktop
Maybe put a unique, project-appropriate image on each desktop
I guess it breaks if some projects require using apps that don't play well with your CPU or network or something? Maybe?
* Open chrome and the last saved session for that project.
* Open terminal and restore that last session. (can with tmux)
* Open sublime text with the project and the last session restored.
* Open any other apps
One thing that'd be awesome would be to run a command after opening a folder in iTerm
The last time I used it, it was buggy as hell (long-time KDE user here).
Also, you can achieve the same functionality in i3, i3 can remember the positions of the open windows. But you need to write a script to open the corresponding applications and identify them to i3, so windows can be "swallowed".
However workspaces on KDE were magnificent. They remembered state between applications too. I only used KDE4 workspaces -FreeBSD does not yet support Plasma- and was fairly satisfied.
At least an app exists for it now.
If you're taking requests: I'd really love the ability to specify a script to run when opening Terminal. Both by specifying a location for an external shell script, but also by having the ability to just toss a few commands together in your interface.
And the window position thing above would be amazing.
One is for organising your local machine's desktops in workspaces per project, other is remote desktops via a cloud provider.