!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~portable, Haskell 98 experimentaldons@galois.com-9A stack is a cursor onto a (possibly empty) window list. 6 The data structure tracks focus by construction, and 7 the master window is by convention the top-most item. > Focus operations will not reorder the list that results from ; flattening the cursor. The structure can be envisaged as:   +-- master: < '7' >  up | [ '2' ]  +--------- [ '3' ]  focus: < '4' >  dn +----------- [ '8' ] A ; can be viewed as a list with a hole punched in it to make ' the focused position. Under the zipper/calculus view of such . structures, it is the differentiation of a [a], and integrating it + back has a natural implementation used in #. "A structure for window geometries 2A workspace is just a tag, a layout, and a stack. 0Visible workspaces, and their Xinerama screens. .A cursor into a non-empty list of workspaces. BWe puncture the workspace list, producing a hole in the structure D used to track the currently focused workspace. The two other lists A that are produced are used to track those workspaces visible as > Xinerama screens, and those workspaces not visible anywhere. currently focused workspace ,non-focused workspaces, visible in xinerama  workspaces not visible anywhere floating windows ;this function indicates to catch that an error is expected O(n);. Create a new stackset, of empty stacks, with given tags, 7 with physical screens whose descriptions are given by m. The  number of physical screens (length m) should be less than or D equal to the number of workspace tags. The first workspace in the  list will be current. NXinerama: Virtual workspaces are assigned to physical screens, starting at 0. O(w)(. Set focus to the workspace with index 'i'. = If the index is out of range, return the original StackSet. EXinerama: If the workspace is not visible on any Xinerama screen, it F becomes the current screen. If it is in the visible list, it becomes  current. DSet focus to the given workspace. If that workspace does not exist L in the stackset, the original workspace is returned. If that workspace is  B, then display that workspace on the current screen, and move the  current workspace to . If that workspace is  on another G screen, the workspaces of the current screen and the other screen are  swapped. 9Find the tag of the workspace visible on Xinerama screen sc. % Nothing if screen is out of bounds. The 3 function takes a default value, a function, and a , StackSet. If the current stack is Nothing,  returns the A default value. Otherwise, it applies the function to the stack, " returning the result. It is like  for the focused workspace. PApply a function, and a default value for Nothing, to modify the current stack. 6Apply a function to modify the current stack if it isn't empty, and we don't  want to empty it. O(1)4. Extract the focused element of the current stack. : Return Just that element, or Nothing for an empty stack. O(n). Flatten a Stack into a list. O(n)- Flatten a possibly empty stack into a list. !O(n)<. Turn a list into a possibly empty stack (i.e., a zipper): D the first element of the list is current, and the rest of the list  is down. "O(n). ' filter p s' returns the elements of s such that p evaluates to = True. Order is preserved, and focus moves as described for 4. #O(s)9. Extract the stack on the current workspace, as a list. I The order of the stack is determined by the master window -- it will be B the head of the list. The implementation is given by the natural 8 integration of a one-hole list cursor, back to a list. %O(1), O(w) on the wrapping case. @focusUp, focusDown. Move the window focus up or down the stack, ; wrapping if we reach the end. The wrapping should model a    on the current stack. The master window, and window order, & are unaffected by movement of focus. EswapUp, swapDown, swap the neighbour in the stack ordering, wrapping 6 if we reach the end. Again the wrapping model should   on  the current stack. 6reverse a stack: up becomes down and down becomes up. ('O(1) on current window, O(n) in general. Focus the window w, # and set its workspace as current. )+Get a list of all screens in the StackSet. *.Get a list of all workspaces in the StackSet. +AGet a list of all windows in the StackSet in no particular order ,*Is the given tag present in the StackSet? -/Rename a given tag if present in the StackSet. .AEnsure that a given set of workspace tags is present by renaming  existing workspaces and/%or creating new hidden workspaces as  necessary. /6Map a function on all the workspaces in the StackSet. 03Map a function on all the layouts in the StackSet. 1O(n). Is a window in the StackSet? 2'O(1) on current window, O(n) in general. ? Return Just the workspace tag of the given window, or Nothing ' if the window is not in the StackSet. 3O(n)<. (Complexity due to duplicate check). Insert a new element > into the stack, above the currently focused element. The new A element is given focus; the previously focused element is moved  down. DIf the element is already in the stackset, the original stackset is  returned unmodified. Semantics in Huet's paper is that insert doesn't move the cursor. 9 However, we choose to insert above, and move the focus. 4'O(1) on current window, O(n) in general. Delete window w if it exists.  There are 4 cases to consider: 2 delete on an Nothing workspace leaves it Nothing . * otherwise, try to move focus to the down , * otherwise, try to move focus to the up  * otherwise, you'+ve got an empty workspace, becomes Nothing &Behaviour with respect to the master: B deleting the master window resets it to the newly focused window  * otherwise, delete doesn't affect the master. 5ROnly temporarily remove the window from the stack, thereby not destroying special # information saved in the Stackset 6@Given a window, and its preferred rectangle, set it as floating > A floating window should already be managed by the StackSet. 7&Clear the floating status of a window 8O(s)/. Set the master window to the focused window. O The old master window is swapped in the tiling order with the focused window. " Focus stays with the item moved. 9O(s)". Set focus to the master window. :O(w)@. shift. Move the focused element of the current stack to stack  n?, leaving it as the focused element on that stack. The item is A inserted above the currently focused element on that workspace. # The actual focused workspace doesn't change. If there is no B element on the current stack, the original stackSet is returned. ;O(n).. shiftWin. Searches for the specified window w on all workspaces ' of the stackSet and moves it to stack n, leaving it as the focused A element on that stack. The item is inserted above the currently $ focused element on that workspace. # The actual focused workspace doesn't change. If the window is not ; found in the stackSet, the original stackSet is returned.  TODO how does this duplicate : s behaviour? <  !"#$%&'()*+,-./0123456789:;< )*+# !$%9(,-.12/0345"&'867:;<     !"#$%&'()*+,-./0123456789:;+not portable, uses cunning newtype derivingunstablesjanssen@cse.unl.eduB<<9 are core messages that all layouts (especially stateful $ layouts) should consider handling. =*sent when xmonad is exiting or restarting >'sent when a layout becomes non-visible ?$A wrapped value of some type in the A class. ABased on ideas in /-An Extensible Dynamically-Typed Hierarchy of  Exceptions/5, Simon Marlow, 2006. Use extensible messages to the  G handler. 9User-extensible messages must be a member of this class. B$Every layout must be an instance of B, which defines E the basic layout operations along with a sensible default for each. Minimal complete definition:  C || ((D || E) && F), and  G || H /You should also strongly consider implementing I,  although it is not required. Note that any code which uses B methods should only  ever call C, G, and I! In  other words, the only calls to D, H , and other < such methods should be from the default implementations of  C, G$, and so on. This ensures that the C proper methods will be used, regardless of the particular methods  that any B instance chooses to define. C By default, C calls D if there are any  windows to be laid out, and F otherwise. Most  instances of B# probably do not need to implement  C3; it is only useful for layouts which wish to make  use of more of the  information (for example,  XMonad.Layout.PerWorkspace). DGiven a  & in which to place the windows, and a  > of windows, return a list of windows and their corresponding 8 Rectangles. If an element is not given a Rectangle by  D0, then it is not shown on screen. The order of < windows in this list should be the desired stacking order. 5Also possibly return a modified layout (by returning Just  newLayout3), if this layout needs to be modified (e.g. if it - keeps track of some sort of state). Return Nothing if the & layout does not need to be modified. (Layouts which do not need access to the O monad (  , window A manager state, or configuration) and do not keep track of their  own state should implement E instead of D. EThis is a pure version of D, for cases where we  don't need access to the O# monad to determine how to lay out  the windows, and we don'$t need to modify the layout itself. FF& is called when there are no windows. GG performs message handling. If  G returns Nothing, then the layout did not 9 respond to the message and the screen is not refreshed.  Otherwise, G# returns an updated layout and the  screen is refreshed. (Layouts which do not need access to the O monad to decide how % to handle messages should implement H instead of  G. (this restricts the risk of error, and makes  testing much easier). H<Respond to a message by (possibly) changing our layout, but A taking no other action. If the layout changes, the screen will  be refreshed. I9This should be a human-readable string that is used when ; selecting layouts by name. The default implementation is   ), which is in some cases a poor default. J8An existential type that can hold any object that is in   and B. O5The X monad, ReaderT and StateT transformers over IO ; encapsulating the window manager configuration and state,  respectively. )Dynamic components may be retrieved with , static components  with 8. With newtype deriving we get readers and state monads 1 instantiated on XConf and XState automatically. PThe  - with screen dimensions and the list of gaps S,gaps on the sides of the screen that shouldn'$t be tiled, usually for status bars TPhysical screen indices VVirtual workspace indices [+Non focused windows border color. Default: "#dddddd" \'Focused windows border color. Default: "#ff0000" ]-The preferred terminal application. Default: "xterm" ^The available layouts _.The action to run when a new window is opened `The list of workspaces' names aThe list of gaps, per screen bThe numlock modifier cthe mod modifier d4The key binding: a map from key presses and actions eThe mouse bindings fThe border width g6The action to perform when the windows set is changed h!The action to perform on startup i-Whether window entry events can change focus j5XConf, the (read-only) window manager configuration. lthe X11 display minitial user configuration nthe root window o"border color of unfocused windows p#border color of the focused window q$a mapping of key presses to actions r'a mapping of button presses to actions s,XState, the (mutable) window manager state. uworkspace list vthe Set of mapped windows w#the number of expected UnmapEvents zERun the X monad, given a chunk of X monad code, and an initial state $ Return the result, and final state {FRun in the X monad, and in case of exception, and catch it and log it $ to stderr, and run the error case. |HExecute the argument, catching all exceptions. Either this function or A catchX should be used at all callsites of user customized code. }5Run a monad action with the current display settings ~0Run a monadic action with the current stack set ,True if the given window is the root window /Wrapper for the common case of atom internment Common non-predefined atoms  Using the KJ3 as a witness, parse existentially wrapped windows  from a . !And now, unwrap a given, unknown A type, performing a (dynamic)  type check on the result. General utilities #Lift an IO action into the X monad DLift an IO action into the X monad. If the action results in an IO G exception, log the exception to stderr and continue normal execution. &spawn. Launch an external application HDouble fork and execute an IO action (usually one of the exec family of  functions) GThis is basically a map function, running a function in the X monad on O each workspace with the output of that function being the modified workspace. Return the path to ~/.xmonad. 'recompile force' , recompile ~/.xmonad/ xmonad.hs when any of the  following apply:  * force is True - * the xmonad executable does not exist 6 * the xmonad executable is older than xmonad.hs JThe -i flag is used to restrict recompilation to the xmonad.hs file only. +Compilation errors (if any) are logged to ~/.xmonad/xmonad.errors. If I GHC indicates failure with a non-zero exit code, an xmessage displaying  that file is spawned. 3False is returned if there are compilation errors. %Conditionally run an action, using a Maybe a to decide. 7Conditionally run an action, using a X event to decide A : for the X monad. Logs a string to stderr. The result may ( be found in your .xsession-errors file U<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~TOXWVTUPQRSstuvwxjklmnopqrYZ[\]^_`abcdefghiBCDEFGHIJKA?@<>=z{|}~NLMyT<>==>?@@ABCDEFGHICDEFGHIJKKLMMNOPQRSQRSTUUVWXYZ[\]^_`abcdefghiZ[\]^_`abcdefghijklmnopqrklmnopqrstuvwxtuvwxyz{|}~+not portable, Typeable deriving, mtl, posixunstablesjanssen@cse.unl.edu EA layout that allows users to switch between various layout options. 'Messages to change the current layout. 5Mirror a layout, compute its 90 degree rotated form. 5Mirror a layout, compute its 90 degree rotated form. 7The builtin tiling mode of xmonad, and its operations. <Simple fullscreen mode, just render all windows fullscreen. ?You can also increase the number of clients in the master pane !Builtin basic layout algorithms:   fullscreen mode  tall mode 8The latter algorithms support the following operations:  Shrink  Expand Ttile. Compute the positions for windows using the default 2 pane tiling algorithm. BThe screen is divided (currently) into two panes. all clients are 7 then partioned between these two panes. one pane, the master, by C convention has the least number of windows in it (by default, 1).  the variable nmaster/ controls how many windows are rendered in the  master pane. delta1 specifies the ratio of the screen to resize by. frac: specifies what proportion of the screen to devote to the  master area. Mirror a rectangle The layout choice combinator +not portable, Typeable deriving, mtl, posixunstabledons@cse.unsw.edu.au,Support for window size hints Window manager operations B manage. Add a new window to be managed in the current workspace.  Bring it into focus. EWhether the window is already managed, or not, it is mapped, has its % border set, and its event mask set. ?unmanage. A window no longer exists, remove it from the window $ list, on whatever workspace it is. CModify the size of the status gap at the top of the current screen D Taking a function giving the current screen, and current geometry. 7Kill the currently focused client. If we do kill it, we' ll get a  delete notify back from X. EThere are two ways to delete a window. Either just kill it, or if it B supports the delete protocol, send a delete event (e.g. firefox) Jwindows. Modify the current window list with a pure function, and refresh 'setWMState. set the WM_STATE property <hide. Hide a window by unmapping it, and setting Iconified. 7reveal. Show a window by mapping it and setting Normal 4 this is harmless if the window was already visible /The client events that xmonad is interested in ?Set some properties when we initially gain control of a window Crefresh. Render the currently visible workspaces, as determined by 6 the StackSet. Also, set focus to the focused window.  This is our view5 operation (MVC), in that it pretty prints our model  with X calls. FclearEvents. Remove all events of a given type from the event queue. CtileWindow. Moves and resizes w such that it fits inside the given " rectangle, including its border. GReturns True if the first rectangle is contained within, but not equal  to the second. HGiven a list of screens, remove all duplicated screens and screens that ( are entirely contained within another. ACleans the list of screens according to the rules documented for  nubScreens. =rescreen. The screen configuration may have changed (due to F xrandr), update the state and refresh the screen, and reset the gap. IsetButtonGrab. Tell whether or not to intercept clicks on a given window 9Set the focus to the window on top of the stack, or root 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). *Call X to set the keyboard focus details. EThrow a message to the current LayoutClass possibly modifying how we # layout the windows, then refresh. 3Send a message to all layouts, without refreshing. 0Send a message to a layout, without refreshing. 'Update the layout field of a workspace 1Set the layout of the currently viewed workspace #Return workspace visible on screen sc, or Nothing. GApply an X operation to the currently focused window, if there is one. )True if window is under management by us 9Combinations of extra modifier masks we need to grab keys/ buttons for.  (numlock and capslock)  Strip numlock/capslock from a mask &Get the Pixel value for a named color restart name resume5. Attempt to restart xmonad by executing the program  name. If resume is ), restart with the current window state. ( When executing another window manager, resume should be . Floating layer support >Given a window, find the screen it is located on, and compute / the geometry of that window wrt. that screen. <Make a tiled window floating, using its suggested rectangle Accumulate mouse motion events XXX comment me XXX comment me BReduce the dimensions if needed to comply to the given SizeHints. XXX comment me WReduce the dimensions so their aspect ratio falls between the two given aspect ratios. EReduce the dimensions so they are a multiple of the size increments. CReduce the dimensions if they exceed the given maximum dimensions. ,,,+not portable, uses cunning newtype derivingunstablesjanssen@cse.unl.edu 8The identity hook that returns the WindowSet unchanged.  Compose two Ns Compose the list of Ns 'p --> x'. If p returns , execute the N. 'q =? x'. if the result of q equals x , return . 'p  && q'.  lifted to a Monad. 'p  || q'.  lifted to a Monad. :Queries that return the window title, resource, or class. @A query that can return an arbitrary X property of type String,  identified by name.  Modify the X with a pure function. 'Move the window to the floating layer. &Map the window and remove it from the X. portablestabledons@galois.com DThe default number of workspaces (virtual screens) and their names. D By default we use numeric strings, but any string may be used as a F workspace name. The number of workspaces is determined by the length  of this list. A tagging example: 9 workspaces = ["web", "irc", "code" ] ++ map show [4..9] CmodMask lets you specify which modkey you want to use. The default  is mod1Mask (left alt)). You may also consider using mod3Mask  ( right alt7), which does not conflict with emacs keybindings. The   windows key is usually mod4Mask. 0The mask for the numlock key. Numlock status is masked from the J current modifier status, so the keybindings will work with numlock on or 3 off. You may need to change this on some systems. -You can find the numlock modifier by running xmodmap and looking for a % modifier with Num_Lock bound to it:   $ xmodmap | grep Num  mod2 Num_Lock (0x4d) Set numlockMask = 0 if you don''t have a numlock key, or want to treat  numlock status separately. &Width of the window border in pixels. ?Border colors for unfocused and focused windows, respectively. @Default offset of drawable screen boundaries from each physical E screen. Anything non-zero here will leave a gap of that many pixels F on the given edge, on the that screen. A useful gap at top of screen  for a menu bar (e.g. 15) FAn example, to set a top gap on monitor 1, and a gap on the bottom of  monitor 2, you'$d use a list of geometries like so:  ? defaultGaps = [(18,0,0,0),(0,18,0,0)] -- 2 gaps on 2 monitors &Fields are: top, bottom, left, right. DExecute arbitrary actions and WindowSet manipulations when managing @ a new window. You can use this to, for example, always float a D particular program, or have a client always appear on a particular  workspace. 9To find the property name associated with a program, use  xprop | grep WM_CLASS  and click on the client you're interested in. FPerform an arbitrary action on each internal state change or X event.  Examples include:  * do nothing  * log the state to stdout See the  DynamicLog extension for examples. /Perform an arbitrary action at xmonad startup. IThe available layouts. Note that each layout is separated by |||, which  denotes layout choice. HThe preferred terminal program, which is used in a binding below and by  certain contrib modules. )Whether focus follows the mouse pointer. BThe xmonad key bindings. Add, modify or remove key bindings here. G(The comment formatting character is used when generating the manpage) 6Mouse bindings: default actions bound to mouse events "not portable, uses mtl, X11, posixunstablesjanssen@cse.unl.eduThe main entry point AEvent handler. Map X events onto calls into Operations.hs, which 8 modify our internal model of the window manager state. Events dwm handles that we don't:  ButtonPress = buttonpress,  [Expose] = expose,  [PropertyNotify] = propertynotify, +scan for any new windows to manage. If they're already managed,  this should be idempotent. Grab the keys back XXX comment me  provisionalDon Stewart <dons@galois.com>      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@ !!"#$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]]^_`abcdefghiijklmn=opqrstuvwxxyz{|}~I  =ptkonuvlwrs                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                                           ! " # $ % & ' ( ) * + , - . / 0 1 2 34 35 36 37 38 39 3: 3; 3< 3= 3> 3? 3@ 3A 3B 3C 3D 3E 3F 3G 3H 3I 3J 3K 3L 3M 3N 3O 3P 3Q 3R 3S 3T 3U 3V 3W 3X 3Y 3Z 3[ 3\ 3] 3^ 3_ 3` 3a 3b 3c 3d 3e 3f 3g 3h 3i 3j 3k 3l 3m 3n 3o 3p 3q 3r 3s 3t 3u 3v 3w 3x 3y 3z 3{ 3| 3} 3~ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3                                                                                                                        ! " #$ #% #& #' #( #) #* #+ #, #- #. #/ #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #: #; #< #= #> #? #@ #A #B #C #D #E #F #G #H #I #J #K #L #M #N #O #P #Q #R #S #T #U #V #W #X #Y #Z #[ #\ #] #^ #_ #` #a #b #c #d #e #f #g #h #i jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz j{ j| j} j~ j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j! j" j# j$ j% j& j' j( j) j* j+ j, j- j. j/ j0 j1 j2 j3 j4 j5 j6 j7 j8 j9 j: j; j< j= j> j? j@ jA jB jC jD jE jF jG jH jI jJ jK jL jM jN jO jP jQ jR jS jT jU jV jW jX jY jZ j[ j\ j] j^ j_ j` ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz j{ j| j} j~ j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j! j" j# j$ j% j& j' j( j) j* j+ j, j- j. j/ j0 j1 j2 j3 j4 j5 j6 j7 j8 j9 j: j; j< j= j> j? j@ jA jB jC jD jE jF jG jH jI jJ jK jL jM jN jO jP jQ jR jS jT jU jV jW jX jY jZ j[ j\ j] j^ j_ j` ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz j{ j| j} j~ j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j  !                ! " # $ % & ' ( ) * * + , - . / / 0 1 2 3 4 5 56789:;/<=>?>@A xmonad-0.7XMonad.StackSet XMonad.Core XMonad.LayoutXMonad.OperationsXMonad.ManageHook XMonad.Mainbase Data.Maybe Data.List X11-1.4.5Graphics.X11.Xlib.Types System.IO Text.Show Text.Read mtl-1.1.0.2Control.Monad.State.ClassControl.Monad.Reader.Class Data.Charghc-primGHC.Bool Data.Bool XMonad.ConfigXMonadStackfocusupdown RationalRect WorkspacetaglayoutstackScreen workspacescreen screenDetailStackSetcurrentvisiblehiddenfloatingabortnewview greedyViewlookupWorkspacemodifymodify'peek integrate integrate' differentiatefilterindexfocusUp focusDownswapUpswapDown focusWindowscreens workspaces allWindows tagMember renameTag ensureTags mapWorkspace mapLayoutmemberfindTaginsertUpdeletedelete'floatsink swapMaster focusMastershiftshiftWinLayoutMessagesReleaseResourcesHide SomeMessageMessage LayoutClass runLayoutdoLayout pureLayout emptyLayout handleMessage pureMessage descriptionLayoutQuery ManageHookX ScreenDetailSD screenRect statusGapScreenIdS WorkspaceId WindowSpace WindowSetXConfignormalBorderColorfocusedBorderColorterminal layoutHook manageHook defaultGaps numlockMaskmodMaskkeys mouseBindings borderWidthlogHook startupHookfocusFollowsMouseXConfdisplayconfigtheRoot normalBorder focusedBorder keyActions buttonActionsXState windowsetmapped waitingUnmapdraggingrunQueryrunXcatchXuserCode withDisplay withWindowSetisRootgetAtomatom_WM_PROTOCOLSatom_WM_DELETE_WINDOW atom_WM_STATE readsLayout fromMessageiocatchIOspawn doubleForkrunOnWorkspaces getXMonadDir recompilewhenJustwhenXtraceChoose ChangeLayout NextLayout FirstLayoutMirrorTallFull IncMasterNResizeExpandShrinktilesplitVerticallysplitHorizontallysplitHorizontallyBysplitVerticallyBy mirrorRect|||Dmanageunmanage modifyGapkillwindows setWMStatehidereveal clientMasksetInitialPropertiesrefresh clearEvents tileWindow containedIn nubScreensgetCleanedScreenInforescreen setButtonGrab setTopFocus setFocusX sendMessagebroadcastMessagesendMessageWithNoRefresh updateLayout setLayoutscreenWorkspace withFocusedisClientextraModifiers cleanMask initColorrestart floatLocation mouseDragmouseMoveWindowmouseResizeWindowapplySizeHintsapplySizeHints'applyAspectHintapplyResizeIncHintapplyMaxSizeHintliftXidHook<+> composeAll-->=?<&&><||>titleresource classNamestringPropertygetStringPropertydoFdoFloatdoIgnorexmonadwithmaybeGHC.Listcycle reverseStack Rectangle GHC.IOBaseIOGHC.ShowshowGHC.ReadReadgetaskGHC.BaseString Data.TypeableTypeableTrueFalse GHC.Classes&&||defaultModMask defaultConfighandlescangrabKeys grabButtonsGraphics.X11.Xlib.Extras getCommand getErrorEventsetErrorHandler setWMHints getWMHintsallHintsBitmaskurgencyHintBitwindowGroupHintBiticonMaskHintBiticonPositionHintBiticonWindowHintBiticonPixmapHintBit stateHintBit inputHintBit iconicState normalStatewithdrawnState getClassHintgetWMNormalHintspWinGravityBit pBaseSizeBit pAspectBit pResizeIncBit pMaxSizeBit pMinSizeBit unmapWindowpropModeAppendpropModePrependpropModeReplacechangeProperty32changeProperty16changeProperty8getWindowProperty32getWindowProperty16getWindowProperty8rawGetWindowPropertyanyPropertyTyperefreshKeyboardMapping setKeyEventsetConfigureEventsetClientMessageEventsetSelectionNotify setEventTypegetWMProtocolsgetTransientForHint fetchNamewcTextEscapementwcDrawImageString wcDrawString wcTextExtents createFontSetwcTextPropertyToTextListgetTextProperty withServergetWindowAttributes waIsViewablewaIsUnviewable waIsUnmapped queryTreeconfigureWindow currentTimeanyKey anyButtonnonegetEvent eventName eventTable ev_windowev_event_display ev_send_event ev_serial ev_event_typeAnyEvent ev_value_mask ev_detailev_aboveev_border_width ev_heightev_widthev_yev_x ev_parentConfigureRequestEventev_override_redirectev_eventConfigureEventMapRequestEventev_same_screen ev_keycodeev_state ev_y_root ev_x_rootev_time ev_subwindowev_rootKeyEvent ev_button ButtonEvent MotionEventDestroyWindowEventev_from_configure UnmapEventMapNotifyEventev_countev_first_keycode ev_requestMappingNotifyEventev_focusev_mode CrossingEvent ev_property ev_target ev_selection ev_requestorev_ownerSelectionRequest ev_propstateev_atom PropertyEvent ExposeEventev_dataev_message_typeClientMessageEventEvent wc_stack_mode wc_siblingwc_border_width wc_heightwc_widthwc_ywc_x WindowChangeswa_override_redirect wa_map_statewa_border_width wa_heightwa_widthwa_ywa_xWindowAttributes tp_nitems tp_format tp_encodingtp_value TextPropertyFontSetsh_win_gravity sh_base_size sh_aspect sh_resize_inc sh_max_size sh_min_size SizeHintsresClassresName ClassHintwmh_window_group wmh_icon_mask wmh_icon_y wmh_icon_xwmh_icon_windowwmh_icon_pixmapwmh_initial_state wmh_input wmh_flagsWMHintsXErrorEventPtrCXErrorHandler XErrorHandler ev_resourceid ev_minor_codeev_request_code ev_error_code ev_serialnum ev_displayev_type ErrorEventxConfigureWindow killClientxFree xQueryTreexGetWindowAttributeschangeWindowAttributesxGetTextPropertyxwcTextPropertyToTextListwcFreeStringListxCreateFontSetfreeStringList freeFontSetxwcTextExtents xwcDrawStringxwcDrawImageStringxwcTextEscapement xFetchNamexGetTransientForHintxGetWMProtocolsxSetErrorHandlerxRefreshKeyboardMappingxChangePropertyxGetWindowProperty xUnmapWindowxGetWMNormalHints xGetClassHint xGetWMHints xAllocWMHints xSetWMHints isCursorKey isFunctionKey isKeypadKeyisMiscFunctionKey isModifierKeyisPFKeyisPrivateKeypadKeyxSetSelectionOwnerxGetSelectionOwnerxConvertSelectionmkXErrorHandlergetXErrorHandler_xSetErrorHandler mapRaised xGetCommandGraphics.X11.Xlib.Image createImageputImage destroyImageGraphics.X11.Xlib.WindowrestackWindowswithdrawWindow iconifyWindowtranslateCoordinates storeNamecreateSimpleWindow createWindowmoveResizeWindow resizeWindow moveWindowreparentWindow mapSubwindowsunmapSubwindows mapWindow lowerWindow raiseWindowcirculateSubwindowsDowncirculateSubwindowsUpcirculateSubwindows destroyWindowdestroySubwindowssetWindowBordersetWindowBorderPixmapsetWindowBorderWidthsetWindowBackgroundsetWindowBackgroundPixmapsetWindowColormap addToSaveSetremoveFromSaveSet changeSaveSet clearWindow clearAreaGraphics.X11.Xlib.ScreenblackPixelOfScreenwhitePixelOfScreen cellsOfScreendefaultColormapOfScreendefaultDepthOfScreendefaultGCOfScreendefaultVisualOfScreendoesBackingStoredoesSaveUndersdisplayOfScreeneventMaskOfScreenminCmapsOfScreenmaxCmapsOfScreenrootWindowOfScreen widthOfScreenwidthMMOfScreenheightOfScreenheightMMOfScreenplanesOfScreenscreenNumberOfScreenGraphics.X11.Xlib.Region setRegion shrinkRegion offsetRegionclipBox rectInRegion pointInRegion equalRegion emptyRegion xorRegion unionRegionunionRectWithRegionsubtractRegionintersectRegion polygonRegion createRegion rectanglePart rectangleIn rectangleOutRegionRectInRegionResultGraphics.X11.Xlib.MiscsetTextProperty rotateBuffers fetchBytes fetchBuffer storeBytes storeBufferdrawImageString drawStringfillArcs fillPolygonfillRectanglesdrawArcsdrawRectangles drawSegments drawLines drawPoints set_cursor set_colormapset_override_redirectset_do_not_propagate_maskset_event_maskset_save_underset_backing_pixelset_backing_planesset_backing_storeset_win_gravityset_bit_gravityset_border_pixelset_border_pixmapset_background_pixelset_background_pixmapallocaSetWindowAttributessetWMProtocols recolorCursorcreateGlyphCursorcreatePixmapCursor setIconName getIconName lookupStringnoSymbolstringToKeysymkeysymToStringdisplayKeycodesgetPointerControlgetScreenSaverscreenSaverResetscreenSaverActivedefaultBlankingpreferBlankingdontPreferBlankingdefaultExposuresallowExposuresdontAllowExposuressetLocaleModifiers getGeometrygeometrysetDefaultErrorHandler displayName queryPointer queryBestSizequeryBestCursorqueryBestStipple queryBestTile getInputFocusAllowExposuresModePreferBlankingModeScreenSaverMode rmInitialize autoRepeatOff autoRepeatOnbellsetCloseDownModelastKnownRequestProcessed setInputFocus grabButton ungrabButton grabPointer ungrabPointergrabKey ungrabKey grabKeyboardungrabKeyboard grabServer ungrabServersupportsLocalesetScreenSaveractivateScreenSaverresetScreenSaverforceScreenSaver warpPointer initThreads lockDisplay unlockDisplay createPixmap freePixmapbitmapBitOrder bitmapUnit bitmapPad lookupKeysymkeycodeToKeysymkeysymToKeycode defineCursorundefineCursorcreateFontCursor freeCursor drawPointdrawLine drawRectangledrawArc fillRectanglefillArccopyArea copyPlaneGraphics.X11.Xlib.Font textWidth textExtentsdescentFromFontStructascentFromFontStructfontFromFontStruct loadQueryFont fontFromGCGlyph FontStruct CharStruct queryFontfreeFontGraphics.X11.Xlib.Event sendEventgettimeofday_in_milliseconds waitForEventget_ConfigureEventget_ExposeEventget_MotionEventget_ButtonEvent asKeyEvent get_KeyEvent get_Window get_EventType allocaXEventqueuedAfterReadingqueuedAfterFlush queuedAlready QueuedModeXEvent XEventPtr XKeyEvent XKeyEventPtr XButtonEvent XMotionEvent XExposeEvent XMappingEventXConfigureEventflushsyncpending eventsQueued nextEvent allowEvents selectInput windowEventcheckWindowEvent maskEventcheckMaskEventcheckTypedEventcheckTypedWindowEvent putBackEvent peekEventGraphics.X11.Xlib.Display openDisplay serverVendor displayStringscreenResourceStringresourceManagerString allPlanes_aux blackPixel whitePixelconnectionNumberdefaultColormap defaultGC defaultDepth defaultScreendefaultScreenOfDisplay displayHeightdisplayHeightMM displayWidthdisplayWidthMMmaxRequestSizedisplayMotionBufferSizeimageByteOrderprotocolRevisionprotocolVersion screenCount defaultVisual displayCells displayPlanesscreenOfDisplaydefaultRootWindow rootWindowqLengthnoOp closeDisplayGraphics.X11.Xlib.ContextcreateGC setDashes setArcMode setBackground setForeground setFunctionsetGraphicsExposures setClipMask setClipOrigin setFillRule setFillStylesetFontsetLineAttributes setPlaneMasksetState setStipplesetSubwindowMode setTSOriginsetTilegContextFromGCfreeGCflushGCcopyGCGraphics.X11.Xlib.Color queryColors queryColor storeColor freeColors parseColor allocColorallocNamedColor lookupColorinstallColormapuninstallColormapcopyColormapAndFreecreateColormap freeColormapGraphics.X11.Xlib.AtomlAST_PREDEFINEDwM_TRANSIENT_FORwM_CLASS cAP_HEIGHT fULL_NAME fAMILY_NAME fONT_NAMEnOTICE cOPYRIGHT rESOLUTION pOINT_SIZEwEIGHT qUAD_WIDTHx_HEIGHT iTALIC_ANGLEsTRIKEOUT_DESCENTsTRIKEOUT_ASCENTuNDERLINE_THICKNESSuNDERLINE_POSITION sUBSCRIPT_Y sUBSCRIPT_X sUPERSCRIPT_Y sUPERSCRIPT_X eND_SPACE mAX_SPACE nORM_SPACE mIN_SPACE wM_ZOOM_HINTS wM_SIZE_HINTSwM_NORMAL_HINTSwM_NAME wM_ICON_SIZE wM_ICON_NAMEwM_CLIENT_MACHINEwM_HINTS wM_COMMANDwINDOWvISUALIDsTRING rGB_RED_MAP rGB_GREEN_MAP rGB_GRAY_MAPrGB_DEFAULT_MAP rGB_BLUE_MAP rGB_BEST_MAP rGB_COLOR_MAPrESOURCE_MANAGER rECTANGLEpOINTpIXMAPiNTEGERfONTdRAWABLE cUT_BUFFER7 cUT_BUFFER6 cUT_BUFFER5 cUT_BUFFER4 cUT_BUFFER3 cUT_BUFFER2 cUT_BUFFER1 cUT_BUFFER0cURSORcOLORMAPcARDINALbITMAPaTOMaRC sECONDARYpRIMARY internAtomGraphics.X11.TypeszPixmapxyPixmapxyBitmapfontRightToLeftfontLeftToRightdoBluedoGreendoRedalways whenMapped notUseful unmapGravity staticGravitysouthEastGravity southGravitysouthWestGravity eastGravity centerGravity westGravitynorthEastGravity northGravitynorthWestGravity forgetGravity setModeDelete setModeInsertmappingPointermappingKeyboardmappingModifierallocAll allocNonemSBFirstlSBFirst lowerHighest raiseLowest gCLastBit gCArcMode gCDashList gCDashOffset gCClipMask gCClipYOrigin gCClipXOrigingCGraphicsExposuresgCSubwindowModegCFontgCTileStipYOrigingCTileStipXOrigin gCStipplegCTile gCFillRule gCFillStyle gCJoinStyle gCCapStyle gCLineStyle gCLineWidth gCBackground gCForeground gCPlaneMask gCFunction arcPieSlicearcChordconvex nonconvexcomplexcoordModePreviouscoordModeOriginincludeInferiorsclipByChildren windingRule evenOddRulefillOpaqueStippled fillStippled fillTiled fillSolid joinBevel joinRound joinMiter capProjectingcapRoundcapButt capNotLastlineDoubleDash lineOnOffDash lineSolidgXsetgXnand gXorInvertedgXcopyInverted gXorReversegXinvertgXequivgXnorgXorgXxorgXnoop gXandInvertedgXcopy gXandReversegXandgXclear stippleShape tileShape cursorShaperetainTemporaryretainPermanent destroyAllcWCursor cWColormapcWDontPropagate cWEventMask cWSaveUndercWOverrideRedirectcWBackingPixelcWBackingPlanescWBackingStore cWWinGravity cWBitGravity cWBorderPixelcWBorderPixmap cWBackPixel cWBackPixmap inputOnly inputOutputcopyFromParent throwIfZerolastExtensionErrorfirstExtensionErrorbadImplementation badLengthbadName badIDChoicebadGCbadColorbadAlloc badAccess badDrawablebadMatchbadFont badCursorbadAtom badPixmap badWindowbadValue badRequestsuccessrevertToParentrevertToPointerRoot revertToNonesyncBoth asyncBothreplayKeyboard syncKeyboard asyncKeyboard replayPointer syncPointer asyncPointer grabFrozengrabNotViewablegrabInvalidTimealreadyGrabbed grabSuccess grabModeAsync grabModeSynccolormapInstalledcolormapUninstalledpropertyDeletepropertyNewValue familyChaos familyDECnetfamilyInternet placeOnBottom placeOnTopvisibilityFullyObscuredvisibilityPartiallyObscuredvisibilityUnobscurednotifyDetailNonenotifyPointerRoot notifyPointernotifyNonlinearVirtualnotifyNonlinearnotifyInferior notifyVirtualnotifyAncestor notifyHintnotifyWhileGrabbed notifyUngrab notifyGrab notifyNormalbutton5button4button3button2button1 button5Mask button4Mask button3Mask button2Mask button1Maskmod5Maskmod4Maskmod3Maskmod2Maskmod1Mask controlMasklockMask shiftMask anyModifier mod5MapIndex mod4MapIndex mod3MapIndex mod2MapIndex mod1MapIndexcontrolMapIndex lockMapIndex shiftMapIndex lASTEvent mappingNotify clientMessagecolormapNotifyselectionNotifyselectionRequestselectionClearpropertyNotifycirculateRequestcirculateNotify resizeRequest gravityNotifyconfigureRequestconfigureNotifyreparentNotify mapRequest mapNotify unmapNotify destroyNotify createNotifyvisibilityNotifynoExposegraphicsExposeexpose keymapNotifyfocusOutfocusIn leaveNotify enterNotify motionNotify buttonRelease buttonPress keyReleasekeyPressownerGrabButtonMaskcolormapChangeMaskpropertyChangeMaskfocusChangeMasksubstructureRedirectMasksubstructureNotifyMaskresizeRedirectMaskstructureNotifyMaskvisibilityChangeMask exposureMaskkeymapStateMaskbuttonMotionMaskbutton5MotionMaskbutton4MotionMaskbutton3MotionMaskbutton2MotionMaskbutton1MotionMaskpointerMotionHintMaskpointerMotionMaskleaveWindowMaskenterWindowMaskbuttonReleaseMaskbuttonPressMaskkeyReleaseMask keyPressMask noEventMask xK_ydiaeresisxK_thorn xK_yacute xK_udiaeresisxK_ucircumflex xK_uacute xK_ugrave xK_oslash xK_division xK_odiaeresis xK_otildexK_ocircumflex xK_oacute xK_ograve xK_ntildexK_eth xK_idiaeresisxK_icircumflex xK_iacute xK_igrave xK_ediaeresisxK_ecircumflex xK_eacute xK_egrave xK_ccedillaxK_aexK_aring xK_adiaeresis xK_atildexK_acircumflex xK_aacute xK_agrave xK_ssharpxK_ThornxK_THORN xK_Yacute xK_UdiaeresisxK_Ucircumflex xK_Uacute xK_Ugrave xK_Ooblique xK_multiply xK_Odiaeresis xK_OtildexK_Ocircumflex xK_Oacute xK_Ograve xK_NtildexK_EthxK_ETH xK_IdiaeresisxK_Icircumflex xK_Iacute xK_Igrave xK_EdiaeresisxK_Ecircumflex xK_Eacute xK_Egrave xK_CcedillaxK_AExK_Aring xK_Adiaeresis xK_AtildexK_Acircumflex xK_Aacute xK_AgravexK_questiondownxK_threequarters xK_onehalf xK_onequarterxK_guillemotright xK_masculinexK_onesuperior xK_cedillaxK_periodcentered xK_paragraphxK_muxK_acutexK_threesuperiorxK_twosuperior xK_plusminus xK_degree xK_macron xK_registered xK_hyphen xK_notsignxK_guillemotleftxK_ordfeminine xK_copyright xK_diaeresis xK_section xK_brokenbarxK_yen xK_currency xK_sterlingxK_cent xK_exclamdownxK_nobreakspace xK_asciitilde xK_bracerightxK_bar xK_braceleftxK_zxK_yxK_xxK_wxK_vxK_uxK_txK_sxK_rxK_qxK_pxK_oxK_nxK_mxK_lxK_kxK_jxK_ixK_hxK_gxK_fxK_exK_dxK_cxK_bxK_a xK_quoteleftxK_grave xK_underscorexK_asciicircumxK_bracketright xK_backslashxK_bracketleftxK_ZxK_YxK_XxK_WxK_VxK_UxK_TxK_SxK_RxK_QxK_PxK_OxK_NxK_MxK_LxK_KxK_JxK_IxK_HxK_GxK_FxK_ExK_DxK_CxK_BxK_AxK_at xK_question xK_greaterxK_equalxK_less xK_semicolonxK_colonxK_9xK_8xK_7xK_6xK_5xK_4xK_3xK_2xK_1xK_0xK_slash xK_periodxK_minusxK_commaxK_plus xK_asterisk xK_parenright xK_parenleft xK_quoteright xK_apostrophe xK_ampersand xK_percent xK_dollar xK_numbersign xK_quotedbl xK_exclamxK_space xK_Hyper_R xK_Hyper_L xK_Super_R xK_Super_LxK_Alt_RxK_Alt_L xK_Meta_R xK_Meta_L xK_Shift_Lock xK_Caps_Lock xK_Control_R xK_Control_L xK_Shift_R xK_Shift_LxK_R15xK_F35xK_R14xK_F34xK_R13xK_F33xK_R12xK_F32xK_R11xK_F31xK_R10xK_F30xK_R9xK_F29xK_R8xK_F28xK_R7xK_F27xK_R6xK_F26xK_R5xK_F25xK_R4xK_F24xK_R3xK_F23xK_R2xK_F22xK_R1xK_F21xK_L10xK_F20xK_L9xK_F19xK_L8xK_F18xK_L7xK_F17xK_L6xK_F16xK_L5xK_F15xK_L4xK_F14xK_L3xK_F13xK_L2xK_F12xK_L1xK_F11xK_F10xK_F9xK_F8xK_F7xK_F6xK_F5xK_F4xK_F3xK_F2xK_F1xK_KP_9xK_KP_8xK_KP_7xK_KP_6xK_KP_5xK_KP_4xK_KP_3xK_KP_2xK_KP_1xK_KP_0 xK_KP_Divide xK_KP_DecimalxK_KP_SubtractxK_KP_Separator xK_KP_AddxK_KP_Multiply xK_KP_Equal xK_KP_Delete xK_KP_Insert xK_KP_Begin xK_KP_EndxK_KP_Page_Down xK_KP_Next xK_KP_Page_Up xK_KP_Prior xK_KP_Down xK_KP_RightxK_KP_Up xK_KP_Left xK_KP_HomexK_KP_F4xK_KP_F3xK_KP_F2xK_KP_F1 xK_KP_Enter xK_KP_Tab xK_KP_Space xK_Num_LockxK_script_switchxK_Mode_switchxK_BreakxK_Help xK_CancelxK_FindxK_MenuxK_RedoxK_Undo xK_Insert xK_ExecutexK_Print xK_SelectxK_BeginxK_End xK_Page_DownxK_Next xK_Page_UpxK_PriorxK_DownxK_RightxK_UpxK_LeftxK_HomexK_PreviousCandidatexK_MultipleCandidatexK_SingleCandidate xK_Codeinput xK_Multi_key xK_Delete xK_Escape xK_Sys_ReqxK_Scroll_LockxK_Pause xK_ReturnxK_Clear xK_LinefeedxK_Tab xK_BackSpace xK_VoidSymbolXIDMaskAtomVisualIDTimeWindowDrawableFontPixmapCursorColormapGContextKeyCodeKeySym EventMask EventTypeModifierKeyMask ButtonMaskButton NotifyMode NotifyDetail VisibilityPlaceProtocolPropertyNotificationColormapNotificationGrabMode GrabStatus AllowEvents FocusMode ErrorCodeStatus WindowClass AttributeMask CloseDownModeQueryBestSizeClass GXFunction LineStyleCapStyle JoinStyle FillStyleFillRule SubWindowModeCoordinateMode PolygonShapeArcModeGCMaskCirculationDirection ByteOrder ColormapAllocMappingRequestChangeSaveSetMode BitGravity WindowGravity BackingStore FontDirection ImageFormatDisplayVisualGCSetWindowAttributesImagePixelPosition DimensionAngle ScreenNumberBufferpt_ypt_xPoint rect_height rect_widthrect_yrect_x arc_angle2 arc_angle1 arc_height arc_widtharc_yarc_xArcseg_y2seg_x2seg_y1seg_x1Segment color_flags color_blue color_green color_red color_pixelColor Data.Bits.|.askslocal MonadReadergetsput MonadStateControl.Monad.TransliftIOMonadIO