~i      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh (c) Don Stewart 2007BSD3-style (see LICENSE)dons@galois.com experimentalportable, Haskell 98SafeM4 A stack is a cursor onto a window list. The data structure tracks focus by construction, and 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: w +-- 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 4.!A structure for window geometries1A workspace is just a tag, a layout, and a stack./Visible workspaces, and their Xinerama screens."-A cursor into a non-empty list of workspaces.We puncture the workspace list, producing a hole in the structure used to track the currently focused workspace. The two other lists 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)r. Create a new stackset, of empty stacks, with given tags, with physical screens whose descriptions are given by m#. The number of physical screens (length ms) should be less than or equal to the number of workspace tags. The first workspace in the list will be current.MXinerama: 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 ".Xinerama: If the workspace is not visible on any Xinerama screen, it becomes the current screen. If it is in the visible list, it becomes current.+Set focus to the given workspace. If that workspace does not exist in the stackset, the original workspace is returned. If that workspace is &X, then display that workspace on the current screen, and move the current workspace to &. If that workspace is %\ on another screen, the workspaces of the current screen and the other screen are swapped.,9Find the tag of the workspace visible on Xinerama screen sc. i if screen is out of bounds.jThe j_ function takes a default value, a function, and a StackSet. If the current stack is Nothing, jp returns the default value. Otherwise, it applies the function to the stack, returning the result. It is like k for the focused workspace.-*Apply a function, and a default value for i, to modify the current stack..`Apply a function to modify the current stack if it isn't empty, and we don't want to empty it./O(1)<. Extract the focused element of the current stack. Return l that element, or i for an empty stack.0O(n) . Flatten a  into a list.1O(n), Flatten a possibly empty stack into a list.2O(n). Turn a list into a possibly empty stack (i.e., a zipper): the first element of the list is current, and the rest of the list is down.3O(n)'. 'filter p s' returns the elements of s such that p evaluates to m8. Order is preserved, and focus moves as described for H.4O(s). Extract the stack on the current workspace, as a list. The order of the stack is determined by the master window -- it will be the head of the list. The implementation is given by the natural integration of a one-hole list cursor, back to a list.5O(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 n on the current stack. The master@ window, and window order, are unaffected by movement of focus.{swapUp, swapDown, swap the neighbour in the stack ordering, wrapping if we reach the end. Again the wrapping model should n on the current stack.6O(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 n on the current stack. The master@ window, and window order, are unaffected by movement of focus.{swapUp, swapDown, swap the neighbour in the stack ordering, wrapping if we reach the end. Again the wrapping model should n on the current stack.7O(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 n on the current stack. The master@ window, and window order, are unaffected by movement of focus.{swapUp, swapDown, swap the neighbour in the stack ordering, wrapping if we reach the end. Again the wrapping model should n on the current stack.8O(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 n on the current stack. The master@ window, and window order, are unaffected by movement of focus.{swapUp, swapDown, swap the neighbour in the stack ordering, wrapping if we reach the end. Again the wrapping model should n on the current stack.9 Variants of 5 and 6 that work on a  rather than an entire ".: Variants of 5 and 6 that work on a  rather than an entire ".o5reverse 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 ".=$Get a list of all workspaces in the ".>!Get a list of all windows in the " in no particular order?/Get the tag of the currently focused workspace.@ Is the given tag present in the "?A%Rename a given tag if present in the ".BEnsure that a given set of workspace tags is present by renaming existing workspaces and/or creating new hidden workspaces as necessary.C,Map a function on all the workspaces in the ".D)Map a function on all the layouts in the ".EO(n). Is a window in the "?F'O(1) on current window, O(n) in general . Return l+ the workspace tag of the given window, or i if the window is not in the ".GO(n). (Complexity due to duplicate check). Insert a new element into the stack, above the currently focused element. The new element is given focus; the previously focused element is moved down.YIf the element is already in the stackset, the original stackset is returned unmodified.zSemantics in Huet's paper is that insert doesn't move the cursor. However, we choose to insert above, and move the focus.H'O(1) on current window, O(n) in general. Delete window w. if it exists. There are 4 cases to consider: delete on an i workspace leaves it Nothing(otherwise, try to move focus to the down&otherwise, try to move focus to the up2otherwise, you've got an empty workspace, becomes i%Behaviour with respect to the master:@deleting the master window resets it to the newly focused window,otherwise, delete doesn't affect the master.IlOnly temporarily remove the window from the stack, thereby not destroying special information saved in the StacksetJtGiven a window, and its preferred rectangle, set it as floating A floating window should already be managed by the ".K%Clear the floating status of a windowLO(s). Set the master window to the focused window. The old master window is swapped in the tiling order with the focused window. Focus stays with the item moved.MO(s). Set the master window to the focused window. The other windows are kept in order and shifted down on the stack, as if you just hit mod-shift-k a bunch of times. Focus stays with the item moved.NO(s)!. Set focus to the master window.OO(w)A. shift. Move the focused element of the current stack to stack n, leaving it as the focused element on that stack. The item is inserted above the currently focused element on that workspace. The actual focused workspace doesn't change. If there is no element on the current stack, the original stackSet is returned.PO(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 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.D !"#$%&'()*+,j-./0123456789:po;<=>?@ABCDEFGHIJKLMNOPq@ !"#'$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP@"#$%&' !)*+,<=>?/4012569:N;@ABEFCDGHI378LM-.JKOP(2 !"#$%&'()*+,j-./0123456789:po;<=>?@ABCDEFGHIJKLMNOPq(c) Spencer Janssen 2007BSD3-style (see LICENSE)spencerjanssen@gmail.comunstable+not portable, uses cunning newtype derivingNone 09;<=AIT[`,Existential type to store a state extension.aNon-persistent state extensionbPersistent extensioncMEvery module must make the data it wants to store an instance of this class.)Minimal complete definition: initialValued0Defines an initial value for the state extensioneTSpecifies whether the state extension should be persistent. Setting this method to ba will make the stored data survive restarts, but requires a to be an instance of Read and Show.It defaults to `, i.e. no persistence.ff\ are core messages that all layouts (especially stateful layouts) should consider handling.g&sent when a layout becomes non-visibleh)sent when xmonad is exiting or restartingi$A wrapped value of some type in the k class.kBased on ideas in /An Extensible Dynamically-Typed Hierarchy of Exceptions/, Simon Marlow, 2006. Use extensible messages to the q handler.8User-extensible messages must be a member of this class.l$Every layout must be an instance of lT, which defines the basic layout operations along with a sensible default for each.Minimal complete definition:m || ((n || o) && p), andq || r/You should also strongly consider implementing s, although it is not required.Note that any code which uses l methods should only ever call m, q, and s&! In other words, the only calls to n, rI, and other such methods should be from the default implementations of m, qq, and so on. This ensures that the proper methods will be used, regardless of the particular methods that any l instance chooses to define.m By default, m calls n1 if there are any windows to be laid out, and p" otherwise. Most instances of l& probably do not need to implement mI; it is only useful for layouts which wish to make use of more of the  information (for example, XMonad.Layout.PerWorkspace).nGiven a r& in which to place the windows, and a x of windows, return a list of windows and their corresponding Rectangles. If an element is not given a Rectangle by nk, 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 newLayout`), 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 y monad (sf, window manager state, or configuration) and do not keep track of their own state should implement o instead of n.oThis is a pure version of n/, for cases where we don't need access to the y_ monad to determine how to lay out the windows, and we don't need to modify the layout itself.pp% is called when there are no windows.qq! performs message handling. If q returns Nothing_, then the layout did not respond to the message and the screen is not refreshed. Otherwise, q8 returns an updated layout and the screen is refreshed.(Layouts which do not need access to the y: monad to decide how to handle messages should implement r instead of qD (this restricts the risk of error, and makes testing much easier).rRespond to a message by (possibly) changing our layout, but taking no other action. If the layout changes, the screen will be refreshed.suThis should be a human-readable string that is used when selecting layouts by name. The default implementation is t(, which is in some cases a poor default.t8An existential type that can hold any object that is in u and l.y The X monad, v and w transformers over sJ encapsulating the window manager configuration and state, respectively.)Dynamic components may be retrieved with , static components with  I. With newtype deriving we get readers and state monads instantiated on  and  automatically.zThe r with screen dimensions}Physical screen indicesVirtual workspace indices4Non focused windows border color. Default: "#dddddd"0Focused windows border color. Default: "#ff0000"4The preferred terminal application. Default: "xterm"The available layouts-The action to run when a new window is openedHandle an X event, returns (All True) if the default handler should also be run afterwards. mappend should be used for combining event hooks in most cases.The list of workspaces' namesthe mod modifier3The key binding: a map from key presses and actionsThe mouse bindingsThe border width5The action to perform when the windows set is changed The action to perform on startup,Whether window entry events can change focusQFalse to make a click which changes focus to be additionally passed to the window.The client events that xmonad is interested in,The root events that xmonad is interested inlModify the configuration, complain about extra arguments etc. with arguments that are not handled by default4XConf, the (read-only) window manager configuration.the X11 displayinitial user configurationthe root window!border color of unfocused windows"border color of the focused window#a mapping of key presses to actions&a mapping of button presses to actions#was refocus caused by mouse action?Gposition of the mouse according to the event currently being processedevent currently being processed+XState, the (mutable) window manager state.workspace listthe Set of mapped windows"the number of expected UnmapEventsThe numlock modifier stores custom state information. The module XMonad.Utils.ExtensibleStateZ in xmonad-contrib provides additional information and a simple interface for using this.Run the y monad, given a chunk of yE monad code, and an initial state Return the result, and final state Run in the y] monad, and in case of exception, and catch it and log it to stderr, and run the error case.IExecute the argument, catching all exceptions. Either this function or 9 should be used at all callsites of user customized code.iSame as userCode but with a default argument to return instead of using Maybe, provided for convenience.4Run a monad action with the current display settings/Run a monadic action with the current stack set Safely access window attributes.+True if the given window is the root window.Wrapper for the common case of atom internmentCommon non-predefined atomsCommon non-predefined atomsCommon non-predefined atomsCommon non-predefined atoms Using the t; as a witness, parse existentially wrapped windows from a x.!And now, unwrap a given, unknown k8 type, performing a (dynamic) type check on the result.General utilitiesLift an s action into the y monadLift an s action into the y% monad. If the action results in an sG exception, log the exception to stderr and continue normal execution.Sspawn. Launch an external application. Specifically, it double-forks and runs the x" you pass as a command to /bin/sh.1Note this function assumes your locale uses utf8.Like , but returns the y of the launched applicationA replacement for z& which resets default signal handlers.<This is basically a map function, running a function in the yX monad on each workspace with the output of that function being the modified workspace.Return the path to the xmonad configuration directory. This directory is where user configuration files are stored (e.g, the xmonad.hs file). You may also create a libu subdirectory in the configuration directory and the default recompile command will add it to the GHC include path.=Several directories are considered. In order of preference: The directory specified in the XMONAD_CONFIG_DIR environment variable.The  ~/.xmonad directory.The XDG_CONFIG_HOME/xmonad directory.The first directory that exists will be used. If none of the directories exist then (1) will be used if it is set, otherwise (2) will be used. Either way, a directory will be created if necessary.Return the path to the xmonad cache directory. This directory is used to store temporary files that can easily be recreated. For example, the XPrompt history file.<Several directories are considered. In order of preference: The directory specified in the XMONAD_CACHE_DIR environment variable.The  ~/.xmonad directory.The XDG_CACHE_HOME/xmonad directory.The first directory that exists will be used. If none of the directories exist then (1) will be used if it is set, otherwise (2) will be used. Either way, a directory will be created if necessary.Return the path to the xmonad data directory. This directory is used by XMonad to store data files such as the run-time state file and the configuration binary generated by GHC.<Several directories are considered. In order of preference: The directory specified in the XMONAD_DATA_DIR environment variable.The  ~/.xmonad directory.The XDG_DATA_HOME/xmonad directory.The first directory that exists will be used. If none of the directories exist then (1) will be used if it is set, otherwise (2) will be used. Either way, a directory will be created if necessary.{Helper function that will find the first existing directory and return its path. If none of the directories can be found, create and return the first from the list. If the list is empty this function returns the historical  ~/.xmonad directory.|Simple wrapper around findFirstDirOfJ that allows the primary path to be specified by an environment variable.?Get the name of the file used to store the xmonad window state.\'recompile force', recompile the xmonad configuration file when any of the following apply: force is m$the xmonad executable does not existIthe xmonad executable is older than xmonad.hs or any file in the lib/ directory (under the configuration directory).oThe -i flag is used to restrict recompilation to the xmonad.hs file only, and any files in the aforementioned lib directory..Compilation errors (if any) are logged to the  xmonad.errors file in the xmonad data directory. If GHC indicates failure with a non-zero exit code, an xmessage displaying that file is spawned.}- is returned if there are compilation errors.%Conditionally run an action, using a Maybe a to decide.%Conditionally run an action, using a y event to decideA  for the yW monad. Logs a string to stderr. The result may be found in your .xsession-errors fileIgnore SIGPIPE to avoid termination when a pipe is full, and SIGCHLD to avoid zombie processes, and clean up any extant zombie processes.v`abcdefghijklmnopqrstuvwxy~z{|}~{|k`abcdefghijklmpnoqrstuvwxyz{|}~ky}~z{|lmnopqrstukijfgh`abcdexvw=`abcdefghijklmnopqrstuvwxy~z{|}~ {|(c) Spencer Janssen 2007BSD3-style (see LICENSE)spencerjanssen@gmail.comunstable+not portable, Typeable deriving, mtl, posixNone09;<=M'Are we on the left or right sub-layout?DA layout that allows users to switch between various layout options.&Messages to change the current layout.4Mirror a layout, compute its 90 degree rotated form.,The builtin tiling mode of xmonad. Supports ,  and .=The default number of windows in the master pane (default: 1)FPercent of screen to increment by when resizing panes (default: 3/100)CDefault proportion of screen occupied by master pane (default: 1/2)>Simple fullscreen mode. Renders the focused window fullscreen.2Increase the number of clients in the master pane.#Change the size of the master pane.OCompute the positions for windows using the default two-pane tiling algorithm.The screen is divided into two panes. All clients are then partioned between these two panes. One pane, the master, by convention has the least number of windows in it.Mirror a rectangle.The layout choice combinatorXA small wrapper around handleMessage, as it is tedious to write SomeMessage repeatedly.A smart constructor that takes some potential modifications, returns a new structure if any fields have changed, and performs any necessary cleanup on newly non-visible layouts.)frac<, what proportion of the screen to devote to the master arear', the rectangle representing the screennmaster*, the number of windows in the master panen%, the total number of windows to tile  5(c) Spencer Janssen 2007BSD3-style (see LICENSE)dons@cse.unsw.edu.auunstable+not portable, Typeable deriving, mtl, posixNone9:;<=M5Support for window size hints2A type to help serialize xmonad's state to a file.qWindow manager operations manage. Add a new window to be managed in the current workspace. Bring it into focus.iWhether the window is already managed, or not, it is mapped, has its border set, and its event mask set.bunmanage. A window no longer exists, remove it from the window list, on whatever workspace it is. TKill 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 the currently focused client."Iwindows. Modify the current window list with a pure function, and refresh#FProduce the actual rectangle from a screen and a ratio on that screen.$&setWMState. set the WM_STATE property%dSet the border color using the window's color map, if possible, otherwise fallback to the color in Pixel.&;hide. Hide a window by unmapping it, and setting Iconified.'jreveal. Show a window by mapping it and setting Normal this is harmless if the window was already visible(>Set some properties when we initially gain control of a window)Hrefresh. Render the currently visible workspaces, as determined by the StackSet(. Also, set focus to the focused window. This is our viewC operation (MVC), in that it pretty prints our model with X calls.*EclearEvents. Remove all events of a given type from the event queue.+dtileWindow. Moves and resizes w such that it fits inside the given rectangle, including its border.,Returns mJ if the first rectangle is contained within, but not equal to the second.-oGiven a list of screens, remove all duplicated screens and screens that are entirely contained within another..MCleans the list of screens according to the rules documented for nubScreens./rescreen. The screen configuration may have changed (due to xrandr), update the state and refresh the screen, and reset the gap.0HsetButtonGrab. Tell whether or not to intercept clicks on a given window18Set the focus to the window on top of the stack, or root2Set 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).3)Call X to set the keyboard focus details.4Throw a message to the current l= possibly modifying how we layout the windows, then refresh.52Send a message to all layouts, without refreshing.6/Send a message to a layout, without refreshing.7&Update the layout field of a workspace80Set the layout of the currently viewed workspace9#Return workspace visible on screen sc, or i.: Apply an y< operation to the currently focused window, if there is one.;m$ if window is under management by us<^Combinations of extra modifier masks we need to grab keys/buttons for. (numlock and capslock)="Strip numlock/capslock from a mask>Get the  value for a named color?rWrite the current window state (and extensible state) to a file so that xmonad can resume with that state intact.@PRead the state of a previous xmonad instance from a file and return that state.AMMigrate state from a previously running xmonad instance that used the older --resume technique.Brestart name resume6. Attempt to restart xmonad by executing the program name. If resume is mQ, restart with the current window state. When executing another window manager, resume should be }.CFloating layer supportlGiven a window, find the screen it is located on, and compute the geometry of that window wrt. that screen.D>Given a point, determine the screen (if any) that contains it.EpointWithin x y r returns m if the (x, y) co-ordinate is within r.F;Make a tiled window floating, using its suggested rectangleGAccumulate mouse motion eventsHCdrag the window under the cursor with the mouse while it is draggedIEresize the window under the cursor with the mouse while it is draggedJGiven a window, build an adjuster function that will reduce the given dimensions according to the window's border width and size hints.KfReduce the dimensions if needed to comply to the given SizeHints, taking window borders into account.LAReduce the dimensions if needed to comply to the given SizeHints.MXXX comment meNVReduce the dimensions so their aspect ratio falls between the two given aspect ratios.ODReduce the dimensions so they are a multiple of the size increments.PBReduce the dimensions if they exceed the given maximum dimensions.8 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP8 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP8 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP5 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP(c) Spencer Janssen 2007BSD3-style (see LICENSE)spencerjanssen@gmail.comunstable+not portable, uses cunning newtype derivingNoneISLift an y action to a v.T7The identity hook that returns the WindowSet unchanged.UInfix . Compose two x from right to left.VCompose the list of xs.Wp --> x. If p returns m, execute the x. G(-->) :: Monoid m => Query Bool -> Query m -> Query m -- a simpler typeXq =? x. if the result of q equals x , return m.Y lifted to a .Z lifted to a .[Return the window title.\Return the application name.]Backwards compatible alias for \.^Return the resource class._8A query that can return an arbitrary X property of type x, identified by name.a Modify the  with a pure function.b&Move the window to the floating layer.c&Map the window and remove it from the .d$Move the window to a given workspaceSTUVWXYZ[\]^_`abcdSTUVWXYZ[\]^_`abcdSTUVWXYZ[\]^_`abcdSTUVWXYZ[\]^_`abcdW0Y3Z3(c) Spencer Janssen 2007BSD3-style (see LICENSE)dons@galois.comstableportableNoneDRThe default number of workspaces (virtual screens) and their names. By default we use numeric strings, but any string may be used as a workspace name. The number of workspaces is determined by the length of this list.A tagging example: 7workspaces = ["web", "irc", "code" ] ++ map show [4..9]modMask lets you specify which modkey you want to use. The default is mod1Mask ("left alt"). You may also consider using mod3Mask ("right alt"), which does not conflict with emacs keybindings. The "windows key" is usually mod4Mask.%Width of the window border in pixels.>Border colors for unfocused and focused windows, respectively.>Border colors for unfocused and focused windows, respectively.Execute arbitrary actions and WindowSet manipulations when managing a new window. You can use this to, for example, always float a particular program, or have a client always appear on a particular workspace.To find the property name associated with a program, use xprop | grep WM_CLASS and click on the client you're interested in.XPerform an arbitrary action on each internal state change or X event. Examples include: do nothinglog the state to stdoutSee the  DynamicLog extension for examples.Defines a custom handler function for X Events. The function should return (All True) if the default handler is to be run afterwards. To combine event hooks, use mappend or mconcat from Data.Monoid..Perform an arbitrary action at xmonad startup.`The available layouts. Note that each layout is separated by |||, which denotes layout choice..The client events that xmonad is interested in,The root events that xmonad is interested inaThe preferred terminal program, which is used in a binding below and by certain contrib modules.(Whether focus follows the mouse pointer.FWhether a mouse click select the focus or is just passed to the windowAThe xmonad key bindings. Add, modify or remove key bindings here.F(The comment formatting character is used when generating the manpage)5Mouse bindings: default actions bound to mouse eventse.The default set of configuration values itselfIFinally, a copy of the default bindings in simple textual tabular format.efeeef Safe  (c) Spencer Janssen 2007BSD3-style (see LICENSE)spencerjanssen@gmail.comunstable"not portable, uses mtl, X11, posixNone:<= g| The entry point into xmonad. Attempts to compile any custom main for xmonad, and if it doesn't find one, just launches the default.Build the xmonad configuration file with ghc, then execute it. If there are no errors, this function does not return. An exception is raised in any of these cases: ghc missing6both the configuration file and executable are missingxmonad.hs fails to compile&* wrong ghc in path (fails to compile)* type error, syntax error, ..7Missing XMonad/XMonadContrib modules due to ghc upgradea wrapper for h*Entry point into xmonad for custom builds.NThis function isn't meant to be called by the typical xmonad user because it:,Does not process any command line arguments.7Therefore doesn't know how to restart a running xmonad.}Does not compile your configuration file since it assumes it's actually running from within your compiled configuration.FUnless you know what you are doing, you should probably be using the g function instead.However, if you are using a custom build environment (such as stack, cabal, make, etc.) you will likely want to call this function instead of g8. You probably also want to have a key binding to the BH function that restarts your custom binary with the resume flag set to True.gRuns handleEventHook from the configuration and runs the default handler function if it returned True.xEvent handler. Map X events onto calls into Operations.hs, which 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 backXXX comment mereplace. to signals compliant window managers to exit. ghghgh gh(c) Don StewartBSD3Don Stewart <dons@galois.com> provisionalNone      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~r      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   `abcdefghijklmpnoqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPSTUVWXYZ[\]^_`abcdegh      !"#$$%&'(())*+,--./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmmnopqrstuuvwxyz{|}~J      !"#$%&'()*+,-./01%23456789:;<=>?@ABCDWEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef ghi jk glmno pqrstuvwmnx yz {|}~} g mnuv gm gmJ+            uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu u u u u uuuuuuuuuuuuuuuuuuu u!u"u#u$u%u&u'u(u)u*u+u,u-u.u/u0u1u2u3u4u5u6u7u8u9u:u;u<u=u>u?u@uAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu[u\u]u^u_u`uaubucudueufuguhuiujukulumunuoupuququrusutuuuvuwuxuyuyuzu{u|u}u~uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu u u u u uuuuuuuuuuuuuuuuuuu u!u"u#u$u%u&u'u(u)u*u+u,u-u.u/u0u1u2u3u4u5u6u7u8u9u:u;u<u=u>u?u@uAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu[u\u]u^u_u`uaubucudueufuguhuiujukulumunuoupuqurusutuuvuuwuuxuuyuuzuu{u|}u|~u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|u|uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu u u u u uuuuuuuuuuuuuuuuuuu u!"u!#u!$u!%u!&u!'u!(u!)u!*u!+u!,u!-u!.u!/u!0u!1u!2u!3u!4u!5u!6u!7u!8u9:u9;u9<u9=u9>u9?u9@u9Au9Bu9Cu9Du9Eu9FuGHuGIuGJuGKuGLuGMuGNuGOuGPuGQuGRuGSuGTuGUuGVuGWuGXuGYuGZuG[uG\uG]uG^uG_uG`uGauGbuGcuGduGeuGfuGguGhuGiuGjuGkuGluGmuGnuGouGpuGquGruGsuGtuGuuGvuGwuGxuGyuGzuG{uG|uG}uG~uGuGuGuGuGuGuGuGuGuGuGuGuGuGuGuGuGuvuvuv-uvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvwuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu u u u u uuuuuuuuuuuuuuuuuuu u!u"u#u$u%u&u'u(u)u*u+u,u-u.u/u0u1u2u3u4u5u6u7u8u9u:u;u<u=u>u?u@uAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu[u\u]u^u_u`uaubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzu{u|u}u~uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu u u u u uuuuuuuuuuuuuuuuuuu u!u"u#u$u%u&u'u(u)u*u+u,u-u.u/u0u1u2u3u4u5u6u7u8u9u:u;u<u=u>u?u@uAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu[u\u]u^u_u`uaubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzu{u|u}u~uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu u u u u uuuuuuuuuuuuuuuuuuu u!u"u#u$u%u&u'u(u)u*u+u,u-u.u/u0u1u2u3u4u5u6u7u8u9u:u;u<u=u>u?u@uAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu[u\u]u^u_u`uaubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzu{u|u}u~uuuu"xmonad-0.13-JmUM88bw998EJYJzAZ6WoG XMonad.CoreXMonad XMonad.ConfigXMonad.StackSet XMonad.LayoutXMonad.OperationsXMonad.ManageHook XMonad.Main Paths_xmonadbaseData.Typeable.InternalTypeableControl.Monad.IO.ClassliftIOMonadIO Data.Bits.|.1data-default-class-0.1.2.0-FYQpjIylblBDctdkHAFeXAData.Default.ClassDefaultdef mtl-2.2.1-6qsR1PHUy5lL47Hpoa4jCMControl.Monad.Reader.Classasksreaderlocalask MonadReaderControl.Monad.State.Classgetsmodifystateputget MonadStateStackfocusupdown RationalRect WorkspacetaglayoutstackScreen workspacescreen screenDetailStackSetcurrentvisiblehiddenfloatingabortnewview greedyViewlookupWorkspacemodify'peek integrate integrate' differentiatefilterindexfocusUp focusDownswapUpswapDownfocusUp' focusDown' focusWindowscreens workspaces allWindows currentTag tagMember renameTag ensureTags mapWorkspace mapLayoutmemberfindTaginsertUpdeletedelete'floatsink swapMaster shiftMaster focusMastershiftshiftWin$fShowRationalRect$fReadRationalRect$fEqRationalRect $fShowStack $fReadStack $fEqStack$fShowWorkspace$fReadWorkspace $fEqWorkspace $fShowScreen $fReadScreen $fEqScreen$fShowStackSet$fReadStackSet $fEqStackSetStateExtensionPersistentExtensionExtensionClass initialValue extensionTypeLayoutMessagesHideReleaseResources SomeMessageMessage LayoutClass runLayoutdoLayout pureLayout emptyLayout handleMessage pureMessage descriptionLayoutQuery ManageHookX ScreenDetailSD screenRectScreenIdS WorkspaceId WindowSpace WindowSetXConfignormalBorderColorfocusedBorderColorterminal layoutHook manageHookhandleEventHookmodMaskkeys mouseBindings borderWidthlogHook startupHookfocusFollowsMouseclickJustFocuses clientMaskrootMaskhandleExtraArgsXConfdisplayconfigtheRoot normalBorder focusedBorder keyActions buttonActions mouseFocused mousePosition currentEventXState windowsetmapped waitingUnmapdraggingnumberlockMaskextensibleStaterunQueryrunXcatchXuserCode userCodeDef withDisplay withWindowSetwithWindowAttributesisRootgetAtomatom_WM_PROTOCOLSatom_WM_DELETE_WINDOW atom_WM_STATEatom_WM_TAKE_FOCUS readsLayout fromMessageiocatchIOspawnspawnPIDxforkrunOnWorkspaces getXMonadDirgetXMonadCacheDirgetXMonadDataDir stateFileName recompilewhenJustwhenXtraceinstallSignalHandlersuninstallSignalHandlers$fMessageLayoutMessages$fMessageEvent $fShowLayout$fLayoutClassLayoutWord64$fDefaultQuery $fMonoidQuery $fDefaultX $fMonoidX$fApplicativeX $fEqScreenId $fOrdScreenId$fShowScreenId$fReadScreenId$fEnumScreenId $fNumScreenId$fIntegralScreenId$fRealScreenId$fEqScreenDetail$fShowScreenDetail$fReadScreenDetail$fEqLayoutMessages $fFunctorX$fMonadX $fMonadIOX $fMonadStateX$fMonadReaderX$fFunctorQuery$fApplicativeQuery $fMonadQuery$fMonadReaderQuery$fMonadIOQueryChoose ChangeLayout FirstLayout NextLayoutMirrorTall tallNMastertallRatioIncrement tallRatioFull IncMasterNResizeShrinkExpandtilesplitVerticallysplitHorizontallysplitHorizontallyBysplitVerticallyBy mirrorRect|||$fLayoutClassChoosea$fMessageNextNoWrap$fMessageChangeLayout$fLayoutClassMirrora$fLayoutClassTalla$fLayoutClassFulla$fMessageIncMasterN$fMessageResize $fShowFull $fReadFull $fShowTall $fReadTall $fShowMirror $fReadMirror$fEqChangeLayout$fShowChangeLayout$fReadLR$fShowLR$fEqLR $fReadChoose $fShowChoose$fEqNextNoWrap$fShowNextNoWrapD StateFilesfWinssfExtmanageunmanage killWindowkillwindowsscaleRationalRect setWMStatesetWindowBorderWithFallbackhiderevealsetInitialPropertiesrefresh clearEvents tileWindow containedIn nubScreensgetCleanedScreenInforescreen setButtonGrab setTopFocus setFocusX sendMessagebroadcastMessagesendMessageWithNoRefresh updateLayout setLayoutscreenWorkspace withFocusedisClientextraModifiers cleanMask initColorwriteStateToFile readStateFile migrateStaterestart floatLocation pointScreen pointWithin mouseDragmouseMoveWindowmouseResizeWindowmkAdjustapplySizeHintsapplySizeHintsContentsapplySizeHints'applyAspectHintapplyResizeIncHintapplyMaxSizeHint$fShowStateFile$fReadStateFileliftXidHook<+> composeAll-->=?<&&><||>titleappNameresource classNamestringPropertygetStringPropertydoFdoFloatdoIgnoredoShift defaultConfig$fDefaultXConfigxmonadlaunchGHC.BaseNothingwith Data.MaybemaybeJustghc-prim GHC.TypesTrueGHC.Listcycle reverseStackswapUp' onWorkspaceX11-1.8-H7TCtDiQUkcEpMOdDnEd2EGraphics.X11.Xlib.Types RectangleIOGHC.ShowshowGHC.ReadReadtransformers-0.5.2.0Control.Monad.Trans.ReaderReaderTControl.Monad.Trans.State.LazyStateTStringSystem.Posix.Types ProcessID unix-2.7.2.0System.Posix.Process.Common forkProcessfindFirstDirOffindFirstDirWithEnvFalseLRhandlechoose NextNoWrapLRPixelmappend GHC.Classes&&Monad||defaultModMaskhelpversionbindirlibdirdatadir libexecdir sysconfdir getBinDir getLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName buildLaunch sendReplacereplacehandleWithHookscangrabKeys grabButtonsusage sendRestartsetNumlockMaskGraphics.X11.Xlib.ExtrasgetModifierMapping getCommand getErrorEventsetErrorHandler setWMHints getWMHintsallHintsBitmaskurgencyHintBitwindowGroupHintBiticonMaskHintBiticonPositionHintBiticonWindowHintBiticonPixmapHintBit stateHintBit inputHintBit iconicState normalStatewithdrawnState getClassHintgetWMNormalHintspWinGravityBit pBaseSizeBit pAspectBit pResizeIncBit pMaxSizeBit pMinSizeBit unmapWindowdeletePropertypropModeAppendpropModePrependpropModeReplacechangeProperty32changeProperty16changeProperty8getWindowProperty32getWindowProperty16getWindowProperty8rawGetWindowPropertyanyPropertyTyperefreshKeyboardMapping setKeyEventsetConfigureEventsetClientMessageEventsetSelectionNotify setEventTypegetWMProtocolsgetTransientForHint fetchNamewcTextEscapementwcDrawImageString wcDrawString wcTextExtents createFontSetwcTextPropertyToTextListgetTextProperty withServergetWindowAttributes waIsViewablewaIsUnviewable waIsUnmapped queryTreeconfigureWindow currentTimeanyKey anyButtonnonegetEvent eventName eventTablexConfigureWindow killClient xQueryTreexGetWindowAttributeschangeWindowAttributesxGetTextPropertyxwcTextPropertyToTextListwcFreeStringListxCreateFontSetfreeStringList freeFontSetxwcTextExtents xwcDrawStringxwcDrawImageStringxwcTextEscapement xFetchNamexGetTransientForHintxGetWMProtocolsxSetErrorHandlerxRefreshKeyboardMappingxChangePropertyxDeletePropertyxGetWindowProperty xUnmapWindowxGetWMNormalHints xGetClassHint xGetWMHints xAllocWMHints xSetWMHints isCursorKey isFunctionKey isKeypadKeyisMiscFunctionKey isModifierKeyisPFKeyisPrivateKeypadKeyxSetSelectionOwnerxGetSelectionOwnerxConvertSelectionmkXErrorHandlergetXErrorHandler_xSetErrorHandler mapRaised xGetCommandxGetModifierMappingxFreeModifiermapEventAnyEventConfigureRequestEventConfigureEventMapRequestEventKeyEvent ButtonEvent MotionEventDestroyWindowEvent UnmapEventMapNotifyEventMappingNotifyEvent CrossingEventSelectionRequestSelectionClear PropertyEvent ExposeEventClientMessageEventRRScreenChangeNotifyEvent RRNotifyEventRRCrtcChangeNotifyEventRROutputChangeNotifyEventRROutputPropertyNotifyEvent ev_event_type ev_serial ev_send_eventev_event_display ev_window ev_parentev_xev_yev_width ev_heightev_border_widthev_above ev_detail ev_value_maskev_eventev_override_redirectev_root ev_subwindowev_time ev_x_root ev_y_rootev_state ev_keycodeev_same_screen ev_buttonev_from_configure ev_requestev_first_keycodeev_countev_modeev_focusev_owner ev_requestor ev_selection ev_target ev_propertyev_atom ev_propstateev_message_typeev_data ev_timestampev_config_timestamp ev_size_indexev_subpixel_order ev_rotation ev_mwidth ev_mheight ev_subtypeev_crtc ev_rr_mode ev_rr_width ev_rr_height ev_output ev_connection ev_rr_state WindowChangeswc_xwc_ywc_width wc_heightwc_border_width wc_sibling wc_stack_modeWindowAttributeswa_xwa_ywa_width wa_heightwa_border_width wa_colormapwa_map_installed wa_map_statewa_override_redirect TextPropertytp_value tp_encoding tp_format tp_nitemsFontSet SizeHints sh_min_size sh_max_size sh_resize_inc sh_aspect sh_base_sizesh_win_gravity ClassHintresNameresClassWMHints wmh_flags wmh_inputwmh_initial_statewmh_icon_pixmapwmh_icon_window wmh_icon_x wmh_icon_y wmh_icon_maskwmh_window_groupXErrorEventPtrCXErrorHandler XErrorHandler ErrorEventev_type ev_display ev_serialnum ev_error_codeev_request_code ev_minor_code ev_resourceidGraphics.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 lookupStringnoSymbolstringToKeysymkeysymToStringdisplayKeycodesreadBitmapFilematchVisualInfo getVisualInfo visualAllMaskvisualBitsPerRGBMaskvisualColormapSizeMaskvisualBlueMaskMaskvisualGreenMaskMaskvisualRedMaskMaskvisualClassMaskvisualDepthMaskvisualScreenMask visualIDMask visualNoMaskgetPointerControlgetScreenSaverscreenSaverResetscreenSaverActivedefaultBlankingpreferBlankingdontPreferBlankingdefaultExposuresallowExposuresdontAllowExposuressetLocaleModifiers getGeometrygeometrysetDefaultErrorHandler displayName queryPointer queryBestSizequeryBestCursorqueryBestStipple queryBestTile getInputFocus rmInitialize autoRepeatOff autoRepeatOnbellsetCloseDownModelastKnownRequestProcessed setInputFocus grabButton ungrabButton grabPointer ungrabPointergrabKey ungrabKey grabKeyboardungrabKeyboard grabServer ungrabServersupportsLocalesetScreenSaveractivateScreenSaverresetScreenSaverforceScreenSaver warpPointervisualIDFromVisual initThreads lockDisplay unlockDisplay createPixmap freePixmapbitmapBitOrder bitmapUnit bitmapPad lookupKeysymkeycodeToKeysymkeysymToKeycode defineCursorundefineCursorcreateFontCursor freeCursor drawPointdrawLine drawRectangledrawArc fillRectanglefillArccopyArea copyPlaneAllowExposuresModePreferBlankingModeScreenSaverModeVisualInfoMaskGraphics.X11.Xlib.ImagegetPixelgetImage createImageputImage destroyImage xGetPixelGraphics.X11.Xlib.CursorxC_xtermxC_watch xC_ur_angle xC_umbrella xC_ul_anglexC_trek xC_top_tee xC_top_sidexC_top_right_cornerxC_top_left_cornerxC_top_left_arrow xC_tcross xC_targetxC_star xC_spraycan xC_spider xC_sizing xC_shuttlexC_sb_v_double_arrowxC_sb_up_arrowxC_sb_right_arrowxC_sb_left_arrowxC_sb_h_double_arrowxC_sb_down_arrow xC_sailboat xC_rtl_logoxC_rightbutton xC_right_tee xC_right_side xC_right_ptrxC_question_arrowxC_plus xC_pirate xC_pencilxC_mousexC_man xC_lr_angle xC_ll_angle xC_leftbutton xC_left_tee xC_left_side xC_left_ptr xC_iron_crossxC_iconxC_heartxC_hand2xC_hand1xC_gumby xC_gobblerxC_fleur xC_exchange xC_draped_boxxC_draft_smallxC_draft_largexC_double_arrow xC_dotboxxC_dotxC_diamond_cross xC_crosshairxC_cross_reversexC_cross xC_coffee_mugxC_clock xC_circle xC_center_ptr xC_box_spiral xC_bottom_teexC_bottom_sidexC_bottom_right_cornerxC_bottom_left_corner xC_bogosityxC_boatxC_based_arrow_upxC_based_arrow_downxC_arrow xC_X_cursorGraphics.X11.Xlib.Font textWidth textExtentsdescentFromFontStructascentFromFontStructfontFromFontStruct loadQueryFont fontFromGC queryFontfreeFontGlyph FontStruct CharStructGraphics.X11.Xlib.Event sendEventgettimeofday_in_milliseconds waitForEventget_ConfigureEventget_ExposeEventget_MotionEventget_ButtonEvent asKeyEvent get_KeyEvent get_Window get_EventType allocaXEventqueuedAfterReadingqueuedAfterFlush queuedAlreadyflushsyncpending eventsQueued nextEvent allowEvents selectInput windowEventcheckWindowEvent maskEventcheckMaskEventcheckTypedEventcheckTypedWindowEvent putBackEvent peekEvent QueuedModeXEvent XEventPtr XKeyEvent XKeyEventPtr XButtonEvent XMotionEvent XExposeEvent XMappingEventXConfigureEventGraphics.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 getAtomNames getAtomName internAtomDisplayVisualGCSetWindowAttributes VisualInfovisualInfo_visualvisualInfo_visualIDvisualInfo_screenvisualInfo_depthvisualInfo_classvisualInfo_redMaskvisualInfo_greenMaskvisualInfo_blueMaskvisualInfo_colormapSizevisualInfo_bitsPerRGBImagePosition DimensionAngle ScreenNumberBufferPointpt_xpt_yrect_xrect_y rect_width rect_heightArcarc_xarc_y arc_width arc_height arc_angle1 arc_angle2Segmentseg_x1seg_y1seg_x2seg_y2Color color_pixel color_red color_green color_blue color_flagsGraphics.X11.TypesxRR_UnknownConnectionxRR_Disconnected xRR_Connected xRR_Reflect_Y xRR_Reflect_XxRR_Rotate_270xRR_Rotate_180 xRR_Rotate_90 xRR_Rotate_0zPixmapxyPixmapxyBitmapfontRightToLeftfontLeftToRightdoBluedoGreendoRedalways 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 noModMask anyModifier mod5MapIndex mod4MapIndex mod3MapIndex mod2MapIndex mod1MapIndexcontrolMapIndex lockMapIndex shiftMapIndex lASTEventrrNotifyOutputPropertyrrNotifyOutputChangerrNotifyCrtcChangerrNotifyrrScreenChangeNotify mappingNotify clientMessagecolormapNotifyselectionNotifyselectionRequestselectionClearpropertyNotifycirculateRequestcirculateNotify resizeRequest gravityNotifyconfigureRequestconfigureNotifyreparentNotify mapRequest mapNotify unmapNotify destroyNotify createNotifyvisibilityNotifynoExposegraphicsExposeexpose keymapNotifyfocusOutfocusIn leaveNotify enterNotify motionNotify buttonRelease buttonPress keyReleasekeyPressrrOutputPropertyNotifyMaskrrOutputChangeNotifyMaskrrCrtcChangeNotifyMaskrrScreenChangeNotifyMaskownerGrabButtonMaskcolormapChangeMaskpropertyChangeMaskfocusChangeMasksubstructureRedirectMasksubstructureNotifyMaskresizeRedirectMaskstructureNotifyMaskvisibilityChangeMask 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 ImageFormatRotation ReflectionSizeID SubpixelOrder ConnectionRROutputRRCrtcRRMode XRRModeFlagsGraphics.X11.Xlib.InternalxFree