Default window management scheme in Mac OS X is not well-polished. For example, till Mac OS 14.6, there is no way to make an application occupy left half of the screen or to make an application always stay on top. To improve on that, my personal setup includes following applications.

  1. Better Touch Tool - At the most basic level, it provides “Window snapping” feature, drag the window to top-left and it expands to full screen. It allows full control of gestures and keyboard shortcuts. My personal setup includes “cmd + option + Tab” to switch between active windows of the same application. It is available via homebrew cask.

    Bash
    1
    
    brew cask install bettertouchtool

1.Rectangle - Rectangle allows quick resizing and shifting of windows. For example, Cmd + option + right/top/left/down arrow key will make the currently focused application occupy right/top/left/bottom half of the screen, respectively. AmethystDivvy or Moom are popular alternatives to Rectangle, an even bigger list can be seen here. Rectangle is available via homebrew as well.

Bash
1
brew cask install rectangle

As of Mac OS 11, Afloat is hard to setup and I no longer recommend it.

  1. Afloat - To keep a window floating on top of other windows. Unfortunately, setting this up is a bit convoluted and is not guaranteed to work. Following approach worked for me. This approach is based on findings of Ankur Gupta and Norio Nomura.

    1. Install SIMBL

      1. Download SIMBL 0.9.9.
      2. Extract the downloaded archive and run the .pkg installer file. You may need to go to System Preferences > Security & Privacy to allow running the installer.
      3. Finish installation of SIMBL.
    2. Bash
      1
      2
      3
      4
      
      git clone https://github.com/rinckd/afloat
      cd afloat
      xcodebuild GCC_ENABLE_OBJC_GC=unsupported -configuration Release
      cp -r build/Release/Afloat.bundle* /Library/Application Support/SIMBL/Plugins/
    3. Use an Applescript to start afloat automatically on start as described here.

    4. afloat will work for all the apps started after afloat has been injected.