xmonad-contrib v0.17.0 Release Notes

Release Date: 2021-10-27 // about 1 month ago
  • πŸ’₯ Breaking Changes

    • All modules that export bitmap fonts as their default

      • If xmonad is compiled with XFT support (the default), use an XFT font instead. The previous default expected an X11 misc font (PCF), which is not supported in pango 1.44 anymore and thus some distributions have stopped shipping these.

      This fixes the silent user error (createFontSet); this would break the respective modules.

    • XMonad.Prompt

      • Now mkComplFunFromList and mkComplFunFromList' take an additional XPConfig argument, so that they can take into account the given searchPredicate.
      • A complCaseSensitivity field has been added to XPConfig, indicating whether case-sensitivity is desired when performing completion.
      • historyCompletion and historyCompletionP now both have an X constraint (was: IO), due to changes in how the xmonad core handles XDG directories.
      • The prompt window now sets a WM_CLASS property. This allows other applications, like compositors, to properly match on it.
    • XMonad.Hooks.EwmhDesktops

      • It is no longer recommended to use fullscreenEventHook directly. Instead, use ewmhFullscreen which additionally advertises fullscreen support in _NET_SUPPORTED and fixes fullscreening of applications that explicitly check it, e.g. mupdf-gl, sxiv, …

      XMonad.Layout.Fullscreen.fullscreenSupport now advertises it as well, and no configuration changes are required in this case.

      • Deprecated ewmhDesktopsLogHookCustom and ewmhDesktopsEventHookCustom; these are now replaced by a composable XMonad.Util.ExtensibleConf-based interface. Users are advised to just use the ewmh XConfig combinator and customize behaviour using the provided addEwmhWorkspaceSort, addEwmhWorkspaceRename functions, or better still, use integrations provided by modules such as XMonad.Actions.WorkspaceNames.

      This interface now additionally allows customization of what happens when clients request window activation. This can be used to ignore activation of annoying applications, to mark windows as urgent instead of focusing them, and more. There's also a new XMonad.Hooks.Focus module extending the ManageHook EDSL with useful combinators.

      • Ordering of windows that are set to _NET_CLIENT_LIST and _NET_CLIENT_LIST_STACKING was changed to be closer to the spec. From now these two lists will have differently sorted windows.
      • _NET_WM_STATE_DEMANDS_ATTENTION was added to the list of supported hints (as per _NET_SUPPORTED). This hint has long been understood by UrgencyHook. This enables certain applications (e.g. kitty terminal emulator) that check whether the hint is supported to use it.
    • All modules still exporting a defaultFoo constructor

      • All of these were now removed. You can use the re-exported def from Data.Default instead.
    • XMonad.Hooks.Script

      • execScriptHook now has an X constraint (was: MonadIO), due to changes in how the xmonad core handles XDG directories.
    • XMonad.Actions.WorkspaceNames

      • The type of getWorkspaceNames was changed to fit into the new ppRename field of PP.
    • XMonad.Hooks.StatusBar, XMonad.Hooks.StatusBar.PP (previously XMonad.Hooks.DynamicLog) and XMonad.Util.Run

      • spawnPipe no longer uses binary mode handles but defaults to the current locale encoding instead.

      dynamicLogString, the output of which usually goes directly into such a handle, no longer encodes its output in UTF-8, but returns a normal String of Unicode codepoints instead.

      When these two are used together, everything should continue to work as it always has, but in isolation behaviour might change.

      (To get the old spawnPipe behaviour, spawnPipeWithNoEncoding can now be used, and spawnPipeWithUtf8Encoding was added as well to force UTF-8 regardless of locale. These shouldn't normally be necessary, though.)

      • xmonadPropLog and xmonadPropLog' now encode the String in UTF-8. Again, no change when used together with dynamicLogString, but other uses of these in user configs might need to be adapted.
    • XMonad.Actions.TopicSpace

      • Deprecated the maxTopicHistory field, as well as the getLastFocusedTopics and setLastFocusedTopic functions. It is now recommended to directly use XMonad.Hooks.WorkspaceHistory instead.
      • Added TopicItem, as well as the helper functions topicNames, tiActions, tiDirs, noAction, and inHome for a more convenient specification of topics.
    • XMonad.Actions.CycleRecentWS

      • Changed the signature of recentWS to return a [WorkspaceId] instead of a [WindowSet], while cycleWindowSets and toggleWindowSets now take a function WindowSet -> [WorkspaceId] instead of one to [WindowSet] as their first argument. This fixes the interplay between this module and any layout that stores state.
    • XMonad.Layout.LayoutCombinators

      • Moved the alternative (|||) function and JumpToLayout to the xmonad core. They are re-exported by the module, but do not add any new functionality. NewSelect now exists as a deprecated type alias to Choose.
      • Removed the Wrap and NextLayoutNoWrap data constructors.
    • XMonad.Actions.CycleWS

      • Deprecated EmptyWS, HiddenWS, NonEmptyWS, HiddenNonEmptyWS, HiddenEmptyWS, AnyWS and WSTagGroup.
    • XMonad.Actions.GridSelect

      • colorRangeFromClassName now uses different hash function, so colors of inactive window tiles will be different (but still inside the provided color range).
    • XMonad.Actions.Search

      • Removed outdated isohunt search engine.
      • Updated URLs for codesearch, openstreetmap, and thesaurus search engines.
      • Added github search engine.

    πŸ†• New Modules

    • XMonad.Layout.FixedAspectRatio

      Layout modifier for user provided per-window aspect ratios.

    • XMonad.Hooks.TaffybarPagerHints

      Add a module that exports information about XMonads internal state that is not available through EWMH that is used by the taffybar status bar.

    • XMonad.Hooks.StatusBar.PP

      Originally contained inside XMonad.Hooks.DynamicLog, this module provides the pretty-printing abstraction and utilities, used primarly with logHook.

      Below are changes from XMonad.Hooks.DynamicLog, that now are included in this module:

      • Added shortenLeft function, like existing shorten but shortens by truncating from left instead of right. Useful for showing directories.
      • Added shorten' and shortenLeft' functions with customizable overflow markers.
      • Added filterOutWsPP for filtering out certain workspaces from being displayed.
      • Added xmobarBorder for creating borders around strings and xmobarFont for selecting an alternative font.
      • Added ppRename to PP, which makes it possible for extensions like workspaceNamesPP, marshallPP and/or clickablePP (which need to access the original WorkspaceId) to compose intuitively.
      • Added ppPrinters, WSPP and fallbackPrinters as a generalization of the ppCurrent, ppVisible… sextet, which makes it possible for extensions like copiesPP (which acts as if there was a ppHiddenWithCopies) to compose intuitively.
    • XMonad.Hooks.StatusBar

      This module provides a new interface that replaces XMonad.Hooks.DynamicLog, by providing composoble status bars. Supports property-based as well as pipe-based status bars.

    • XMonad.Util.Hacks

      A collection of hacks and fixes that should be easily acessible to users:

      • windowedFullscreenFix fixes fullscreen behaviour of chromium based applications when using windowed fullscreen.
      • javaHack helps when dealing with Java applications that might not work well with xmonad.
      • trayerAboveXmobarEventHook reliably stacks trayer on top of xmobar and below other windows
    • XMonad.Util.ActionCycle

      A module providing a simple way to implement "cycling" X actions, useful for things like alternating toggle-style keybindings.

    • XMonad.Actions.RotateSome

      Functions for rotating some elements around the stack while keeping others anchored in place. Useful in combination with layouts that dictate window visibility based on stack position, such as XMonad.Layout.LimitWindows.

      Export surfaceNext and surfacePrev actions, which treat the focused window and any hidden windows as a ring that can be rotated through the focused position.

      Export rotateSome, a pure function that rotates some elements around a stack while keeping others anchored in place.

    • XMonad.Actions.Sift

      Provide siftUp and siftDown actions, which behave like swapUp and swapDown but handle the wrapping case by exchanging the windows at either end of the stack instead of rotating the stack.

    • XMonad.Hooks.DynamicIcons

      Dynamically augment workspace names logged to a status bar via DynamicLog based on the contents (windows) of the workspace.

    • XMonad.Hooks.WindowSwallowing

      HandleEventHooks that implement window swallowing or sublayouting: Hide parent windows like terminals when opening other programs (like image viewers) from within them, restoring them once the child application closes.

    • XMonad.Actions.TiledWindowDragging

      An action that allows you to change the position of windows by dragging them around.

    • XMonad.Layout.ResizableThreeColumns

      A layout based on XMonad.Layout.ThreeColumns but with each slave window's height resizable.

    • XMonad.Layout.TallMastersCombo

      A layout combinator that support Shrink, Expand, and IncMasterN just as the Tall layout, and also support operations of two master windows: a main master, which is the original master window; a sub master, the first window of the second pane. This combinator can be nested, and has a good support for using XMonad.Layout.Tabbed as a sublayout.

    • XMonad.Actions.PerWindowKeys

      Create actions that run on a Query Bool, usually associated with conditions on a window, basis. Useful for creating bindings that are excluded or exclusive for some windows.

    • XMonad.Util.DynamicScratchpads

      Declare any window as a scratchpad on the fly. Once declared, the scratchpad behaves like XMonad.Util.NamedScratchpad.

    • XMonad.Prompt.Zsh

      A version of XMonad.Prompt.Shell that lets you use completions supplied by zsh.

    • XMonad.Util.ClickableWorkspaces

      Provides clickablePP, which when applied to the PP pretty-printer used by XMonad.Hooks.StatusBar.PP, will make the workspace tags clickable in XMobar (for switching focus).

    • XMonad.Layout.VoidBorders

      Provides a modifier that semi-permanently (requires manual intervention) disables borders for windows from the layout it modifies.

    • XMonad.Hooks.Focus

      Extends ManageHook EDSL to work on focused windows and current workspace.

    • XMonad.Config.LXQt

      This module provides a config suitable for use with the LXQt desktop environment.

    • XMonad.Prompt.OrgMode

      A prompt for interacting with org-mode. It can be used to quickly save TODOs, NOTEs, and the like with the additional capability to schedule/deadline a task, or use the primary selection as the contents of the note.

    • XMonad.Util.ExtensibleConf

      Extensible and composable configuration for contrib modules. Allows contrib modules to store custom configuration values inside XConfig. This lets them create custom hooks, ensure they hook into xmonad core only once, and possibly more.

    • XMonad.Hooks.Rescreen

      Custom hooks for screen (xrandr) configuration changes. These can be used to restart/reposition status bars or systrays automatically after xrandr, as well as to actually invoke xrandr or autorandr when an output is (dis)connected.

    • XMonad.Actions.EasyMotion

      A new module that allows selection of visible screens using a key chord. Inspired by vim-easymotion. See the animation in the vim-easymotion repo to get some idea of the functionality of this EasyMotion module.

    πŸ› Bug Fixes and Minor Changes

    • Add support for GHC 9.0.1.

    • XMonad.Actions.WithAll

      • Added killOthers, which kills all unfocused windows on the current workspace.
    • XMonad.Prompt.XMonad

      • Added xmonadPromptCT, which allows you to create an XMonad prompt with a custom title.
    • XMonad.Actions.DynamicWorkspaceGroups

      • Add support for XMonad.Actions.TopicSpace through viewTopicGroup and promptTopicGroupView.
    • XMonad.Actions.TreeSelect

      • Fix swapped green/blue in foreground when using Xft.
      • The spawned tree-select window now sets a WM_CLASS property. This allows other applications, like compositors, to properly match on it.
    • XMonad.Layout.Fullscreen

      • Add fullscreenSupportBorder which uses smartBorders to remove window borders when the window is fullscreen.
    • XMonad.Config.Mate

      • Split out the logout dialog and add a shutdown dialog. The default behavior remains the same but there are now mateLogout and mateShutdown actions available.
      • Add mod-d keybinding to open the Mate main menu.
    • XMonad.Actions.DynamicProjects

      • The changeProjectDirPrompt function respects the complCaseSensitivity field of XPConfig when performing directory completion.
      • modifyProject is now exported.
    • XMonad.Layout.WorkspaceDir

      • The changeDir function respects the complCaseSensitivity field of XPConfig when performing directory completion.
      • Chdir message is exported, so it's now possible to change the directory programmaticaly, not just via a user prompt.
    • XMonad.Prompt.Directory

      • Added directoryMultipleModes', like directoryMultipleModes with an additional ComplCaseSensitivity argument.
      • Directory completions are now sorted.
      • The Dir constructor now takes an additional ComplCaseSensitivity argument to indicate whether directory completion is case sensitive.
    • XMonad.Prompt.FuzzyMatch

      • fuzzySort will now accept cases where the input is not a subsequence of every completion.
    • XMonad.Prompt.Shell

      • Added getShellCompl', like getShellCompl with an additional ComplCaseSensitivity argument.
      • Added compgenDirectories and compgenFiles to get the directory/filename completion matches returned by the compgen shell builtin.
      • Added safeDirPrompt, which is like safePrompt, but optimized for the use-case of a program that needs a file as an argument.
    • XMonad.Prompt.Unicode

      • Reworked internally to call spawnPipe (asynchronous) instead of runProcessWithInput (synchronous), which fixes typeUnicodePrompt.
      • Now respects searchPredicate and sorter from user-supplied XPConfig.
    • XMonad.Hooks.DynamicLog

      • Added xmobarProp, for property-based alternative to xmobar.
      • Add the -dock argument to the dzen spawn arguments
      • The API for this module is frozen: this is now a compatibility wrapper.
      • References for this module are updated to point to X.H.StatusBar or X.H.StatusBar.PP
    • XMonad.Layout.BoringWindows

      • Added boring-aware swapUp, swapDown, siftUp, and siftDown functions.
      • Added markBoringEverywhere function, to mark the currently focused window boring on all layouts, when using XMonad.Actions.CopyWindow.
    • XMonad.Util.NamedScratchpad

      • Added two new exported functions to the module:
        • customRunNamedScratchpadAction (provides the option to customize the X () action the scratchpad is launched by)
        • spawnHereNamedScratchpadAction (uses XMonad.Actions.SpawnOn.spawnHere to initially start the scratchpad on the workspace it was launched on)
      • Deprecated namedScratchpadFilterOutWorkspace and namedScratchpadFilterOutWorkspacePP. Use XMonad.Util.WorkspaceCompare.filterOutWs respectively XMonad.Hooks.DynamicLog.filterOutWsPP instead.
      • Exported the scratchpadWorkspaceTag.
      • Added a new logHook nsHideOnFocusLoss for hiding scratchpads when they lose focus.
    • XMonad.Prompt.Window

      • Added allApplications function which maps application executable names to its underlying window.
      • Added a WithWindow constructor to WindowPrompt to allow executing actions of type Window -> X () on the chosen window.
    • XMonad.Prompt.WindowBringer

      • Added windowAppMap function which maps application executable names to its underlying window.
      • A new field windowFilter was added to the config, which allows the user to provide a function which will decide whether each window should be included in the window bringer menu.
    • XMonad.Actions.Search

      • The hoogle function now uses the new URL hoogle.haskell.org.
      • Added promptSearchBrowser' function to only suggest previous searches of the selected search engine (instead of all search engines).
    • XMonad.Layout.MouseResizableTile

      • When we calculate dragger widths, we first try to get the border width of the focused window, before failing over to using the initial borderWidth.
    • XMonad.Actions.CycleRecentWS

      • Added cycleRecentNonEmptyWS function which behaves like cycleRecentWS but is constrainded to non-empty workspaces.
      • Added toggleRecentWS and toggleRecentNonEmptyWS functions which toggle between the current and most recent workspace, and continue to toggle back and forth on repeated presses, rather than cycling through other workspaces.
      • Added recentWS function which allows the recency list to be filtered with a user-provided predicate.
    • XMonad.Layout.Hidden

      • Export HiddenWindows type constructor.
      • Export popHiddenWindow function restoring a specific window.
    • XMonad.Hooks.ManageDocks

      • Export AvoidStruts constructor
      • Restored compatibility with pre-0.13 configs by making the startup hook unnecessary for correct functioning (strut cache is initialized on-demand).

      This is a temporary measure, however. The individual hooks are now deprecated in favor of the docks combinator, xmonad --recompile now reports deprecation warnings, and the hooks will be removed soon.

      • Fixed ignoring of strut updates from override-redirect windows, which is default for xmobar.

      Previously, if one wanted xmobar to reposition itself after xrandr changes and have xmonad handle that repositioning, one would need to configure xmobar with overrideRedirect = False, which would disable lowering on start and thus cause other problems. This is no longer necessary.

    • XMonad.Hooks.ManageHelpers

      • Export doSink
      • Added doLower and doRaise
      • Added shiftToSame and clientLeader which allow a hook to be created that shifts a window to the workspace of other windows of the application (using either the WM_CLIENT_LEADER or _NET_WM_PID property).
      • Added windowTag
      • Added (^?), (~?) and ($?) operators as infix versions of isPrefixOf, isInfixOf and isSuffixOf working with ManageHooks.
    • XMonad.Util.EZConfig

      • Added support for XF86Bluetooth.
    • XMonad.Util.Loggers

      • Make battery and loadAvg distro-independent.
      • Added logTitleOnScreen, logCurrentOnScreen and logLayoutOnScreen as screen-specific variants of logTitle, logCurrent and logLayout.
      • Added logWhenActive to have loggers active only when a certain screen is active.
      • Added logConst to log a constant String, and logDefault (infix: .|) to combine loggers.
      • Added logTitles to log all window titles (focused and unfocused ones) on the focused workspace, as well as logTitlesOnScreen as a screen-specific variant thereof.
    • XMonad.Layout.Minimize

      • Export Minimize type constructor.
    • XMonad.Actions.WorkspaceNames

      • Added workspaceNamesEwmh which makes workspace names visible to external pagers.
    • XMonad.Util.PureX

      • Added focusWindow and focusNth which don't refresh (and thus possibly flicker) when they happen to be a no-op.
      • Added shiftWin as a refresh tracking version of W.shiftWin.
    • Several LayoutClass instances now have an additional Typeable constraint which may break some advanced configs. The upside is that we can now add Typeable to LayoutClass in XMonad.Core and make it possible to introspect the current layout and its modifiers.

    • XMonad.Actions.TopicSpace

      • switchTopic now correctly updates the last used topics.
      • setLastFocusedTopic will now check whether we have exceeded the maxTopicHistory and prune the topic history as necessary, as well as cons the given topic onto the list before filtering it.
      • Added switchNthLastFocusedExclude, which works like switchNthLastFocused but is able to exclude certain topics.
      • Added switchTopicWith, which works like switchTopic, but one is able to give setLastFocusedTopic a custom filtering function as well.
      • Instead of a hand-rolled history, use the one from XMonad.Hooks.WorkspaceHistory.
      • Added the screen-aware functions getLastFocusedTopicsByScreen and switchNthLastFocusedByScreen.
    • XMonad.Hooks.WorkspaceHistory

      • Added workspaceHistoryModify to modify the workspace history with a pure function.
      • Added workspaceHistoryHookExclude for excluding certain workspaces to ever enter the history.
    • XMonad.Util.DebugWindow

      • Fixed a bottom in debugWindow when used on windows with UTF8 encoded titles.
    • XMonad.Config.Xfce

      • Set terminal to xfce4-terminal.
    • XMonad.Hooks.WorkspaceCompare

      • Added filterOutWs for workspace filtering.
    • XMonad.Prompt

      • Accommodate completion of multiple words even when alwaysHighlight is enabled.
      • Made the history respect words that were "completed" by alwaysHighlight upon confirmation of the selection by the user.
      • Fixed a crash when focusing a new window while the prompt was up by allowing pointer events to pass through the custom prompt event loop.
      • The prompt now cycles through its suggestions if one hits the ends of the suggestion list and presses TAB again.
      • Added maxComplColumns field to XPConfig, to limit the number of columns in the completion window.
      • Redefine ComplCaseSensitivity to a proper sum type as opposed to a newtype wrapper around Bool.
    • XMonad.Actions.TreeSelect

      • Fixed a crash when focusing a new window while the tree select window was up by allowing pointer events to pass through the custom tree select event loop.
    • XMonad.Layout.NoBorders

      • Fixed handling of floating window borders in multihead setups that was broken since 0.14.
      • Added OnlyFloat constructor to Ambiguity to unconditionally remove all borders on floating windows.
    • XMonad.Hooks.UrgencyHook

      • It's now possible to clear urgency of selected windows only using the newly exported clearUrgents' function. Also, this and clearUrgents now clear the _NET_WM_STATE_DEMANDS_ATTENTION bit as well.
      • Added a variant of filterUrgencyHook that takes a generic Query Bool to select which windows should never be marked urgent.
      • Added askUrgent and a doAskUrgent manage hook helper for marking windows as urgent from inside of xmonad. This can be used as a less intrusive action for windows requesting focus.
    • XMonad.Hooks.ServerMode

      • To make it easier to use, the xmonadctl client is now included in scripts/.
    • XMonad.Layout.TrackFloating

      • Fixed a bug that prevented changing focus on inactive workspaces.
    • XMonad.Layout.Magnifier

      • Added magnifierczOff and magnifierczOff' for custom-size magnifiers that start out with magnifying disabled.
      • Added magnify as a more general combinator, including the ability to postpone magnifying until there are a certain number of windows on the workspace.
    • XMonad.Layout.Renamed

      • Added KeepWordsLeft and KeepWordsRight for keeping certain number of words in left or right direction in layout description.
    • XMonad.Hooks.WallpaperSetter

      • Added defWPNamesPng, which works like defWPNames but maps ws-name to ws-name.png instead of ws-name.jpg.
      • Added defWPNamesJpg as an alias to defWPNames and deprecated the latter.
    • XMonad.Layout.SubLayouts

      • Floating windows are no longer moved to the end of the window stack.
    • XMonad.Layout.BinarySpacePartition

      • Add the ability to increase/decrease the window size by a custom rational number. E.g: sendMessage $ ExpandTowardsBy L 0.02
    • XMonad.Layout.Decoration

      • The decoration window now sets a WM_CLASS property. This allows other applications, like compositors, to properly match on it.
    • XMonad.Layout.IndependentScreens

      • Fixed a bug where marshallPP always sorted workspace names lexically. This changes the default behaviour of marshallPPβ€”the given ppSort now operates in the physical workspace names. The documentation of marshallSort contains an example of how to get the old behaviour, where ppSort operates in virtual names, back.
      • Added workspacesOn for filtering workspaces on the current screen.
      • Added withScreen to specify names for a given single screen.
      • Added new aliases PhysicalWindowSpace and VirtualWindowSpace for a WindowSpace for easier to read function signatures.
      • Added a few useful utility functions related to simplify using the module; namely workspaceOnScreen, focusWindow', focusScreen, nthWorkspace, and withWspOnScreen.
      • Fixed wrong type-signature of onCurrentScreen.
    • XMonad.Actions.CopyWindow

      • Added copiesPP to make a PP aware of copies of the focused window.
    • XMonad.Actions.CycleWS

      • Added :&:, :|: and Not data constructors to WSType to logically combine predicates.
      • Added hiddenWS, emptyWS and anyWS to replace deprecated constructors.
      • Added ingoringWSs as a WSType predicate to skip workspaces having a tag in a given list.
    • XMonad.Actions.DynamicWorkspaceOrder

      • Added swapWithCurrent and swapOrder to the list of exported names.
    • XMonad.Actions.Submap, XMonad.Util.Ungrab:

      • Fixed issue with keyboard/pointer staying grabbed when a blocking action like runProcessWithInput was invoked.
    • XMonad.Actions.UpdateFocus

      • Added focusUnderPointer, that updates the focus based on pointer position, an inverse of X.A.UpdatePointer, which moves the mouse pointer to match the focused window). Together these can be used to ensure focus stays in sync with mouse.
    • XMonad.Layout.MultiToggle

      • Added isToggleActive for querying the toggle state of transformers. Useful to show the state in a status bar.
    • XMonad.Layout.Spacing

      • Removed deprecations for spacing, spacingWithEdge, smartSpacing, and smartSpacingWithEdge.
    • XMonad.Actions.DynamicWorkspaces

      • Fixed a system freeze when using X.A.CopyWindow.copy in combination with removeWorkspace.

Previous changes from v0.16

  • πŸ’₯ Breaking Changes

    • XMonad.Layout.Decoration
      • Added Theme record fields for controlling decoration border width for active/inactive/urgent windows.
    • XMonad.Prompt

      • Prompt ships a vim-like keymap, see vimLikeXPKeymap and vimLikeXPKeymap'. A reworked event loop supports new vim-like prompt actions.
      • Prompt supports dynamic colors. Colors are now specified by the XPColor type in XPState while XPConfig colors remain unchanged for backwards compatibility.
      • Fixes showCompletionOnTab.
      • The behavior of moveWord and 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.
    • XMonad.Util.Invisble

      • Requires MonadFail for Read instance

    πŸ†• New Modules

    • XMonad.Layout.TwoPanePersistent

      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.

    • XMonad.Util.ExclusiveScratchpads

      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.

    • XMonad.Actions.Prefix

      A module that allows the user to use an Emacs-style prefix argument (raw or numeric).

    πŸ› Bug Fixes and Minor Changes

    • XMonad.Layout.Tabbed

      tabbedLeft and tabbedRight will set their tabs' height and width according to decoHeight/decoWidth

    • XMonad.Prompt

      Added sorter to XPConfig used to sort the possible completions by how well they match the search string (example: XMonad.Prompt.FuzzyMatch).

      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.

    • XMonad.Prompt.Pass

      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.

      Added 'passGenerateAndCopyPrompt', which both generates a new password and copies it to the clipboard. These two actions are commonly desirable to take together, e.g. when establishing a new account.

      Made password prompts traverse symlinks when gathering password names for autocomplete.

    • XMonad.Actions.DynamicProjects

      Make the input directory read from the prompt in DynamicProjects 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 cd into foo/bar, instead of ~/bar as expected.

    • XMonad.Actions.DynamicWorkspaceOrder

      Add a version of withNthWorkspace that takes a [WorkspaceId] -> [WorkspaceId] transformation to apply over the list of workspace tags resulting from the dynamic order.

    • XMonad.Actions.GroupNavigation

      Add a utility function isOnAnyVisibleWS :: Query Bool to allow easy cycling between all windows on all visible workspaces.

    • XMonad.Hooks.WallpaperSetter

      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.

    • XMonad.Util.Themes

      Add adwaitaTheme and adwaitaDarkTheme to match their respective GTK themes.

    • 'XMonad.Layout.BinarySpacePartition'

      Add a new SplitShiftDirectional message that allows moving windows by splitting its neighbours.

    • XMonad.Prompt.FuzzyMatch

      Make fuzzy sort show shorter strings first.