This repository includes the following:
- Configuration of XMonad that has specialized functionality
- Patches for XMonad
The xmonad.hs closely emulates the window division behaviors of Wmii / Orion / I3 / Ion, and other non-minimal tiling window managers (eg. not DWM, or other window managers of the strongly "minimalist" flavor). See xmonad.hs for more details...
It focuses heavily on the ability to manipulate multiple independent groups of windows one or more monitors, with a high degree of granularity. The current way that this is abstracted is through the use of LayoutScreens to pretend that the different "panes" of a Rectangle are in fact different screens. The user may work at a higher level of abstraction, not worrying about master-slave window relationships, nor excessively rigid "dynamic" window behavior.
This is particularly useful in a number of circumstances:
- When using a widescreen monitor, and more efficient screen utilization of the screen space is desired
- When using multiple monitors, and Xinerama or TWinView are unavailable
- When using systems with limited or restrictive X servers, that are incapable of using XRender (xrdp sessions with the span option are a case in point for this functionality)
Included are some other useful behaviors that are not commonly implemented:
- Handles process spawning on FreeBSD correctly
- Allows variable-width layouts properly in conjunction with layoutScreens (via a custom layout, as defined in this file) with an arbitrary number of subdivisions (as noted above)
- Easy dynamic switching between variable width subdivisions of the workspace
- Adapted version of XMonad.Layout.Groups.Wmii (XMonad.Layout.Groups.WmiiTwoPane)
- Integrated with transparent versions of xmobar and dmenu (compatible with XMonad transparent window borders as well)
- Both Next/previous tab and next/previous screen are fully working in all possible layouts. In both cases, moving the focus and/or a window are fully supported, and are constrained on the edges/corners of the screen (no cycles / non-wrapping).
- Handles desktop windows correctly: ensures that rdesktop windows are both non-floating (safely sinks the window) and shifted to a target workspace, with no ghosting effect.
Transparent Window Decorations
The main patches of note make the window decorations transparent in xmonad-contrib:
- Both the patches and a FreeBSD port are included.
- Works for window decorations, and includes the borders and the area around window title text (so it was necessary to modify three different files)
- The transparency applies to many third-party extensions, such as flashText, since most extensions utilize the window decoration code in xmonad-contrib
- The configuration files and patches should run on the latest versions of XMonad, and will be adapted periodically to be fully compatible with the latest stable versions of the software.
See COPYRIGHT for more details (BSD 3 clause).
I'm not terribly experienced in Haskell, but I'm getting better! Comments/critiques are always welcome, especially from experienced Haskell programmers!