Just a modified version based on @Regexident 's for new macOS. The view hierarchy changed for new macOS UI, so the original version does not work. The modified code is as follows (works on macOS 10.13):
- (void)verticalizeButtonsForWindow:(NSWindow *)aWindow {
// New view hierarchy.
NSView *titleBarContainerView = aWindow.contentView.superview.subviews[1];
titleBarContainerView.frame = NSMakeRect(titleBarContainerView.frame.origin.x, titleBarContainerView.frame.origin.y - 60.0 + titleBarContainerView.frame.size.height, titleBarContainerView.frame.size.width, 60.0);
NSView *titleBarView = titleBarContainerView.subviews[0];
titleBarView.frame = NSMakeRect(0.0, 0.0, titleBarView.frame.size.width, 60.0);
NSArray *titleBarSubviews = titleBarView.subviews;
NSView *closeButton = [titleBarSubviews objectAtIndex:0];
NSRect closeButtonFrame = [closeButton frame];
NSView *minimizeButton = [titleBarSubviews objectAtIndex:2];
NSRect minimizeButtonFrame = [minimizeButton frame];
NSView *zoomButton = [titleBarSubviews objectAtIndex:1];
NSRect zoomButtonFrame = [zoomButton frame];
// Coordinate changed: add instead of minus.
[minimizeButton setFrame:NSMakeRect(closeButtonFrame.origin.x, closeButtonFrame.origin.y + 20.0, minimizeButtonFrame.size.width, minimizeButtonFrame.size.height)];
[zoomButton setFrame:NSMakeRect(closeButtonFrame.origin.x, closeButtonFrame.origin.y + 40.0, zoomButtonFrame.size.width, zoomButtonFrame.size.height)];
}
Result screenshot:
