For many (10+) years, we had a cascade of ugly workarounds: * X.U.Run.spawnPipe returned a binary handle, so the String passed to it must have been encoded by C.B.UTF8.String.encodeString * X.H.DynamicLog.dynamicLogString therefore returned such an encoded String, so one could use it directly in a hPutStrLn, but literal Strings wouldn't work * xmonadPropLog' also expected an encoded String to make it easier to use together with dynamicLogString, again breaking usage with String literals and other normal unicode Strings Then in1d0eaddc25
Sibi fixed spawnPipe to return a handle usable with normal Strings, which then obviously broke the entire cascade. But, instead of using the opportunity to remove all the ugly workarounds, he decided to add some more on top, so now spawnPipe with dynamicLogString outputs doubly encoded UTF-8 and xmobar has a hack to strip this double encoding (https://github.com/jaor/xmobar/pull/482), which only works when XFT is in use and breaks on some long unicode codepoints. :-( There is a better way: make everything just use normal Strings and only encode when it goes out the wire. This means dynamicLogString can be freely mixed with String literals, manual uses of xmonadPropLog' don't need encodeString, and everything just works nicely. This obviously breaks configs that used some of these pieces in isolation (like mine), but that's a small price to pay. After all, right now all users of spawnPipe/dynamicLogString are getting doubly encoded UTF-8 which might or might not work in xmobar and probably breaks horribly everywhere else, so this fix should be a clear improvement. :-) Fixes:1d0eaddc25
("Make spawnPipe to use system's locale encoding") Fixes: https://github.com/xmonad/xmonad-contrib/issues/377 Fixes: https://github.com/jaor/xmobar/issues/476 Related: https://github.com/xmonad/xmonad-contrib/pull/334 Related: https://github.com/jaor/xmobar/pull/482
xmonad-contrib: Third Party Extensions to the xmonad Window Manager
You need the ghc compiler and xmonad window manager installed in order to use these extensions.
For installation and configuration instructions, please see the xmonad website, the documents included with the xmonad source distribution, and the online haddock documentation.
Getting or Updating XMonadContrib
-
Latest release: https://hackage.haskell.org/package/xmonad-contrib
-
Git version: https://github.com/xmonad/xmonad-contrib
(To use git xmonad-contrib you must also use the git version of xmonad.)
Contributing
Haskell code contributed to this repo should live under the
appropriate subdivision of the XMonad
namespace (currently includes
Actions
, Config
, Hooks
, Layout
, Prompt
, and Util
). For
example, to use the Grid layout, one would import:
XMonad.Layout.Grid
For further details, see the documentation for the
XMonad.Doc.Developing
module, XMonad's CONTRIBUTING.md and the xmonad website.
License
Code submitted to the contrib repo is licensed under the same license as xmonad itself, with copyright held by the authors.