XMonad.Operations

xmonad-0.15: A tiling window manager

Copyright | (c) Spencer Janssen 2007
License | BSD3-style (see LICENSE)
Maintainer | dons@cse.unsw.edu.au
Stability | unstable
Portability | not portable, Typeable deriving, mtl, posix
Safe Haskell | None
Language | Haskell98

XMonad.Operations

Description

Operations.

Synopsis

- manage :: Window -> X ()
- unmanage :: Window -> X ()
- killWindow :: Window -> X ()
- kill :: X ()
- windows :: (WindowSet -> WindowSet) -> X ()
- modifyWindowSet :: (WindowSet -> WindowSet) -> X ()
- windowBracket :: (a -> Bool) -> X a -> X a
- windowBracket_ :: X Any -> X ()
- scaleRationalRect :: Rectangle -> RationalRect -> Rectangle
- setWMState :: Window -> Int -> X ()
- setWindowBorderWithFallback :: Display -> Window -> String -> Pixel -> X ()
- hide :: Window -> X ()
- reveal :: Window -> X ()
- setInitialProperties :: Window -> X ()
- refresh :: X ()
- clearEvents :: EventMask -> X ()
- tileWindow :: Window -> Rectangle -> X ()
- containedIn :: Rectangle -> Rectangle -> Bool
- nubScreens :: [Rectangle] -> [Rectangle]
- getCleanedScreenInfo :: MonadIO m => Display -> m [Rectangle]
- rescreen :: X ()
- setButtonGrab :: Bool -> Window -> X ()
- setTopFocus :: X ()
- focus :: Window -> X ()
- setFocusX :: Window -> X ()
- sendMessage :: Message a => a -> X ()
- broadcastMessage :: Message a => a -> X ()
- sendMessageWithNoRefresh :: Message a => a -> Workspace WorkspaceId (Layout Window) Window -> X ()
- updateLayout :: WorkspaceId -> Maybe (Layout Window) -> X ()
- setLayout :: Layout Window -> X ()
- screenWorkspace :: ScreenId -> X (Maybe WorkspaceId)
- withFocused :: (Window -> X ()) -> X ()
- isClient :: Window -> X Bool
- extraModifiers :: X [KeyMask]
- cleanMask :: KeyMask -> X KeyMask
- initColor :: Display -> String -> IO (Maybe Pixel)
- data StateFile = StateFile {
  - sfWins :: StackSet WorkspaceId String Window ScreenId ScreenDetail
  - sfExt :: [(String, String)]
  }
- writeStateToFile :: X ()
- readStateFile :: (LayoutClass l Window, Read (l Window)) => XConfig l -> X (Maybe XState)
- migrateState :: (Functor m, MonadIO m) => String -> String -> m ()
- restart :: String -> Bool -> X ()
- floatLocation :: Window -> X (ScreenId, RationalRect)
- pointScreen :: Position -> Position -> X (Maybe (Screen WorkspaceId (Layout Window) Window ScreenId ScreenDetail))
- pointWithin :: Position -> Position -> Rectangle -> Bool
- float :: Window -> X ()
- mouseDrag :: (Position -> Position -> X ()) -> X () -> X ()
- mouseMoveWindow :: Window -> X ()
- mouseResizeWindow :: Window -> X ()
- type D = (Dimension, Dimension)
- mkAdjust :: Window -> X (D -> D)
- applySizeHints :: Integral a => Dimension -> SizeHints -> (a, a) -> D
- applySizeHintsContents :: Integral a => SizeHints -> (a, a) -> D
- applySizeHints' :: SizeHints -> D -> D
- applyAspectHint :: (D, D) -> D -> D
- applyResizeIncHint :: D -> D -> D
- applyMaxSizeHint :: D -> D -> D

# Documentation

manage :: Window -> X () #

Window manager operations manage. Add a new window to be managed in the current workspace. Bring it into focus.

Whether the window is already managed, or not, it is mapped, has its border set, and its event mask set.

unmanage :: Window -> X () #

unmanage. A window no longer exists, remove it from the window list, on whatever workspace it is.

killWindow :: Window -> X () #

Kill the specified window. If we do kill it, we'll get a delete notify back from X.

There are two ways to delete a window. Either just kill it, or if it supports the delete protocol, send a delete event (e.g. firefox)

kill :: X () #

Kill the currently focused client.

windows :: (WindowSet -> WindowSet) -> X () #

windows. Modify the current window list with a pure function, and refresh

modifyWindowSet :: (WindowSet -> WindowSet) -> X () #

Modify the `WindowSet` in state with no special handling.

windowBracket :: (a -> Bool) -> X a -> X a #

Perform an `X` action and check its return value against a predicate p. If p holds, unwind changes to the `WindowSet` and replay them using `windows`.

windowBracket_ :: X Any -> X () #

A version of `windowBracket` that discards the return value, and handles an `X` action reporting its need for refresh via `Any`.

scaleRationalRect :: Rectangle -> RationalRect -> Rectangle #

Produce the actual rectangle from a screen and a ratio on that screen.

setWMState :: Window -> Int -> X () #

setWMState. set the WM_STATE property

setWindowBorderWithFallback :: Display -> Window -> String -> Pixel -> X () #

Set the border color using the window's color map, if possible, otherwise fallback to the color in `Pixel`.

hide :: Window -> X () #

hide. Hide a window by unmapping it, and setting Iconified.

reveal :: Window -> X () #

reveal. Show a window by mapping it and setting Normal this is harmless if the window was already visible

setInitialProperties :: Window -> X () #

Set some properties when we initially gain control of a window

refresh :: X () #

refresh. Render the currently visible workspaces, as determined by the `StackSet`. Also, set focus to the focused window.

This is our `view` operation (MVC), in that it pretty prints our model with X calls.

clearEvents :: EventMask -> X () #

clearEvents. Remove all events of a given type from the event queue.

tileWindow :: Window -> Rectangle -> X () #

tileWindow. Moves and resizes w such that it fits inside the given rectangle, including its border.

containedIn :: Rectangle -> Rectangle -> Bool #

Returns `True` if the first rectangle is contained within, but not equal to the second.

nubScreens :: [Rectangle] -> [Rectangle] #

Given a list of screens, remove all duplicated screens and screens that are entirely contained within another.

getCleanedScreenInfo :: MonadIO m => Display -> m [Rectangle] #

Cleans the list of screens according to the rules documented for nubScreens.

rescreen :: X () #

rescreen. The screen configuration may have changed (due to xrandr), update the state and refresh the screen, and reset the gap.

setButtonGrab :: Bool -> Window -> X () #

setButtonGrab. Tell whether or not to intercept clicks on a given window

setTopFocus :: X () #

Set the focus to the window on top of the stack, or root

focus :: Window -> X () #

Set focus explicitly to window `w` if it is managed by us, or root. This happens if X notices we've moved the mouse (and perhaps moved the mouse to a new screen).

setFocusX :: Window -> X () #

Call X to set the keyboard focus details.

sendMessage :: Message a => a -> X () #

Throw a message to the current `LayoutClass` possibly modifying how we layout the windows, in which case changes are handled through a refresh.

broadcastMessage :: Message a => a -> X () #

Send a message to all layouts, without refreshing.

sendMessageWithNoRefresh :: Message a => a -> Workspace WorkspaceId (Layout Window) Window -> X () #

Send a message to a layout, without refreshing.

updateLayout :: WorkspaceId -> Maybe (Layout Window) -> X () #

Update the layout field of a workspace

setLayout :: Layout Window -> X () #

Set the layout of the currently viewed workspace

screenWorkspace :: ScreenId -> X (Maybe WorkspaceId) #

Return workspace visible on screen `sc`, or `Nothing`.

withFocused :: (Window -> X ()) -> X () #

Apply an `X` operation to the currently focused window, if there is one.

isClient :: Window -> X Bool #

`True` if window is under management by us

extraModifiers :: X [KeyMask] #

Combinations of extra modifier masks we need to grab keys/buttons for. (numlock and capslock)

cleanMask :: KeyMask -> X KeyMask #

Strip numlock/capslock from a mask

initColor :: Display -> String -> IO (Maybe Pixel) #

Get the `Pixel` value for a named color

data StateFile #

A type to help serialize xmonad's state to a file.

Constructors

StateFile |
Fields sfWins :: StackSet WorkspaceId String Window ScreenId ScreenDetail sfExt :: [(String, String)]

Instances

Read StateFile # |
Instance details Defined in XMonad.Operations Methods readsPrec :: Int -> ReadS StateFile # readList :: ReadS [StateFile] # readPrec :: ReadPrec StateFile # readListPrec :: ReadPrec [StateFile] #
Show StateFile # |
Instance details Defined in XMonad.Operations Methods showsPrec :: Int -> StateFile -> ShowS # show :: StateFile -> String # showList :: [StateFile] -> ShowS #

writeStateToFile :: X () #

Write the current window state (and extensible state) to a file so that xmonad can resume with that state intact.

readStateFile :: (LayoutClass l Window, Read (l Window)) => XConfig l -> X (Maybe XState) #

Read the state of a previous xmonad instance from a file and return that state. The state file is removed after reading it.

migrateState :: (Functor m, MonadIO m) => String -> String -> m () #

Deprecated: will be removed some point in the future.

Migrate state from a previously running xmonad instance that used the older `--resume` technique.

restart :: String -> Bool -> X () #

`restart name resume`. Attempt to restart xmonad by executing the program `name`. If `resume` is `True`, restart with the current window state. When executing another window manager, `resume` should be `False`.

floatLocation :: Window -> X (ScreenId, RationalRect) #

Floating layer support

Given a window, find the screen it is located on, and compute the geometry of that window wrt. that screen.

pointScreen :: Position -> Position -> X (Maybe (Screen WorkspaceId (Layout Window) Window ScreenId ScreenDetail)) #

Given a point, determine the screen (if any) that contains it.

pointWithin :: Position -> Position -> Rectangle -> Bool #

`pointWithin x y r` returns `True` if the `(x, y)` co-ordinate is within `r`.

float :: Window -> X () #

Make a tiled window floating, using its suggested rectangle

mouseDrag :: (Position -> Position -> X ()) -> X () -> X () #

Accumulate mouse motion events

mouseMoveWindow :: Window -> X () #

drag the window under the cursor with the mouse while it is dragged

mouseResizeWindow :: Window -> X () #

resize the window under the cursor with the mouse while it is dragged

type D = (Dimension, Dimension) #

Support for window size hints

mkAdjust :: Window -> X (D -> D) #

Given a window, build an adjuster function that will reduce the given dimensions according to the window's border width and size hints.

applySizeHints :: Integral a => Dimension -> SizeHints -> (a, a) -> D #

Reduce the dimensions if needed to comply to the given SizeHints, taking window borders into account.

applySizeHintsContents :: Integral a => SizeHints -> (a, a) -> D #

Reduce the dimensions if needed to comply to the given SizeHints.

applySizeHints' :: SizeHints -> D -> D #

XXX comment me

applyAspectHint :: (D, D) -> D -> D #

Reduce the dimensions so their aspect ratio falls between the two given aspect ratios.

applyResizeIncHint :: D -> D -> D #

Reduce the dimensions so they are a multiple of the size increments.

applyMaxSizeHint :: D -> D -> D #

Reduce the dimensions if they exceed the given maximum dimensions.