Copyright | (c) Karsten Schoelzel <kuser@gmx.de> |
---|---|
License | BSD |
Maintainer | Karsten Schoelzel <kuser@gmx.de> |
Stability | stable |
Portability | unportable |
Safe Haskell | None |
Language | Haskell2010 |
Move and resize floating windows.
Synopsis
- keysMoveWindow :: ChangeDim -> Window -> X ()
- keysMoveWindowTo :: P -> G -> Window -> X ()
- keysResizeWindow :: ChangeDim -> G -> Window -> X ()
- keysAbsResizeWindow :: ChangeDim -> D -> Window -> X ()
- directionMoveWindow :: Int -> Direction2D -> Window -> X ()
- directionResizeWindow :: Int -> Direction2D -> Window -> X ()
- data Direction2D
- type P = (Position, Position)
- type G = (Rational, Rational)
- type ChangeDim = (Int, Int)
Usage
You can use this module with the following in your xmonad.hs
:
import XMonad.Actions.FloatKeys
Then add appropriate key bindings, for example:
, ((modm, xK_d ), withFocused (keysResizeWindow (-10,-10) (1,1))) , ((modm, xK_s ), withFocused (keysResizeWindow (10,10) (1,1))) , ((modm .|. shiftMask, xK_d ), withFocused (keysAbsResizeWindow (-10,-10) (1024,752))) , ((modm .|. shiftMask, xK_s ), withFocused (keysAbsResizeWindow (10,10) (1024,752))) , ((modm, xK_a ), withFocused (keysMoveWindowTo (512,384) (1%2,1%2)))
Using XMonad.Util.EZConfig syntax, we can easily build keybindings
where M-<arrow-keys>
moves the currently focused window and
M-S-<arrow-keys>
resizes it using directionMoveWindow
and
directionResizeWindow
:
[ ("M-" <> m <> k, withFocused $ f i) | (i, k) <- zip [U, D, R, L] ["<Up>", "<Down>", "<Right>", "<Left>"] , (f, m) <- [(directionMoveWindow 10, ""), (directionResizeWindow 10, "S-")] ]
For detailed instructions on editing your key bindings, see the tutorial.
keysMoveWindow :: ChangeDim -> Window -> X () Source #
keysMoveWindow (dx, dy)
moves the window by dx
pixels to the
right and dy
pixels down.
keysMoveWindowTo :: P -> G -> Window -> X () Source #
keysMoveWindowTo (x, y) (gx, gy)
moves the window relative
point (gx, gy)
to the point (x,y)
, where (gx,gy)
gives a
position relative to the window border, i.e. gx = 0
is the left
border, gx = 1
is the right border, gy = 0
is the top border, and
gy = 1
the bottom border.
For example, on a 1024x768 screen:
keysMoveWindowTo (512,384) (1%2, 1%2) -- center the window on screen keysMoveWindowTo (1024,0) (1, 0) -- put window in the top right corner
keysResizeWindow :: ChangeDim -> G -> Window -> X () Source #
keysResizeWindow (dx, dy) (gx, gy)
changes the width by dx
and the height by dy
, leaving the window-relative point (gx,
gy)
fixed.
For example:
keysResizeWindow (10, 0) (0, 0) -- make the window 10 pixels larger to the right keysResizeWindow (10, 0) (0, 1%2) -- does the same, unless sizeHints are applied keysResizeWindow (10, 10) (1%2, 1%2) -- add 5 pixels on each side keysResizeWindow (-10, -10) (0, 1) -- shrink the window in direction of the bottom-left corner
keysAbsResizeWindow :: ChangeDim -> D -> Window -> X () Source #
keysAbsResizeWindow (dx, dy) (ax, ay)
changes the width by dx
and the height by dy
, leaving the screen absolute point (ax,
ay)
fixed.
For example:
keysAbsResizeWindow (10, 10) (0, 0) -- enlarge the window; if it is not in the top-left corner it will also be moved down and to the right.
directionMoveWindow :: Int -> Direction2D -> Window -> X () Source #
directionMoveWindow delta dir win
moves the window win
by
delta
pixels in direction dir
.
directionResizeWindow :: Int -> Direction2D -> Window -> X () Source #
directionResizeWindow delta dir win
resizes the window win
by
delta
pixels in direction dir
.
data Direction2D Source #
Two-dimensional directions: