
xmonad-contrib
Contributed modules for xmonad
Updated XMonad.Doc.Extending to include detailed documentation for XMonad.Prompt.FuzzyMatch and XMonad.Prompt.Unicode. This ensures users have access to better guidance on configuring and utilizing these prompt features. These modules are now properly highlighted for anyone looking to enhance their XMonad setup.
This fixes an edge case in XMonad.Prompt.FuzzyMatch where fuzzySort assumed every candidate matched the input and could fail when that wasn't true. The ranking logic now treats non-matching completions as the worst possible match instead of trying to take the minimum of an empty result set, and the behavior is documented in CHANGES.md. In practice, prompt completion becomes more robust when mixed or partially filtered candidate lists are passed through the fuzzy sorter.
This updates XMonad.Prompt.Unicode to actually use the caller’s XPConfig matching and sorting behavior instead of hardcoding its own search logic. The prompt now threads searchPredicate into Unicode name matching and adapts the configured sorter to work case-insensitively with the uppercase Unicode data it searches against. In practice, custom completion behavior like fuzzy matching or alternate ranking now works for Unicode prompts too, making them consistent with the rest of the prompt ecosystem.
This change exposes clickableWrap directly instead of only clickablePP, which makes ClickableWorkspaces usable in configs that rewrite WorkspaceIds before display. That matters for setups like IndependentScreens or NamedWorkspaces, where the displayed workspace label differs from the internal one and needs custom mapping before adding click actions. The result is a small but useful API improvement: users can now compose clickable workspace labels without reimplementing the wrapping logic themselves. პრაქტically, more custom xmobar/status-bar configs can stay both clean and clickable.
This change replaces the synchronous runProcessWithInput call in XMonad.Prompt.Unicode with an asynchronous spawnPipe, then writes the selected character directly to the spawned process's stdin. That matters for typeUnicodePrompt, which uses xdotool --file - and could fail or behave incorrectly under the old process model. The changelog was updated to document the fix, and in practice Unicode insertion should now work more reliably when typing characters into the active window.
This update adds a new layout modifier, XMonad.Layout.VoidBorders, which forces window border widths to zero. Unlike the existing XMonad.Layout.NoBorders, this implementation does not attempt to restore border widths, effectively eliminating the "border flash" artifacts that can occur during layout transitions. Users looking for a cleaner aesthetic without residual border flickering will find this a useful, albeit specialized, tool. 
This change fixes a packaging mistake in xmonad-contrib.cabal where XMonad.Util.ClickableWorkspaces existed but was not listed as an exposed module. As a result, users trying to import it would hit a compilation error even though the implementation was present in the source tree. Updating the exposed-modules list makes the utility available as intended and unblocks downstream configs immediately.
This change threads the newer complCaseSensitivity field through existing prompt-based APIs instead of maintaining separate primed variants that took an explicit case-sensitivity argument. In practice, DynamicProjects, WorkspaceDir, and Prompt.Directory now respect the setting already present in XPConfig, and several redundant ' helper functions were removed from the public surface. The result is a smaller, more consistent API with directory completion behavior controlled in one place. Practical effect: users configure case sensitivity once in XPConfig and prompts behave accordingly.
This change extends XPConfig with a new complCaseSensitivity field, giving prompt users a first-class way to control whether completion matching respects case. The default preserves existing behavior with ComplCaseSensitive True, so current setups should continue working unchanged while making future customization easier. Practically, this opens up cleaner configuration for prompt completion behavior without requiring downstream workarounds.
This commit adds a small but useful usage example to XMonad/Layout/WorkspaceDir.hs, showing how to bind changeDir' with ComplCaseSensitive False for case-insensitive prompt completion. There’s no runtime behavior change here, but it makes a less-obvious configuration option easier for users to find directly in the module docs. The practical effect is smoother setup for anyone customizing workspace directory prompts.
This change adds new prompt variants in XMonad.Actions.DynamicProjects that accept a ComplCaseSensitivity parameter, while keeping the existing APIs defaulting to case-sensitive behavior for compatibility. The prompt internals were updated to thread that setting through both project-name completion and directory completion, including the directory mode used when changing a project's working directory. In practice, users can now opt into case-insensitive matching without breaking existing configs, making project switching and directory selection more forgiving.
This change extends XMonad.Prompt.Directory by adding a ComplCaseSensitivity field to the Dir constructor, which makes completion case-sensitivity configurable in places where multi-mode prompts only receive a Dir through completionFunction. The author notes that single-mode prompts could support this without an API break, but multi-mode prompts could not, so the constructor had to grow to carry the new setting. For downstream code, this means any direct Dir construction must be updated, but in return prompt completion behavior becomes more flexible and explicit. Practical effect: multi-mode directory prompts can now opt into the right case-sensitivity semantics instead of being locked into one behavior.
This change introduces ComplCaseSensitivity-aware variants of the existing prompt completion functions, including changeDir', directoryPrompt', and getShellCompl', while keeping the original exported functions case-sensitive by default for compatibility. The shell prompt code now centralizes compgen-based file and directory completion in new reusable helpers, and XMonad.Prompt.Directory reuses that logic instead of duplicating it. In practice, callers can now enable case-insensitive path completion where Bash/Readline supports it, making prompts more forgiving without changing current behavior for existing configs.

