xmonad-contrib-0.18.0: Community-maintained extensions for xmonad
Copyright(c) 2013 Ben Weitzman <benweitzman@gmail.com>
2015 Anton Pirogov <anton.pirogov@gmail.com>
2019 Mateusz Karbowy <obszczymucha@gmail.com
LicenseBSD3-style (see LICENSE)
MaintainerBen Weitzman <benweitzman@gmail.com>
Stabilityunstable
Portabilityunportable
Safe HaskellNone
LanguageHaskell2010

XMonad.Layout.BinarySpacePartition

Contents

Description

Layout where new windows will split the focused window in half, based off of BSPWM

Synopsis

Usage

You can use this module with the following in your xmonad.hs:

import XMonad.Layout.BinarySpacePartition

Then add the layout, using the default BSP (BinarySpacePartition)

myLayout = emptyBSP ||| etc ..

It may be a good idea to use XMonad.Actions.Navigation2D to move between the windows.

This layout responds to SetGeometry and is compatible with e.g. XMonad.Actions.MouseResize or XMonad.Layout.BorderResize. You should probably try both to decide which is better for you, if you want to be able to resize the splits with the mouse.

If you don't want to use the mouse, add the following key bindings to resize the splits with the keyboard:

, ((modm .|. altMask,                 xK_l     ), sendMessage $ ExpandTowards R)
, ((modm .|. altMask,                 xK_h     ), sendMessage $ ExpandTowards L)
, ((modm .|. altMask,                 xK_j     ), sendMessage $ ExpandTowards D)
, ((modm .|. altMask,                 xK_k     ), sendMessage $ ExpandTowards U)
, ((modm .|. altMask .|. ctrlMask ,   xK_l     ), sendMessage $ ShrinkFrom R)
, ((modm .|. altMask .|. ctrlMask ,   xK_h     ), sendMessage $ ShrinkFrom L)
, ((modm .|. altMask .|. ctrlMask ,   xK_j     ), sendMessage $ ShrinkFrom D)
, ((modm .|. altMask .|. ctrlMask ,   xK_k     ), sendMessage $ ShrinkFrom U)
, ((modm,                             xK_r     ), sendMessage Rotate)
, ((modm,                             xK_s     ), sendMessage Swap)
, ((modm,                             xK_n     ), sendMessage FocusParent)
, ((modm .|. ctrlMask,                xK_n     ), sendMessage SelectNode)
, ((modm .|. shiftMask,               xK_n     ), sendMessage MoveNode)
, ((modm .|. shiftMask .|. ctrlMask , xK_j     ), sendMessage $ SplitShift Prev)
, ((modm .|. shiftMask .|. ctrlMask , xK_k     ), sendMessage $ SplitShift Next)

Here's an alternative key mapping, this time using additionalKeysP, arrow keys, and slightly different behavior when resizing windows

, ("M-M1-<Left>",    sendMessage $ ExpandTowards L)
, ("M-M1-<Right>",   sendMessage $ ShrinkFrom L)
, ("M-M1-<Up>",      sendMessage $ ExpandTowards U)
, ("M-M1-<Down>",    sendMessage $ ShrinkFrom U)
, ("M-M1-C-<Left>",  sendMessage $ ShrinkFrom R)
, ("M-M1-C-<Right>", sendMessage $ ExpandTowards R)
, ("M-M1-C-<Up>",    sendMessage $ ShrinkFrom D)
, ("M-M1-C-<Down>",  sendMessage $ ExpandTowards D)
, ("M-s",            sendMessage $ Swap)
, ("M-M1-s",         sendMessage $ Rotate)
, ("M-S-C-j",        sendMessage $ SplitShift Prev)
, ("M-S-C-k",        sendMessage $ SplitShift Next)

Note that ExpandTowards x, ShrinkFrom x, and MoveSplit x are the same as respectively ExpandTowardsBy x 0.05, ShrinkFromBy x 0.05 and MoveSplitBy x 0.05.

If you have many windows open and the layout begins to look too hard to manage, you can Balance the layout, so that the current splittings are discarded and windows are tiled freshly in a way that the split depth is minimized. You can combine this with Equalize, which does not change your tree, but tunes the split ratios in a way that each window gets the same amount of space:

, ((myModMask,               xK_a),     sendMessage Balance)
, ((myModMask .|. shiftMask, xK_a),     sendMessage Equalize)

emptyBSP :: BinarySpacePartition a Source #

an empty BinarySpacePartition to use as a default for adding windows to.

data BinarySpacePartition a Source #

Instances

Instances details
LayoutClass BinarySpacePartition Window Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition

Read (BinarySpacePartition a) Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition

Show (BinarySpacePartition a) Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition

Eq (BinarySpacePartition a) Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition

data Rotate Source #

Message for rotating a split (horizontal/vertical) in the BSP

Constructors

Rotate 

Instances

Instances details
Message Rotate Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition

data Swap Source #

Message for swapping the left child of a split with the right child of split

Constructors

Swap 

Instances

Instances details
Message Swap Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition

data ResizeDirectional Source #

Message for resizing one of the cells in the BSP

Bundled Patterns

pattern ExpandTowards :: Direction2D -> ResizeDirectional

ExpandTowards x is now the equivalent of ExpandTowardsBy x 0.05

pattern ShrinkFrom :: Direction2D -> ResizeDirectional

ShrinkFrom x is now the equivalent of ShrinkFromBy x 0.05

pattern MoveSplit :: Direction2D -> ResizeDirectional

MoveSplit x is now the equivalent of MoveSplitBy x 0.05

Instances

Instances details
Message ResizeDirectional Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition

data TreeRotate Source #

Message for rotating the binary tree around the parent node of the window to the left or right

Constructors

RotateL 
RotateR 

Instances

Instances details
Message TreeRotate Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition

data TreeBalance Source #

Message to balance the tree in some way (Balance retiles the windows, Equalize changes ratios)

Constructors

Balance 
Equalize 

Instances

Instances details
Message TreeBalance Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition

data FocusParent Source #

Message to cyclically select the parent node instead of the leaf

Constructors

FocusParent 

Instances

Instances details
Message FocusParent Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition

data SelectMoveNode Source #

Message to move nodes inside the tree

Constructors

SelectNode 
MoveNode 

Instances

Instances details
Message SelectMoveNode Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition

data Direction2D Source #

Two-dimensional directions:

Constructors

U

Up

D

Down

R

Right

L

Left

Instances

Instances details
Bounded Direction2D Source # 
Instance details

Defined in XMonad.Util.Types

Enum Direction2D Source # 
Instance details

Defined in XMonad.Util.Types

Read Direction2D Source # 
Instance details

Defined in XMonad.Util.Types

Show Direction2D Source # 
Instance details

Defined in XMonad.Util.Types

Eq Direction2D Source # 
Instance details

Defined in XMonad.Util.Types

Ord Direction2D Source # 
Instance details

Defined in XMonad.Util.Types

newtype SplitShiftDirectional Source #

Message for shifting window by splitting its neighbour

Constructors

SplitShift Direction1D 

Instances

Instances details
Message SplitShiftDirectional Source # 
Instance details

Defined in XMonad.Layout.BinarySpacePartition