Hacker News new | past | comments | ask | show | jobs | submit login
Amethyst – A tiling window manager for OS X (ianyh.com)
246 points by xj9 on Dec 18, 2014 | hide | past | favorite | 105 comments



I posted this yesterday in the thread about the Rust-written window manager, but it's relevant here as well.

There are plenty of apps that provide varying levels of window-manager functionality to OS X. I would try a couple out and see which feels right to you. I have tried most of them, and personally prefer Moom.

http://manytricks.com/moom/ http://mizage.com/divvy/ http://ianyh.com/amethyst/ http://spectacleapp.com/ https://github.com/fjolnir/xnomad https://itunes.apple.com/us/app/bettersnaptool/id417375580?m.... https://github.com/sdegutis/mjolnir


I swear by Spectacle. After trying a number of other wms, this is the one I ended up using for more than a year now. It strikes a good balance for me between features and simplicity, and the keyboard shortcuts are intuitive and don't clash with other apps (like iTerm, Fantastical, etc).


You should try BetterTouchTool. It can do everything spectacle can, but has a lot more features, and support for trackpad gestures, and other nice things. It even has draggable window snapping like Windows/Ubuntu Unity.


That's what I used for about a year before Spectacle, but it's too heavyweight for my taste.


I swear by BetterTouchTool +1


Check BetterSnapTool!


I was going to add the URL for spectacle. Spectacle brought Windows 7-esque screen snapping to OS X for me.

https://itunes.apple.com/us/app/spectacle/id487069743?mt=12


Thanks, Spectacle seems something like I've been looking for, but didn't realize exists! :)


Minus Mjolnir, I've tried the rest and still prefer Slate[1] but it hasn't been updated since Feb 2013. Actually I had never heard of Mjolnir before now. I like Slate's ability to define a config file that is just a little more powerful than the competition, plus it's easy to sync across machines. I haven't updated to Yosemite, but Slate works wonderfully on Mavericks.

[1]: https://github.com/jigish/slate


I would 100% recommend Mjolnir as an actively-developed Slate alternative. sdegutis has a solid history of writing great window management stuff.


Mjolnir isn't actually under active development anymore. A few months ago sdegutis decided to write a closed source alternative which has not yet been released.

The mjolnir community does have an actively developed fork though called hammerspoon. http://www.hammerspoon.org/

I would recommend either of them, but hammerspoon has a smoother onboarding process.


Hmm, do you have a source for that? (That Mjolnir isn't being developed).

I just checked https://github.com/sdegutis/mjolnir, and I don't see any mention of this, and the last commit was from November 15.


It is mentioned on this mailing list post: https://groups.google.com/forum/#!topic/mjolnir-io/sRimOiYqM...


Thanks :)

We'd love to get feedback about Hammerspoon, or suggestions for plugins we could add.

Feel free to drop by #hammerspoon on Freenode, or file issues at https://github.com/Hammerspoon/hammerspoon


Fascinating. I hadn't realized Mjolnir wasn't under development anymore. I'm glad to see the community is keeping it going, though.


Mjolnir might still be worth trying. I'm not sure how you got Slate to work with Mavericks, but Mjolnir is very similar, under active development, and has Lua instead of JS as its scripting language.


There are some minor issues, but Slate generally works under Mavericks and Yosemite. Check out: https://github.com/jigish/slate/issues/405


Unfortunately, the lead developer has decided to work on a closed-source alternative to Mjolnir so a new fork has been made.


It looks like he thought about merging them for at least a few minutes[0].

[0]: https://botbot.me/freenode/hammerspoon/2014-11-25/?msg=26223...


said fork is Hammerspoon - http://www.hammerspoon.org/


My preference at the moment is Optimal Layout.

http://most-advantageous.com/optimal-layout/

but, I haven't spent much time with Mjolnir.


FWIW, I'm a very happy user of bettersnaptool


For another option, I prefer Window Tidy. https://itunes.apple.com/us/app/window-tidy/id456609775


Have you tried TotalSpaces? It is my personal favourite so far, though I haven't tried all the others you listed, so would love to hear some other opinions on it...Thanks :)


The only one here I've been able to try was Divvy. Thought it was pretty useful in the pre-multidrag days.


Moom is by far the best I have tried, also. I really love that app.


Is Moom any better than Spectacle?


I don't think so. I went from Moom to Spectacle something like a year ago and haven't looked back.


Hyperdock is another


I'm the Amethyst developer. I'm happy to answer any questions people have. I'm hopping on a cross-country plane flight in about an hour, but I have a layover. I'll try get back to people as soon as I can.


I've had this idea for a while and I'm not sure if it's possible from your video. I have a code window, and ideally it would be next to everything: a documentation brower, a test browser, and a terminal. There isn't enough room for that.

It would be awesome if I could cycle through "spaces" that laid the same code window out next to multiple different things. Like maybe 1 is code | browser and 2 is terminal | code.

Possible?


You can do that in awesomewm with tags, just in case you seem a similar named concept in Amethyst


Yes, this is definitely possible with tags in awesome.

"tags" are an extension of "workspaces". But rather than being a one-to-one-to-one relation (one window is in one workspace and you view one workspace at a time), tags are many-to-many-to-many. A window can be present in many tags, and you can view more than one tag at a time.

Most of the time, I use tags just like "normal" workspaces.

The GPs use case may be solved in two ways using tags, either by viewing two workspaces at the same time (the other one is code tag, and the other one is switched between docs, browser, tests) or by having the code editor present in several tags.


Is there a way to set up custom layouts? Eg, I'd love to have a variant of tall/wide-tall that puts the main area on the right side of the display, rather than the left.


Not yet. I've toyed with different ways of doing this, but haven't really decided on one that I really like. Maybe I should just go the road of other window managers that expose a scripting interface. Write a javascript file or something that defines a function that takes a list of windows and some other parameters and returns frames for the windows, binds to commands for modifying layout state, etc.


Would it be simpler to just define a couple "mirrored" variants of the main layouts?


Yeah, there's already an issue to track that (https://github.com/ianyh/Amethyst/issues/129), but in general it seems like people want more flexibility in defining how they want things to tile.


+1 for this question. I've got a dual head box hooked up to my machine, and I'd do just about anything for a window management solution that would let me divide up this 3840x1080 "virtual" display into two equal displays. Mostly so dialogs stop appearing in the split between displays.


Is there any way to turn off window shadows in OS X? Having the main window draw shadows over neighboring windows is really ugly.



Just wanted to say that I liked your donation section. You don't often see one where someone says Here are some things that you'd might rather donate to than my project.


Cool app, thank you. Trying it out.

Do you know if it's possible to have apps start in fullscreen (the real one, as in Yosemite) by default? I would like that as default and only tile on some spaces.


That is an interesting idea. I'm not actually sure whether or not it's possible. Unfortunately I'm on a plane and my phone won't let me make github issues. I'll add one to look into when I land.


How was your flight?


I've been using Amethyst as my WM for a couple months now, and have used XMonad for significant stretches in the past.

Amethyst tries to bring the XMonad experience to OSX. I think it does an admirable job, but there are some distinctions. Amethyst is simpler to set up, and is more forgiving to newcomers. It has a GUI for configuration, and an easily accessible list of commands. It also works on top of OSX's WM, so it's not so enormous a departure, especially compared to XMonad's fairly extreme dismissal of the mouse.

On the down side, XMonad really outshines Amethyst when it comes to performance. Amethyst is downright sluggish, where I've always found XMonad to be very responsive. Still, it's overall a true enough translation, and the sluggishness rarely actually hinders productivity. Overally, I think Amethyst is a capable daily driver, and a great intro to tiled window managers.


When I had a linux machine I used i3 and loved it. After moving to OSX I search around for a solution and finally found Amethyst. Gave it a solid try for ~6 months or so but recently have moved to using BetterTouchTool with some custom key shortcuts for moving and resizing windows. I've found this works the best for my workflow. I would love to use a tiling window manager for OSX but in the end found Amethyst to be a little sluggish and, as mentioned elsewhere in this thread, buggy for full screen apps. I think ianyh has done an amazing job at working around a system that wasn't meant to be extended in this way, but that puts it at a dis-advantage right off the bat unfortunately.


To me the performance of XMonad detracts from the trope that Haskell isn't performant (which I've been hearing/seeing lately).


I mean, its often slower than hand tuned assembly mixed with Fortran if that's what you mean.. Otoh,most things are


It is also very buggy around fullscreen apps, enough so that I stopped using it after a week. Slate et al worked much better for me (still slower than TWMs on linux) but forced or at least tempted more setup which is definitely the benefit of Amethyst.


It is super buggy for fullscreen apps. Unfortunately, I have this superpower (or curse) of not being able to reproduce bugs. Every time I get near a coworker's computer, whatever they were talking to me about starts working.

There's a long thread on github about this (https://github.com/ianyh/Amethyst/issues/254). I'd love to know more about your set up. I've been trying for weeks to make it work for people, but Apple's APIs for this are kind of crap. And by crap I mean non-existent. I've started using private APIs to do things like figuring out whether or not the current desktop is a fullscreen app.


I came across that issue and might contribute info in the way of reproducing bugs, but my setup is pretty simple: near fresh Yosemite install, one Chrome window, one Finder window, and two Emacs.app frames (one fullscreen).


Hi, ianyh! :) the repro steps I've posted seem to be pretty consistent, but I think it's hilarious you can't seem to replicate it. Superpower indeed!


Gah! I'll keep trying to see if I can reproduce. I really appreciate you finding something deterministic, though! This bug is slowly driving me mad.


I like tiling managers, but dislike having predefined layouts. Being able to split any tile horizontally or vertically arbitrarily many times is the way to go (i.e. i3-style). Would like to see tiling wm authors to consider this option when starting new projects.


It's on the list of things I want to do. I should have used a tree structure off the bat and done something like binary space partitioning.


As someone who's relatively new to tiling window managers (I've used manual ones like Divvy and Moom quite a bit though): is this approach only really effective with large monitors?

I've given Amethyst and other WMs a shot in the past and been instantly annoyed when they automatically tucked away windows into unusably small configurations. Is this part of the learning curve and addressed by proper configuration, or should be avoiding this for use on small screens? e.g. a MB Air 13"


Am I the only weirdo who just uses multiple workspaces with ctrl-arrow and cmd-tab like a mad man? I genuinely enjoy it, especially with a second monitor.

I, maybe, have one or two apps sharing a single workspace. Most apps are in full screen.


You are not. :) I don't usually use full screen mode for apps when my Macbook Pro is docked, but when I'm just using the laptop screen it's ended up being surprisingly useful. (At least I was surprised.) Docked I'm usually only using two virtual desktops, sometimes three.

Mission Control gets slagged on more than it deserves -- it's fast and functional. On point for the actual link to Amethyst: I use Moom for window resizing/control from the keyboard, but in practice the mouse is actually pretty darn efficient when what I want is to make a window this big and put it over there.


This is pretty much how I use my favorite tiling window manager on Linux: i3.[1]

There are occasions when tiling features come in handy, however (such as when you want to see more than one window at the same time).

[1] - http://i3wm.org/


I do this with trackpad swipes and a grid of desktops (using TotalSpaces2 currently). Each app or task has its "place". I've tried other stuff, but the spatial metaphor really works for me.


Wow. This has focus follows mouse! (though they call it "mouse-follows-focus", for some reason)

I've been told focus follows mouse was impossible on OS X.


This is a woefully confusing decision on my part. There are actually two features: mouse-follows-focus and focus-follows-mouse.

The former just means the cursor moves along with window focus. So if you cycle to the next window clockwise, the cursor moves to the center of that window. Or if you focus a window on another display, the cursor moves to the center of that window. This makes it really convenient to do things like navigating between spaces on multiple displays as the display with the cursor is the one who responds to space switching.

The latter is probably what you're thinking of. You move the cursor and the window underneath it comes into focus. It's kind of experimental and still seems to be fairly buggy, though.

The "impossible" thing is that in OS X there is no distinction between the window that is focused and the window that is the keyboard responder, so the classic idea of focus-follows-mouse doesn't work. I haven't found the distinction personally very meaningful.


Who told you that? You could do it with just applescript if you wanted to, just need to enable accessibility so you can control windows and the mouse.


I've seen this "limitation" mentioned in various online forums, such as the following.

"Mac OS X interface and ergonomy is (as said by apple) not 'compatible' with the focus-follow mouse mode. Why ? Because a single application interface is split into lots of different elements. For exemple, you use an application like photoshop or word, you'll have different panels floating around the main window. With sloppy focus mode enabled, with an application below, you would'nt be able to reach them. And how should they consider the desktop, which is, finally, just a 'root' window managed by the Finder..."[1]

Here are some more.

"Sadly, it seems that for the time being there is no good way to do this in OS X."[2]

"The fundamental problem with sloppy focus on the Mac is that the menu bar is always associated with the currently focused application; if you had sloppy focus, accessing the menu bar for a specific application would be supremely difficult."[2]

[1] - http://jeremy.zawodny.com/blog/archives/000149.html#comment-...

[2] - http://superuser.com/questions/27306/focus-follows-mouse-or-...


""The fundamental problem with sloppy focus on the Mac is that the menu bar is always associated with the currently focused application; if you had sloppy focus, accessing the menu bar for a specific application would be supremely difficult.""

Well that's the real trick. It would be difficult to access the menu bar if you had a mess of weirdly placed and sized windows scattered around, like the OSX UI paradigm assumes you do.

But if you have a tiling window manager, and especially if some of those tiles are full height, it's quite easy. Just put your mouse in the window you need, and then go straight up to the menu bar.

Yes, once in a while you need to cross some extra real estate with the mouse in order to "dodge" a UI element you don't want to switch focus to, but it's really no problem.

I've been using tiling UI and focus-follows-mouse on snow leopard since 2009. I couldn't work any other way.


One trick I use to get around the "move mouse over another application in the direction of the menu bar and loose focus" problem is to use MondoMouse, it also adds focus follows mouse but with a configurable timeout. You can also configure a shortcut to focus the application menu, i think the default is F2.


Regarding the first argument (apps with multiple panels), the author should try Linux. Gimp (and others) works fine on Linux with sloppy focus.

The global menu bar is indeed a problem, but it can be alleviated by adding a small delay before changing focus (so fast mouse movements to reach the menu won't change focus).


First off, thank you ianyh!! Tiling window managers are a huge productivity tool, and when I see people manually resizing windows, it's painful to watch. I'm on OSX now, but used XMonad extensively when I was on a *n?x distro.

At the moment, I'm using Spectacle for OSX. http://spectacleapp.com/. Are there reasons I should use Amethyst instead? I'd love to see a feature matrix or something in you FAQ about the other options, and what Amethyst brings to the table.


A feature matrix isn't a bad idea (and I opened an issue to track https://github.com/ianyh/Amethyst/issues/267), but it's kind of hard to compare as they are such different pieces of software. Spectacle is manual window management and Amethyst is tiling window management.

Manual window management generally gives you better control and generally less overhead in terms of complexity. So it works well in the case of "I want to be able to move this window to the upper half of the screen", "I want to be able to make this window take up the entire screen", etc. You have to trade simplicity to get flexibility, though. What if I want to be able to move window to the upper right hand quarter of the screen? Or what if I want my screen divided into a grid of 3x4 and I want a window in the [0][1] position? You can accomplish all of those things, but you have to specify how to go about it, thus adding complexity. Slate, for example, puts that complexity upfront in writing a config file. Divvy, for example, puts that complexity at runtime.

Tiling window management gives you a more hands off approach. So things like "I want all of my windows to be laid out in this orientation, but I don't want to move them myself", "I want all of my windows to be visible at any given time", etc. You don't take actions to lay windows out, you just define algorithms for how they should be laid out and let the software sort them out. You have to trade simplicity to get control, though. Defining those algorithms can be complicated if you're not doing something really straightforward, and if you're not doing something straightforward it can sometimes be non-trivial to grok what's actually going on. Or you end up doing a lot of runtime massaging to get things working the way you want.

To each their own, though. I prefer tiling window management, I have coworkers who prefer manual window management. They're just different tools.


For Windows I just stumbled across MaxTo (http://maxto.net/) I've been using it for a couple of days and I'm really impressed.


In a previous life I used http://code.google.com/p/python-windows-tiler/ for Windows. It's not the most stable application though.


I've used BetterTouchTool's tiling functionality for the most part, but I just got a 4K monitor and most granular most tiling managers can do is quarters. I wish there was an out-of-the-box solution that allows me to just tile my space more granularly


I use a window manager, but really only to have a hotkey that fullscreens a window (three, actually: one for current, one for left and one for right display). With 2 displays, I find that I have all I need with just an editor window and a documentation browser window. I guess I have smaller displays than most people because if I resize a window (browser windows mostly) beyond about 2/3 its layout gets messed up or a horizontal scrollbar appears.


I really just want a window manager that allows windows to snap to each other and the edges of the screen when resizing or moving them. Does something like that exist? I don't care for the pre-defined layouts or hotkeys, I just want to be able to visually drag/resize my windows and have them take up the most optimal amount of space.


I use SizeUp:

http://www.irradiatedsoftware.com/sizeup/

It's a basic snap-to-grid thing. You have commands to send a window to any of the 4 quarters, 4 halves, or full screen, and to send the window to another workspace.


I personally use Cinch, which is good enough for me: Maximise if I drag a window to the top, left/right half if I drag a window to the side.

http://www.irradiatedsoftware.com/cinch/

So far I've never seen a tool which glued one window to the other though.


Yeah, that's about as far as I've gotten as well. Snapping to other windows seems like the natural next step for me--it's weird that not a single app has taken that approach, though.


That's something I want to do. I want basically anything you can do with key commands to be possible via the mouse. Some of that comes out of the box with OS X, but some of it (like dragging to change layout parameters) is a bit trickier.


I've been using Zooom/2 for this for a year or two, and haven't had any complaints. http://coderage-software.com/zooom/index.html


That looks like exactly what I've been looking for! Thank you!



It might very well support the behavior that I'm looking for (the trial doesn't seem to work so I can't tell for sure), but I don't see anything in the description about snapping to other windows. It sounds like you set some pre-defined snapping sizes/areas, and those are used. Please correct me if I'm wrong.


BetterTouchTool has the same functionality as the snap tool baked in, and it's free!

(In preferences look at "Action Settings" in the advanced tab).

http://www.bettertouchtool.net/


Have you tried Optimal Layout?

http://most-advantageous.com/optimal-layout/


Yes, but I'm not looking for a grid-based window manager. I just want to be able to snap to other windows. As far as I could tell, Optimal Layout doesn't do that.


I wish there was a window manager such as this but where you could put the application into full screen mode. So have two programs running in full screen mode side by side. Sublime and others (iterm) look so much less distracting without their window frames.


Weird, I was literally just googling for this and found Amethyst. Seems nice.

I've noticed it gets a little slow to rearrange things sometimes with lots of windows but the functionality I need is all there.

Works great with my three screen setup too, which many tools like this don't.


No one mentioned this one yet, it's not free but works pretty well with Windows 7-like snapping too: http://www.nulana.com/flexiglass/


What's the benefit of using this vs. WMs like SizeUp?

I'm asking this question because I'm quite comfortable with SizeUp and don't understand if learning how to use a WM is worth it.


Seems to me that there are 2 big benefits over sizeup (though i'm basing this entirely on their website, i've not used it)

1 - With sizeup you have to manually move your apps around. With this, new windows are automatically tiled (and you can then move things around afterwards with the keyboard shortcuts)

2 - This seems like it supports more complex layouts (with various layouts built in)


That is generally correct. I wrote a longer comment about this but SizeUp is about manually managing windows and Amethyst is about letting software manage windows for you. It's generally a matter of personal preference which you prefer.


In case anyone looking for the referenced comment: https://news.ycombinator.com/item?id=8769044


Does anyone know whether there's any chance i3 could be ported to OS X's native windowing system (whatever it's called) ?


You can probably run i3 in X11, although non-X11 apps won't work with it. Your best bet is to run i3 in a full-screen VM.

I researched this myself a few months back, since i3 was the biggest thing I missed when I had to switch to OS X (new company, new computer). Eventually I gave up and settled on Amethyst. It's not bad once you set up the keyboard shortcuts to your liking. The main things I miss are the tree structure for window organization, and window borders that stick together when resized.

I created some bounties on bountysource for features I'd like to see in this project. Hopefully other people want them enough to contribute as well, and ianyh will get a nice return on his contributions.


Seeing this (and others like it), what's the benefit of having a tiling-only WM over a floating WM with tiling capabilities?


Well, Amethyst can float windows so I wouldn't call it a tiling-only WM, but there's a lot of reasons I prefer it over floating window managers.

I'm really lazy and want software to deal with my windows for me. I used floating window managers for a long time and found that I spent a lot of my time arranging windows in the same patterns.

I also found that with floating window managers were just too limited for things I wanted to do on a daily basis. Two come to mind off hand. I want to be able to make a window temporarily bigger, but keeping the other windows on the screen and sized appropriately and I want to be able to easily switch which window is the "primary window." When I'm doing web development without external screens I find it very help to have an editor and a browser window open at the same time. One of them takes up about 80% of the screen and the other takes up about 20% of the screen, but I switch which is which pretty often. Make the editor take up most of the screen, make some changes loosely referencing things in the browser window, make the browser window take up most of the screen and see effects loosely referencing the code in the editor. And sometimes I've also got a Hulu or Netflix window open taking 20% of the width and 50% of the height. The complexity of making that work with a floating window manager is just too much compared to how easy it is for a tiling window manager.

I also just like being able to see everything on my screen at the same time.


Looks really weird with the window shadows though.


Yep, I like adding some space between windows.

I proposed something like that for spectale some weeks ago. Got refused. https://github.com/eczarny/spectacle/issues/290

I mostly use apps in fullscreen and sometimes need to see 3 /3 apps at the same time, then switch to fullscreen, then back to tiled mode again...

Small aesthetic gaps around windows may not be such a waste of screen estate.


Window spacing is actually in the works for Amethyst. It just has some issues because some windows just don't size exactly. Terminal windows, for example, only size in increments of cursor size, so you're almost always a bit smaller or a bit larger than you want, which makes the spacing in between windows look weird.


I noticed that with or without my spectacle patch.

I tend to prefer uneven gaps than no gaps though, considering how unpleasant overlapping drop shadows looks like.


You can theoretically turn off window shadows. https://github.com/puffnfresh/toggle-osx-shadows


Use it also. Cool tiling manager.


Use this every day. Works great.


it's ok, I prefer to be able to set windows where I want them and assign keyboard shortcuts. I was the original author of Breeze, now autumn apps has it available - http://autumnapps.com/breeze/index.html


Divvy is sufficient for me.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: