vimLikeXPKeymap'. A reworked event loop supports new vim-like prompt actions.
XPConfigcolors remain unchanged for backwards compatibility.
moveWord'has changed; brought in line with the documentation and now internally consistent. The old keymaps retain the original behavior; see the documentation to do the same your XMonad configuration.
A layout that is like TwoPane but keeps track of the slave window that is currently beside the master. In TwoPane, the default behavior when the master is focused is to display the next window in the stack on the slave pane. This is a problem when a different slave window is selected without changing the stack order.
Named scratchpads that can be mutually exclusive: This new module extends the idea of named scratchpads such that you can define “families of scratchpads” that are exclusive on the same screen. It also allows to remove this constraint of being mutually exclusive with another scratchpad.
XPConfig used to sort the possible completions by how
well they match the search string (example:
Fixes a potential bug where an error during prompt execution would leave the window open and keep the keyboard grabbed. See issue #180.
Fixes issue #217, where using tab to wrap around the completion rows would fail when maxComplRows is restricting the number of rows of output.
Added ‘passOTPPrompt’ to support getting OTP type password. This require pass-otp (https://github.com/tadfisher/pass-otp) has been setup in the running machine.
Make the input directory read from the prompt in
absolute wrt the current directory.
Before this, the directory set by the prompt was treated like a relative
directory. This means that when you switch from a project with directory
foo into a project with directory
bar, xmonad actually tries to
foo/bar, instead of
~/bar as expected.
Add a version of
withNthWorkspace that takes a
[WorkspaceId] transformation to apply over the list of workspace tags
resulting from the dynamic order.
Add a utility function
isOnAnyVisibleWS :: Query Bool to allow easy
cycling between all windows on all visible workspaces.
Preserve the aspect ratio of wallpapers that xmonad sets. When previous versions would distort images to fit the screen size, it will now find a best fit by cropping instead.
Add adwaitaTheme and adwaitaDarkTheme to match their respective GTK themes.
XMonad.Layout.Groups.HelpersThe layout will no longer perform refreshes inside of its message handling. If you have been relying on it to in your xmonad.hs, you will need to start sending its messages in a manner that properly handles refreshing, e.g. with
Unlike the opaque
IO actions that
X actions can wrap, regular reads from
XConf and modifications to the
XState are fundamentally pure --
contrary to the current treatment of such actions in most xmonad code. Pure
modifications to the
WindowSet can be readily composed, but due to the
need for those modifications to be properly handled by
windows, other pure
changes to the
XState cannot be interleaved with those changes to the
WindowSet without superfluous refreshes, hence breaking composability.
This module aims to rectify that situation by drawing attention to it and
PureX: a pure type with the same monadic interface to state as
XLike typeclass enables writing actions generic over the two
monads; if pure, existing
X actions can be generalised with only a change
to the type signature. Various other utilities are provided, in particular
defile function which is needed by end-users.
Add support for GHC 8.6.1.
Refresh-performing functions updated to better reflect the new
XMonad.Layout.Spacing. Borders are no longer uniform but composed
of four sides each with its own border width. The screen and window borders
are now separate and can be independently toggled on/off. The screen border
examines the window/rectangle list resulting from ‘runLayout’ rather than
the stack, which makes it compatible with layouts such as the builtin
Full. The child layout will always be called with the screen border. If
only a single window is displayed (and
smartBorder enabled), it will be
expanded into the original layout rectangle. Windows that are displayed but
not part of the stack, such as those created by ‘XMonad.Layout.Decoration’,
will be shifted out of the way, but not scaled (not possible for windows
created by XMonad). This isn’t perfect, so you might want to disable
Spacing on such layouts.
spawnAndDoOnce. These are useful in startup hooks to shift spawned windows to a specific workspace.
Adding handling of modifySpacing message in smartSpacing and smartSpacingWithEdge layout modifier
GSConfigto specify border color.
Though the interface it offers is quite similar, this module has been
almost completely rewritten. The new
several functions that allow interaction with minimization window state.
If you are using this module, you must upgrade your configuration to import
X.A.Minimize and use
withLastMinimized instead of
sending messages to
been completely deprecated, and its functions have no effect.
unicodePrompt :: String -> XPConfig -> X ()now additionally takes a filepath to the
UnicodeData.txtfile containing unicode data.
onPrevNeighbour now need a extra parameter
ScreenComparator. This allow the user to specify how he want his screen to be ordered default
def(same as verticalScreenOrderer) will keep previous behavior
One can build his custom ScreenOrderer using:
screenComparatorById(allow to order by Xinerama id)
screenComparatorByRectangle(allow to order by screen coordonate)
ScreenComparator(allow to mix ordering by screen coordonate and xinerama id)
getXineramaPhysicalWsCompare now need a extra argument of type
ScreenComparator defined in
XMonad.Actions.PhysicalScreens (see changelog of this module for more information)
The layout now maintains a list of windows that never have borders, and a
list of windows that always have borders. Use
BorderMessage to manage
these lists and the accompanying event hook (
borderEventHook) to remove
destroyed windows from them. Also provides the
hasBorder manage hook.
Two new conditions have been added to
OnlyFloat was renamed to
the documentation for more information.
The type signature of
hiddens was changed to accept a new
parameter representing the bounds of the parent layout, placed after the
WindowSet parameter. Anyone defining a new instance of
will need to update their configuration. For example, replace “
wset mst wrs =” either with “
hiddens amb wset _ mst wrs =” or to make
use of the new parameter with “
hiddens amb wset lr mst wrs =”.
XMonad.Operations. Functions returning
X ()are named regularly (previously these ended in underscore) while those returning
X Boolare suffixed with an uppercase ‘B’.
sendMessageWithNoRefresh, not just
tryMessageBfunctions accept a parameter of type
SomeMessage -> X Bool, which means you are no longer constrained to the behavior of the
send*Messages*family of funtions allows for sequencing arbitrary sets of messages with minimal refresh. It makes little sense for these functions to support custom message dispatchers.
Provides a simple transformer for use with
StateFull: a stateful form of
Full that does not misbehave when
floats are focused, and the
FocusTracking layout transformer by means of
StateFull is implemented.
FocusTracking simply holds onto the last
true focus it was given and continues to use it as the focus for the
transformed layout until it sees another. It can be used to improve the
behaviour of a child layout that has not been given the focused window.
Module for tracking master window history per workspace, and associated functions for manipulating the stack using such history.
A new module that allows cycling through previously viewed workspaces in the order they were viewed most recently on the screen where cycling is taking place.
Also provides the
repeatableAction helper function which can be used to
build actions that can be repeated while a modifier key is held down.
Provides a predicate
fuzzyMatch that is much more lenient in matching
XMonad.Prompt than the default prefix match. Also provides
fuzzySort that allows sorting the fuzzy matches by “how well”
A new module that allows to query if this is the first time xmonad is started of the session, or a xmonad restart.
Currently needs manual setting of the session start flag. This could be automated when this moves to the core repository.
A new layout based on Dishes, however it accepts additional configuration to allow multiple windows within a single stack.
A new module for handling pixel rectangles.
A new module which provides a simple grid layout, halving the window sizes of each window after master.
This is similar to Column, but splits the window in a way that maintains window sizes upon adding & removing windows as well as the option to specify a minimum window size.
Fix as per issue #223; Grid will no longer calculate more columns than there are windows.
Added support for GHC version 8.4.x by adding a Semigroup instance for Monoids
Added support for GHC version 8.4.x by adding a Semigroup instance for Monoids
Added support for GHC version 8.4.x by adding a Semigroup instance for Monoids
sideNavigation and a parameterised variant, providing a navigation
strategy with fewer quirks for tiled layouts using X.L.Spacing.
The fullscreen layouts will now not render any window that is totally obscured by fullscreen windows.
Extended the sendMessage interface with
ModifyGaps to allow arbitrary
modifications to the
Added a new
ModifyX message type that allows the modifying
function to return values in the
Generalised (and hence deprecated) hybridNavigation to hybridOf.
Preserve the window order of the modified layout, except for the focused window that is placed on top. This fixes an issue where the border of the focused window in certain situations could be rendered below borders of unfocused windows. It also has a lower risk of interfering with the modified layout.
The focused window is placed above the other windows if they would be made to overlap due to a layout modifier. (As long as it preserves the window order.)
Establish pointer grab to avoid freezing X, when button press occurs after submap key press. And terminate submap at button press in the same way, as we do for wrong key press.
Make type of ManageHook combinators more general.
mkXPromptWithModeswith window prompts.
PartitionWinsmessage to re-partition all windows into the configured sub-layouts. Useful when window properties have changed and you want to re-sort windows into the appropriate sub-layout.
withFirstMinimized'so you can perform actions with both the last and first minimized windows easily.
xdotoolto type in a password from the store, bypassing the clipboard.
passEditPromptfor editing a password from the store.
ExtensibleStatenow used instead of
typeUnicodePrompt :: String -> XPConfig -> X ()provided to insert the Unicode character via
xdotoolinstead of copying it to the paste buffer.
mkUnicodePrompt :: String -> [String] -> String -> XPConfig -> X ()acts as a generic function to pass the selected Unicode character to any program.
appendFilePrompt'which allows for transformation of the string passed by a user before writing to a file.
dzenWithFlagswhich allows specifying the arguments passed to
dzen2invocation. The behaviour of current
dzenfunction is unchanged.
bgColorto specify foreground and background color,
slaveAlignto set text alignment, and
lineCountto enable a second (slave) window that displays lines beyond the initial (title) one.
ppVisibleNoWindowsto differentiate between empty and non-empty visible workspaces in pretty printing.
removeNameto better control ordering when workspace names are changed or workspaces are removed.
belgianKeysto support Belgian AZERTY keyboards, which are slightly different from the French ones in the top row.
The type of
XPConfig record) has been
(KeyMask, KeySym). The default value
for this is still bound to the
CenteredAt Rational Rational added for
XMonad.Prompt now stores its history file in the XMonad cache
directory in a file named
A new LayoutModifier that sorts a given layout by a list of properties. The order of properties in the list determines the order of windows in the final layout. Any unmatched windows go to the end of the order.
A prompt to search a unicode character by its name, and put it into the clipboard.
Release xmonad’s keyboard and pointer grabs immediately, so screen grabbers and lock utilities, etc. will work. Replaces the short sleep hackaround.
A collection of Loggers (see
XMonad.Util.Loggers) for NamedScratchpads
Utility function and
ManageHook to mark a window to be ignored by
EWMH taskbars and pagers. Useful for
NamedScratchpad windows, since
you will usually be taken to the
NSP workspace by them.
Fix a very annoying bug where taskbars/docs would be covered by windows.
Also fix a bug that caused certain Gtk and Qt application to have issues displaying menus and popups.
Merge all functionality from
raiseNextMaybecycling between 2 workspaces only.
The project itself was already being deleted, this just deletes the workspace created for it as well.
Added function to change the working directory (
All of the prompts are now multiple mode prompts. Try using the
changeModeKey in a prompt and see what happens!
XMonad.Actions.UpdatePointer.updatePointer arguments were
changed. This allows including aspects of both of the
Relative methods. To keep the same behavior,
replace the entry in the left column with the entry on the right:
|< 0.12||>= 0.12|
Perform an action after the current mouse drag is completed.
Imbues workspaces with additional features so they can be treated as individual project areas.
Provides bindings to add and delete links between workspaces. It is aimed at providing useful links between workspaces in a multihead setup. Linked workspaces are viewed at the same time.
This module fixes some of the keybindings for the francophone
among you who use a BEPO keyboard layout. Based on
Daniel Wagner’s configuration.
This module provides a config suitable for use with the MATE desktop environment.
A draft of a brand new config syntax for xmonad.
Module to apply a
ManageHook to an already-mapped window when a
property changes. This would commonly be used to match browser
windows by title, since the final title will only be set after (a)
the window is mapped, (b) its document has been loaded, © all
load-time scripts have run.
manageHook and associated
logHook for debugging
Simplest usage: wrap your xmonad config in the
combinator. Or use
debugManageHookOn for a triggerable version,
specifying the triggering key sequence in
syntax. Or use the individual hooks in whatever way you see fit.
Log hook which changes the wallpapers depending on visible workspaces.
Keeps track of workspace viewing order.
Find a maximum empty rectangle around floating windows and use that area to display non-floating windows.
Layout where new windows will split the focused window in half, based off of BSPWM.
Three layouts: The first,
Spiral, is a reimplementation of
XMonad.Layout.Spiral.spiral with, at least to me, more intuitive
semantics. The second,
Dwindle, is inspired by a similar layout
in awesome and produces the same sequence of decreasing window
sizes as Spiral but pushes the smallest windows into a screen
corner rather than the centre. The third,
Squeeze arranges all
windows in one row or in one column, with geometrically decreasing
XMonad.Layout.Minimize but completely removes windows
from the window set so
necessary. Perfect companion to
since it can be used to move windows to another part of the BSP tree.
IfMax layout, which will run one layout if there are
N windows on workspace, and another layout, when number
of windows is greater than
Configure layouts based on the width of your screen; use your favorite multi-column layout for wide screens and a full-screen layout for small ones.
This module implements a special kind of layout modifier, which when applied to a layout, causes xmonad to stop all non-visible processes. In a way, this is a sledge-hammer for applications that drain power. For example, given a web browser on a stoppable workspace, once the workspace is hidden the web browser will be stopped.
A module for setting up simple confirmation prompts for keybindings.
This module provides 3
XMonad.Prompts to ease passwords
manipulation (generate, read, remove) via pass.
This module implements a proper way of finding out whether the window is remote or local.
A module for spawning a pipe whose
Handle lives in the xmonad state.
Functions for saving per-window data.
Fix issue #9:
searchPredicate is ignored,
Fix moveHistory when alwaysHighlight is enabled
XMonad.Actions.DynamicWorkspaceGroups now exports
Side tabs were added to the tabbed layout
XMonad/Layout/IndependentScreens now exports
XMonad/Hooks/UrgencyHook now exports
Exceptions are now caught when finding commands on
Data.Default wherever possible
XMonad.Layout.IndependentScreens now exports
XMonad.Util.NamedActions now exports
DEMANDS_ATTENTION support added to
useTransientFor modifier in
Added the ability to remove arbitrary workspaces
XMonad.Hooks.EwmhDesktops no longer uses
ewmhDesktopsLayout modifier has been removed from
xmonad-contrib. It uses
startupHook instead and provides a convenient function
add EWMH support to a
DynamicLog users can continue with configs unchanged, but
users of the quickbar functions
dzen will need to
xmonad.hs: their types have changed to allow easier
composition with other
XConfig modifiers. The
dynamicLogXmobar functions have been removed.
safeSpawn users may need to change command lines
People explicitly referencing the “SP” scratchpad workspace should
change it to “NSP” which is also used by the new
(Optional) People who explicitly use
swapMaster in key or mouse
bindings should change it to
shiftMaster. It’s the current
default used where
swapMaster had been used previously. It works
swapMaster when using floating and tiled windows
together on the same workspace.