I tried using tmuxp last week and there was a very bizarre lack that completely killed its use for me. Specifically, while you can set a start directory for the session and for the window, nowhere in the docs could I find a way to set the start directory for a pane. And that's a problem because I really don't want all of my panes to be set up with a visible `cd path/to/folder` at the top.
So I ended up just writing a quick shell script that set up my environment using regular tmux commands.
This sounds so useful in theory (I tried it) but I think it just doesn't work with my flow of operations. I'm mostly anti-mouse and pro-keyboard but somehow this combination of xmonad window layouting and using terminator (where I exclusively rearrange my split shells with the mouse) has been useful for years and while I'm a thankful and frequent user of tmux on servers I never could be productive on my desktop... :(
The problem this app is working on is a real pain point for me. My current solution is to use multi user accounts on my mac (roughly one for each use context I have), leave everything open, and fast user switch between the accounts. This works well enough and has the advantage of lots of isolation between contexts, but the overhead of creating and setting up a new user account is too much to have more than a couple of these (I'd love to have one per project). One advantage of the example of this level of isolation -- I setup my mail program in each account to only be setup for the mail accounts relevant to that context so I only get mail notifications for the context I'm focused on.
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.
>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.
Virtual desktops on Windows have been around since at least XP, albeit as a powertoy. I know at least AMD, and I presume Nvidia, also offer(ed) their own virtual desktop solutions as part of their GPU driver suites.
That's what I do except I use TotalSpaces[1] to use the trackpad to swipe up, right, down or left to each workspace.
You can set applications to open on specific desktops, or any desktop. This combined with moom[2] 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.
Yes, you can have multiple Safari windows and place each one in a different virtual desktop.
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 don't think this is true either. I just tried this, and it would switch to the safari window in the current desktop without fail - it was only when there's no safari window for current desktop that it switched desktops.
+1 for HyperSwitch. I have the standard cmd-tab for applications, alt-tab switches between all windows on the current virtual desktop and alt-` switches between all windows of the current application (across all virtual desktops).
System preferences -> Mission control -> When switching to an application, switch to a space with open application -> ticking off may help to limit cmd+tab for current space.
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).
I make heavy use of three-finger-swipe-up gesture to see all windows in the current space and thumbnails of spaces. (System prefs -> Trackpad -> More gestures)
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).
Okay if you want to split hairs sure Safari can do it but will it keep all the windows about your project on the correct screen? What about Word or Photoshop or Mail or Skype or Sketch or Numbers or Whatever. Will any of these programs filter by project on the correct screen like I want them to? Nope.
I have used project-per-virtual-desktop approach for years. I assign "shared apps" (Mail, Slack, etc) to all desktops (option-click via dock icon). My "project apps" are mostly terminal, text editor, and browser windows.
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
Too much hassle for me. I don't have a need for project specific emailing.
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.)
OS/2 used to have that feature. You could flag a folder as a project in the desktop environment. Anything you opened from that folder was part of that project. Close the project folder, everything opened from it closes. Open the project folder, everything you had open from it last time opens. And I'm pretty sure (it's been ~20 years since I used it) that it would also hide all everything if you hid the project folder.
Have you looked at KDE activities? It's been around since 2011 or so (assuming it's still around in the latest version--seemed to be there a couple months ago).
KDE has had the wonderful Activities feature for years. I believe that it even filters email messages in Kmail per Activity, though I still use Thunderbird.
Interesting way to see it. I have a way to tab between projects in emacs (where only buffers pertaining to a project are shown), but having this system-wide would be good.
Eyebrowse looks good, I'll be happy if I can get it to select layouts w/ ido completing read. perspective supports that out of the box so worst case i can just that.
I do it the same way as you and it's a hell of a lot better than this. Everything is set up specifically for the client/project you're working on at the time – SSH keys, Git config, documents, mail accounts, passwords, you name it. All focused on the specific project and all isolated.
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.
I've been trying Freeter since it was posted here. It's definitely not bad, but I don't think it solves the isolation problem mentioned - but it does help me get my workspace back up after a restart.
Curious if copying homedir except Documents, Downloads, etc. and chown'ing could be sufficient. Maybe it should be more selective than that, but still possible?
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.
Depending on how the time travel feature of windows 10's fall 2017 update will work it might cover my issue: getting back to a past set of open documents, apps and webpages. Fingers crossed they make it powerful.
MacOS desktops aren't isolated, they pollute task switcher and notifications. They are useful if you use trackpad for primary navigation and not keyboard.
I've been toying with project-management features in various contexts for years, and I'm actually working on something that would solve this problem, as it also manages application state within a context.
I have a functional prototype I'm planning to share as soon as I've polished up the UI.
I really like this idea, though the implementation is obviously still a 1.0. What I would _love_ is for the program to be able to automatically scan all the windows I have open and save their current state, then quit/hide them when switching into a new workspace. This would solve a big problem I have: I frequently have lots of open windows that I would like to close and remove to start working on something else, but I still need to do something with them. With software that is able to save and switch to different workspaces on command, I could jump right into working without having to deal with those things first. Then, when I'm done, I can just pop the stack and get back all my windows from before I started working.
If you can do that, and do that well, I'll pay you a lot more than $5.99.
Sounds interesting but it was hard for me to figure out exactly what it did based on the website (and based on the comments here it seems I'm not alone).
I'd like to suggest putting more screenshots up showing how to use it as well as a video.
How did you specify the two VSCode windows each set with different project directories? I wanted to do this too but the "Open with" drop-down in "Advanced" settings only showed four apps, none of which were VSCode.
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.
I had pretty much the same questions as you - that landing page does a terrible job of explaining exactly what it is that this app does.
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!]
That's a nice solution. Probably a little more 'manual' setup up front, but looks like it will do what I need it to once the config files are created, so I appreciate the heads up.
I hadn't heard of this. I've recently been a writing a small bash script for each project to accomplish the same thing (in a more verbose way). It works pretty nicely.
As a freelancer working on multiple projects at one time I find task switching between different projects to be time consuming and often quite frustrating.
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!
As a freelancer having exactly the same problem when working on multiple projects, I made Freeter (https://freeter.io). Give it a try - maybe it will be helpful to you.
Strong agree. I think the author of this app is on to something potentially big, and should price according to where they want this thing to go.
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.
It would be a dream scenario for me to be able to _version_ between contexts - maybe each workspace is a virtual machine/container-like entity under the hood and you're able to save snapshots of _all_ the state in there.
For whatever reason images of the old Workplace Shell (OS/2) popped through my mind when I read the title. Had me imaging a weird WPS for MacOS. (Much like the Workplace Shell for Windows from way back in the day ).
I use tmux to do something similar which I got from thoughtbots training site I think it was.
I have a script called just c with the following:
------
name=$1
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"
fi
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 love this sort of program. I've been using Control Plane [1] for a few years. It's nowhere near as pretty as this, but you can automatically switch contexts with sources like time, Bluetooth devices, location, wi-fi hotspots, even shell scripts.
It's very basic. I can tell it to run Visual Studio Code but I can't tell it to open a specific project using Visual Studio Code.
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).
I just tried it out, and you can specify a folder to open with VSCode. You pick the application (VSCode), then tap advanced and pick your project folder.
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.
Opening applications isn't the pain point for me. Its resize and moving windows. i3wm completely solves this problem already. It would be great if someone ported it over to OSX.
I also love i3wm but there are a few tiling window managers available on macOS [0] [1]. Not as easy to use as i3 last time I tried them however that was a while ago and they definitely deserve another shot.
I really like jigish's Slate[1] 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[2] as of this month.
It opens all the files, folder, apps, websites, terminal (with given directory) which you define. You can chose which resources should be open automatically when you click START.
I built something like this into my window manager one time, but I found it basically pointless, given how easy and flexible it is to just open the applications myself. If I did serious work on macOS instead of Linux and OpenBSD, I'd probably want a tool like this. They really should put a video or a screenshot roll right at the top of the page, instead of their stupid logo which nobody cares about.
Not exactly the same, but inspired by Alan Kay talk, I am trying to symlink desktop to different folders, so that I can decide I work on something, have a context, then make a new folder and do something else.
I animated gif or video would help people understand what this is.
It's a little buggy but I can definitely see the potential. I freelance several web projects and while each stack is thankfully quite similar, switching contexts requires me to open a terminal with a few tabs, running whatever servers and test runners there are, and an editor and a browser with the project in question.
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
I do a poor mans version of this all the time by keeping all files for a project in a folder. .url files for links, copies of emails, .sh scripts for terminals, aliases to other folders and files, etc. But this looks like a more polished approach.
I think this is a great idea; I was wondering what benefits Workspaces gives over this approach. Obviously, it's a bit more polished, but there are significant downsides: yet another app to install, what about its data format - is it open?
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.
I would love this if I knew how secure it was. Encryption would be handy for laptops. Though I'm aware macOS has some encryption, but that's before you log on I believe...
I am always surprised again and again, though I shouldn't be, how we are slowly and painfully creeping towards recreating the Smalltalk experience, for example the image.
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.
Tried it out works great! Opens sublime text and Hyper to the correct folder and open my site all at once. If it integrated with Magnet so you could set up exactly where it opens, that would be incredible. Also, the ability to run a command in Hyper when it loads would be cool, for example if you could 'npm start' automatically.
I'll definitely buy!
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.
Thanks for your feedback!
Sorry I did not reply. It's caused of answer limit - I answered too fast as it appeared.
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.
I want to be able to go in to "work mode" by clicking a button (typing a command).
How would you go about writing a script on MacOS that you can run to open your "work mode" programs? Preferably on different virtual desktops and set window sizes? For example: Slack and Mail on one desktop, Chrome with specified tabs on another.
I'm giving the trial a go. I was happy to see that multiple web sites opened up as tabs and not as separate windows. I would like to see that it can authenticate to certain web sites on its own (in cases where Chrome already knows the password), but I am not sure if it's technically possible from your app's point of view.
This is what I've been wanting for a while. I started doing some of this using tmux and a chrome extension. I want to easily be able to switch between projects.
My dream:
* 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.
I think that the price is fair: Apple's Automator, even shell scripts with the OS-supplied "open" command, provide significantly more functionality for quickly setting up a workspace. This tool's worth is the convenience of not having to write such an automator/shell script by hand.
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.
I was doing this with pure AppleScript a few years ago but when I changed jobs from a startup/single-product company to an client based agency then my workspace changed often enough that I found I didn't use it anymore
This is a neat tool. I bought a license yesterday and finally got a chance to play around with it.
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.
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...).