summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--XMonad/Core.hs5
-rw-r--r--xmonad.cabal3
2 files changed, 6 insertions, 2 deletions
diff --git a/XMonad/Core.hs b/XMonad/Core.hs
index 5fe8688..b3593a0 100644
--- a/XMonad/Core.hs
+++ b/XMonad/Core.hs
@@ -32,6 +32,7 @@ module XMonad.Core (
import XMonad.StackSet hiding (modify)
import Prelude hiding ( catch )
+import Codec.Binary.UTF8.String (encodeString)
import Control.Exception.Extensible (catch, fromException, try, bracket, throw, finally, SomeException(..))
import Control.Applicative
import Control.Monad.State
@@ -384,12 +385,14 @@ catchIO f = io (f `catch` \(SomeException e) -> hPrint stderr e >> hFlush stderr
-- | spawn. Launch an external application. Specifically, it double-forks and
-- runs the 'String' you pass as a command to \/bin\/sh.
+--
+-- Note this function assumes your locale uses utf8.
spawn :: MonadIO m => String -> m ()
spawn x = spawnPID x >> return ()
-- | Like 'spawn', but returns the 'ProcessID' of the launched application
spawnPID :: MonadIO m => String -> m ProcessID
-spawnPID x = xfork $ executeFile "/bin/sh" False ["-c", x] Nothing
+spawnPID x = xfork $ executeFile "/bin/sh" False ["-c", encodeString x] Nothing
-- | A replacement for 'forkProcess' which resets default signal handlers.
xfork :: MonadIO m => IO () -> m ProcessID
diff --git a/xmonad.cabal b/xmonad.cabal
index cc37051..9cfd671 100644
--- a/xmonad.cabal
+++ b/xmonad.cabal
@@ -46,7 +46,8 @@ library
build-depends: base < 5 && >=3, containers, directory, process, filepath, extensible-exceptions
else
build-depends: base < 3
- build-depends: X11>=1.5.0.0 && < 1.6, mtl, unix
+ build-depends: X11>=1.5.0.0 && < 1.6, mtl, unix,
+ utf8-string >= 0.3 && < 0.4
if true
ghc-options: -funbox-strict-fields -Wall