Slate: a Mac OS X window manager for power users
mauriciogardini.com
mauriciogardini.com
+---+---+---+---+---+---+---+---+
| | |
| A | B |
| | |
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+
| | | | |
| 1 | 2 | 3 | 4 |
| | | | |
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+---+---+---+---+
| 5 | 6 | 7 | |
+---+---+---+---+---+---+---+---+
I can place a screen in any one of the boxes as above, with a hot-key. A and B are Cmd-Opt-, and Cmd-Opt-. The rest are based on number keys with modifiers. The two 27" screens are 1900x1080, and connected through a DualHead2Go DP edition.The Window Manager is clearly aimed at large screens.
Whereas turning my head left and right does not do so.
Most programming requires at least 4 logical views, IMO:
1. The code
2. The result of the code (web page, test results etc)
3. Documentation that supports coding
4. A control mechanism (ie, a terminal)
No doubt there will be quibbling that some of these are really the same, blah blah. I don't care, I think 4 is the logical minimum and the physical assignment of those 4 basic information types is a matter for each programmer.
That's really interesting! I have the opposite problem - switching windows doesn't pop my mental stack, but if there's anything on the screen other than what I'm trying to focus on, it keeps diverting my attention and ruining my concentration. Fullscreen emacs on OSX (without even the system menu bar!) is just awesome for me.
Here's a screenshot of what my entire desktop looks like when I'm working on code: http://abstractnonsense.com/desktop-2013-02-17.png
To be honest, I spend most of my time using OSX in a single fullscreen Terminal.app inside tmux.
port install emacs-app +fullscreen
Then ns-toggle-fullscreen as mentioned below.Edit: no luck with the latest pretest (24.2.93.1) either.
I think it also depends what kind of development you do. Doing iOS dev, I am constantly flipping between XCode, Photoshop, Chrome, Tower, Simulator and a bunch of other tools which don't play well with the idea of being sequestered to individual areas of the monitor. When I do openFrameworks development, I have to add multiple virtual machines to the mix (Windows and Linux while running on OSX) for cross-compiling and testing.
I use two thunderbolt cinema displays and I still constantly run out of screen real estate so tools like these, though I've tried to use them, end up not fitting into how I work.
ymmv.
This allows me to prototype, compile, test, build, look up info with minimal window switching. The biggest advantage is never having to hunt for the correct window--everything is one keyboard shortcut away.
[0]: http://i.imgur.com/xctkdtq.png
The empty black box is due to my right monitor being in a vertical position.
It's beats tabbing / cycling between opened apps any day.
As a side benefit, each virtual desktop can have it's own windows layouts: you like your GMail / Google Docs to be full screen, use a full screen layout. You like your IDE to use 2/3rd of the screen and a browser used for testing to use the rest: so be it.
The problem with your method is that you lose lost of time tabbing / cycling and then for the 1% of the time where you need a layout more complicated than "one windows visible" you spend time picking up the windows you want to show (and potentially manually fine-tuning their position using the mouse).
So you hardly see any value in a window manager but others hardly see the value in losing time tabbing / cycling endlessly between apps when a single shortcut can display the app(s) they want in the layout they want.
Just another thing I had to "hack" to make work in OS X that works out of the box in all Linux Window Managers. With Ubuntu working perfectly out of the box on my MBA, I don't know why more people don't just take the step and use Linux instead. It's so nice to leave the world of outdated development tools and a stupid window manager behind.
Because the battery life is worse. (I have tested.)
Because it runs hotter.
Because the poor graphics drivers (for my rMBP) mean that it's running hotter for nothing.
Because tiled window managers are not a solution for any problems I have.
Because Ubuntu doesn't have Mission Control.
Because IntelliJ isn't very good on Linux.
Because Xcode doesn't exist on Linux.
Because VMware Fusion doesn't exist on Linux and VirtualBox is insufficient.
Because MacVim is nicer than GVim.
.
That Linux fits you is great; this stupid faux-mystified "I don't know why more people don't use this niche thing I like" is not.
Not any more. I've owned MBA for 3 years now and have been using Ubuntu on the 2012 model for the last three months. I get every bit of battery life in Linux that I do in OS X. This wasn't true a year ago, but it is now.
>Because it runs hotter.
Not any more. Certainly not during day to day tasks. Certainly not during routine development. Certainly not while watching Flash videos. Certainly not while playing TF2.
>Because the poor graphics drivers (for my rMBP) mean that it's running hotter for nothing.
Linux is getting switching support. It's already useable.
>Because tiled window managers are not a solution for any problems I have.
I don't use a titling window manager. Besides, "I don't need those features" is a pretty sad arguing point.
>Because Ubuntu doesn't have Mission Control.
KWin, Compiz and Mutter ALL have support for Expose. KWin's implementation is actually nearly identical to the Mac implementation. In fact, they've had it for as long or longer than OS X has had it.
>Because IntelliJ isn't very good on Linux.
As someone who pays for an uses IntelliJ, I don't even know what the hell that means.
>Because Xcode doesn't exist on Linux.
And that's a good thing.
>Because VMware Fusion doesn't exist on Linux and VirtualBox is insufficient.
LOL. Is this even a serious point? Hello? VMWare Workstation? KVM+QEMU? Xen?
>Because MacVim is nicer than GVim.
Are you fucking kidding me?
>"niche thing"
Oh you're cute. I shouldn't have wasted my time replying to an obvious troll.
> Not any more. Certainly not during day to day tasks. Certainly not during routine development. Certainly not while watching Flash videos. Certainly not while playing TF2.
That doesn't square with my experiences with my 2011 Air or my 2012 retina MBP, each running 12.04 (I avoid non-LTS releases on machines I need to work everyday). I'm glad it works for you. It did not for me, and I am disinclined to spend time fiddling with it when OS X works out of the box.
I already have a really nice Unix that works on the hardware without me doing anything (and lets me run Linux in a VM if I really need it)--I think it is understandable that switching is going to require being really impressed by the challenger to switch from the incumbent.
> Linux is getting switching support. It's already useable.
The closed-source nVidia drivers are a pain in the ass to use, though, and nouveau isn't up to snuff. Multi-monitor support is also simply not good enoughl the baseline isn't "usable", it's "as good as OS X", and, for me, I don't find TwinView (is there a different hack for 3+ monitors now?) as don't-have-to-care-about-it as OS X.
> I don't use a titling window manager. Besides, "I don't need those features" is a pretty sad arguing point.
Why? That makes no sense. If I don't need feature A, that feature A is available means it is not a plus for my use case.
> KWin, Compiz and Mutter ALL have support for Expose. KWin's implementation is actually nearly identical to the Mac implementation. In fact, they've had it for as long or longer than OS X has had it.
I realize that. I'm not referring to Expose, I'm referring to the dynamic workspace allocation (which, after using it, I prefer to the "4 virtual workspaces" approach) and the really very nice gesture support that doesn't exist out-of-the-box in Ubuntu. (While it may exist in some other form, if I have to do anything beyond "turn it on" I'm basically uninterested.)
If your OS doesn't do the little things I want, investing time into the bigger things doesn't make a lot of sense. This may be a recurring theme here.
> As someone who pays for an uses IntelliJ, I don't even know what the hell that means.
IntelliJ's font rendering was/is hosed in Ubuntu 12.04 out of the box and looked absolutely terrible. There may be a fix for it, but I didn't bother to look because the benefits to Ubuntu over OS X were not, for me, significant enough to invest time into solving the problem.
> [re: Xcode] And that's a good thing.
See, there you go. Your priorities do not mesh with mine or with others'. Why would you expect that they use your OS of choice if the tools of their choice do not exist?
I like Xcode. I like it more than Eclipse or QtCreator or KDevelop and I like it much more than vim+ctags. If the tools I like do not exist on a platform, that platform had better provide a big enough benefit to make me want to switch--and, your rageposting notwithstanding, Linux does not. Sorry?
> LOL. Is this even a serious point? Hello? VMWare Workstation? KVM+QEMU? Xen?
Yes, it's quite serious. KVM+QEMU does not (AFAIK--I may be wrong) have one-click out-of-the-box support for accelerated graphics. I did not examine Xen, but a cursory Google looks like more work than it's worth unless the OS otherwise makes a switch worthwhile (which it did not).
VMware Workstation did not have VMware Fusion-level support for accelerated graphics last I looked; maybe Workstation 9 is better, but I have not checked. I play games through VMware Fusion; just played XCOM on my flight today from Boston to Nashville. Having good graphics acceleration in my virtual machine matters to me.
> [re: MacVim/GVim] Are you fucking kidding me?
No, I'm quite serious. MacVim solves my biggest beef with GVim (the lack of good windowed-environment shortcuts) by melding in the OS X shortcuts--which also happen to be out-of-band keystrokes that Vim can't misinterpret. (This is also a plus to terminal usage on OS X; I often find myself highlighting something--I don't like copy on highlight--and reflexively pressing Ctrl-C on Linux or a Windows SSH session. I often find myself regretting it. I used to think OS X's Command key was stupid...but after a while using it, I vastly prefer it to the alternative.)
> Oh you're cute. I shouldn't have wasted my time replying to an obvious troll.
Even among developers, Linux on the desktop is a small minority. Maybe "niche" was understating it a little, but...not by much.
Anyway, different priorities does not imply trolling. I'm glad your solution works for you. I assumed you asked in good faith why someone would choose not to use Linux. I answered. You are not going to win either converts or e-points by judging my needs based on your preferences.
Why didn't you just say "I've haven't used it lately" and be done with it.
I also use Butler for another option for app switching/launching (Spotlight doesn't do this how I want it) and also to make Emacs PGUP/PGDN keys (Alt-V/Ctrl-V) work in every app. I also configured Cocoa for more Emacs-like functionality to extend the existing Emacs keyboard shortcuts it already supports. And I use BetterTouchTool to add volume up/down/mute to my mouse buttons.
That's a lot of changes to the way the default platform works, and I have grown to depend on all these modifications, but it makes OS X work more like how I want it to work, and I think that is absolutely worth doing. I wasn't really completely happy with OS X until I had these things in place. That these changes are made through 3rd party software without any horrible hacks (that I know of) makes me feel like this is extending rather than fighting.
On the otherhand, I do occasionally jailbreak my iPhone, and generally end up reverting back to stock, because that is fighting the platform.
So, yeah... Fighting the platform. Pretty much it. =]
OSX window management currently satisfies average users, but not power users. And since power users are exactly the kind of people who can do something about it, they are doing it.
Once I arrive in the office and sit down with two external displays, everything suddenly works against me. I don't want to use spaces (it confuses me to have 2 displays x N spaces), but Mission Control insists on the spaces bar. Putting Xcode into full screen will effectively disable the other display. I'd go insane without Divvy.
Now the difference between that person and the guy thats fine with changing the windows theme to a different color....theres a distinction there the size of the grand canyon.
(Like so many labels it spans a range on a continuum, but the thresholds should be fairly intuitively obvious.)
Not sure why it's not free, when BetterTouchTool is, but I'm not going to begrudge him that one-off payment for something I use every day.
It's pretty usable at this point. One problem with it (and any of the other tiling solutions), is the drop shadows OSX adds to windows. When you have your windows flush with each other they look pretty bad. Shadowkiller(http://unsanity.com/haxies/shadowkiller) removes all of the drop shadows. It claims to be incompatible with 10.6+, but I'm running it with no issues on 10.8.2 and have on most versions of OSX since 10.7
Did you use XMONAD on Linux too? If yes, is the user experience similar?
Thanks for the link.
I use Moom (http://manytricks.com/moom/) for quite a while and I'm happy with it so far as it integrates perfectly into the overall UI of OSX.
You have of course also convenient (and customizable) shortcuts for actions like 'Move & Zoom Window to Left Half', which is quite handy for example for webdevelopment on a smaller screen (Macbook), where you might want your browser to occupy one half and your editor the other half of the screen.
Here's my config file.
# Configs config defaultToCurrentScreen true config checkDefaultsOnLoad true config windowHintsShowIcons true config windowHintsIgnoreHiddenWindows false #config windowHintsDuration 5 config windowHintsSpread true #config windowHintsOrder persist config windowHintsFontColor 0;0;0;1.0 config windowHintsFontName Futura config windowHintsFontSize 70
bind e:cmd hint ASDFGHJKLQWERTYUIOPCVBN # use whatever keys you want
# Abstract positions alias full move screenOriginX;screenOriginY screenSizeX;screenSizeY alias lefthalf move screenOriginX;screenOriginY screenSizeX/2;screenSizeY alias righthalf move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY alias topright corner top-right resize:screenSizeX/2;screenSizeY/4 alias bottomright corner bottom-right resize:screenSizeX/2;screenSizeY/4*3
bind down:ctrl ${bottomright} bind left:ctrl ${lefthalf} bind up:ctrl ${full} bind right:ctrl ${righthalf} bind ;:ctrl ${topright}
# Resize Bindings bind right:alt resize +8% +0 bind left:alt resize -8% +0 bind up:alt resize +0 -8% bind down:alt resize +0 +8% bind right:ctrl;alt resize -8% +0 bottom-right bind left:ctrl;alt resize +8% +0 bottom-right bind up:ctrl;alt resize +0 +8% bottom-right bind down:ctrl;alt resize +0 -8% bottom-right
It's very customizable and has worked for me across at least three versions of os x.
Edit: Hmm, looks like SizeUp has this feature with "snapback". Cool.
I really miss sawfish, though. I like Alt-Tab to activate the actual window instead of a little a row of icons (it'd be even cooler if it would turn the inactive windows greyscale). I like being able to turn off window decorations per app. Sticky windows don't flicker when you change desktops, like they do on Lion. And, of course, a config file for the things you always want in the same place.
What I've been doing many years now is getting a 80 column terminal/editor/im client/whatever on one side of the screen and other apps on what's left. Seems pretty near perfection :)
Especially on OS X, where the hot keys are pretty well standardized and you can be pretty sure about what Command-Q does, spending all that room on window borders and few buttons seems so wasteful.
Will be giving Slate a trial period to see if I like it more.
https://github.com/fjolnir/xnomad
It works really well. Been using it for a while. The only real complaint I have about it is that it's based on xmonad instead of dwm, so a chosen unfocused window swaps with the focused window when you change focus instead of the formerly focused window being pushed to the top of a stack. But for working as a userspace program on OS X with no real modifications, it's really nice.
I've tried Slate, Divvy, and at least 5 or 6 others. xnomad is the only one I like.
One of the later versions added support for Javascript configuration which makes it extremely powerful: https://github.com/jigish/slate/wiki/JavaScript-Configs
Combined with binding your caps lock key to "hyper", I have a whole suite of customized keyboard shortcuts that are super useful!
A recent version of Slate fixed automatically detecting your screen layout, so whenever I plug/unplug my external monitor it will automatically re-layout my screens.
Anyone who has used it will agree. Sadly most people haven't.