Copyright | (c) 2007 David Roundy <droundy@darcs.net> Devin Mullins <me@twifkak.com> |
---|---|
License | BSD3-style (see LICENSE) |
Maintainer | Devin Mullins <me@twifkak.com>, Platon Pronko <platon7pronko@gmail.com> |
Stability | unstable |
Portability | unportable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
This is a rewrite of XMonad.Layout.WindowNavigation. WindowNavigation lets you assign keys to move up/down/left/right, based on actual cartesian window coordinates, rather than just going j/k on the stack.
This module is experimental. You'll have better luck with the original.
This module differs from the other in a few ways:
- You can go up/down/left/right across multiple screens.
- It doesn't provide little border colors for your neighboring windows.
- It doesn't provide the 'Move' action, which seems to be related to the XMonad.Layout.Combo extension.
- It tries to be slightly smarter about tracking your current position.
- Configuration is different.
Synopsis
- withWindowNavigation :: (KeySym, KeySym, KeySym, KeySym) -> XConfig l -> IO (XConfig l)
- withWindowNavigationKeys :: [((KeyMask, KeySym), WNAction)] -> XConfig l -> IO (XConfig l)
- data WNAction
- go :: IORef WNState -> Direction2D -> X ()
- swap :: IORef WNState -> Direction2D -> X ()
- goPure :: Monad x => Direction2D -> WNInput x -> x WNOutput
- swapPure :: Monad x => Direction2D -> WNInput x -> x WNOutput
- data Direction2D
- type WNState = Map WorkspaceId Point
Usage
To use it, you're going to apply the withWindowNavigation
function.
withWindowNavigation
performs some IO operations, so the syntax you'll use
is the same as the spawnPipe example in XMonad.Hooks.DynamicLog.
In particular:
main = do config <- withWindowNavigation (xK_w, xK_a, xK_s, xK_d) $ def { ... } xmonad config
Or, for the brave souls:
main = xmonad =<< withWindowNavigation (xK_w, xK_a, xK_s, xK_d) $ def { ... }
Here, we pass in the keys for navigation in counter-clockwise order from up.
It creates keybindings for modMask
to move to window, and modMask .|. shiftMask
to swap windows.
If you want more flexibility over your keybindings, you can use
withWindowNavigationKeys
, which takes a list of keys
-esque entries rather
than a tuple of the four directional keys. See the source code of
withWindowNavigation
for an example.
swap :: IORef WNState -> Direction2D -> X () Source #
Swap current window with the window in the given direction. Note: doesn't work with floating windows (don't think it makes much sense to swap floating windows).
goPure :: Monad x => Direction2D -> WNInput x -> x WNOutput Source #
Version of go
not dependent on X monad (needed for testing).
swapPure :: Monad x => Direction2D -> WNInput x -> x WNOutput Source #
Version of swap
not dependent on X monad (needed for testing).
data Direction2D Source #
Two-dimensional directions: