From 89bae8aad73db8fe9e11da7d515f0b236e7fea51 Mon Sep 17 00:00:00 2001 From: tv Date: Wed, 6 Apr 2022 15:30:43 +0200 Subject: shutdown: add xmonad-0.17 compatibility --- XMonad/Stockholm/Shutdown.hs | 39 ++++++++++++++++++++++++++++++++++++--- xmonad-stockholm.cabal | 3 ++- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/XMonad/Stockholm/Shutdown.hs b/XMonad/Stockholm/Shutdown.hs index 373214e..8c0a657 100644 --- a/XMonad/Stockholm/Shutdown.hs +++ b/XMonad/Stockholm/Shutdown.hs @@ -6,17 +6,50 @@ module XMonad.Stockholm.Shutdown ) where +import Control.Applicative ((<|>), empty) import Control.Concurrent (threadDelay) -import Control.Monad (forever, when) +import Control.Monad (forever, guard, when) import Data.Monoid (All(All)) +import System.Directory (XdgDirectory(XdgData), createDirectoryIfMissing, doesFileExist, getAppUserDataDirectory, getXdgDirectory) import System.Exit (exitSuccess) +import System.Environment (lookupEnv) import System.FilePath (()) import System.IO.Error (isDoesNotExistError, tryIOError) import System.IO (hPutStrLn, stderr) import System.Posix.Process (getProcessID) import System.Posix.Signals (nullSignal, signalProcess) import System.Posix.Types (ProcessID) -import XMonad +import XMonad hiding (getXMonadDataDir) + + +-- XXX this is for compatibility with both xmonad<0.17 and xmonad>=0.17 +getXMonadDataDir :: IO String +getXMonadDataDir = xmEnvDir <|> xmDir <|> xdgDir + where + -- | Check for xmonad's environment variables first + xmEnvDir :: IO String + xmEnvDir = + maybe empty pure =<< lookupEnv "XMONAD_DATA_DIR" + + -- | Check whether the config file or a build script is in the + -- @~\/.xmonad@ directory + xmDir :: IO String + xmDir = do + d <- getAppUserDataDirectory "xmonad" + conf <- doesFileExist $ d "xmonad.hs" + build <- doesFileExist $ d "build" + pid <- doesFileExist $ d "xmonad.pid" + + -- Place *everything* in ~/.xmonad if yes + guard $ conf || build || pid + pure d + + -- | Use XDG directories as a fallback + xdgDir :: IO String + xdgDir = do + d <- getXdgDirectory XdgData "xmonad" + d <$ createDirectoryIfMissing True d + newShutdownEventHandler :: IO (Event -> X All) newShutdownEventHandler = do @@ -65,7 +98,7 @@ waitProcess pid = forever (signalProcess nullSignal pid >> threadDelay 10000) -- PID file stuff -- -getProcessIDFileName :: (Functor m, MonadIO m) => m FilePath +getProcessIDFileName :: IO FilePath getProcessIDFileName = ( "xmonad.pid") <$> getXMonadDataDir writeProcessIDToFile :: IO () diff --git a/xmonad-stockholm.cabal b/xmonad-stockholm.cabal index 780cd81..b14a12c 100644 --- a/xmonad-stockholm.cabal +++ b/xmonad-stockholm.cabal @@ -3,12 +3,13 @@ Build-Type: Simple Cabal-Version: >= 1.2 License: MIT Name: xmonad-stockholm -Version: 1.3.0 +Version: 1.3.1 Library Build-Depends: base, containers, + directory, filepath, unix, X11, -- cgit v1.2.3