aboutsummaryrefslogtreecommitdiff
path: root/Utility/FreeDesktop.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-08-02 23:51:38 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-08-02 23:51:38 -0400
commit13a7362a1a6264689519a8aa685c908ec5660129 (patch)
tree669e5052c029ac7708135a71bb9c20afebdfe874 /Utility/FreeDesktop.hs
parente6603f3b1177204c3b93be6a820103f3bfbde322 (diff)
fix xdg desktop dir lookup code
had to use xdg-user-dir to query it, since it's in a shell format file. Fall back to
Diffstat (limited to 'Utility/FreeDesktop.hs')
-rw-r--r--Utility/FreeDesktop.hs17
1 files changed, 15 insertions, 2 deletions
diff --git a/Utility/FreeDesktop.hs b/Utility/FreeDesktop.hs
index f2168077a..434537a6d 100644
--- a/Utility/FreeDesktop.hs
+++ b/Utility/FreeDesktop.hs
@@ -25,12 +25,16 @@ module Utility.FreeDesktop (
import Utility.Exception
import Utility.Path
+import Utility.Process
+import Utility.PartialPrelude
import System.Environment
import System.Directory
import System.FilePath
import Data.List
import Data.String.Utils
+import Control.Applicative
+import Control.Monad (liftM)
type DesktopEntry = [(Key, Value)]
@@ -104,9 +108,18 @@ userDataDir = xdgEnvHome "DATA_HOME" ".local/share"
userConfigDir :: IO FilePath
userConfigDir = xdgEnvHome "CONFIG_HOME" ".config"
-{- Directory for the user's Desktop, may be localized. -}
+{- Directory for the user's Desktop, may be localized.
+ -
+ - This is not looked up very fast; the config file is in a shell format
+ - that is best parsed by shell, so xdg-user-dir is used, with a fallback
+ - to ~/Desktop. -}
userDesktopDir :: IO FilePath
-userDesktopDir = xdgEnvHome "DESKTOP_DIR" "Desktop"
+userDesktopDir = maybe fallback return =<< (parse <$> xdg_user_dir)
+ where
+ parse = maybe Nothing (headMaybe . lines)
+ xdg_user_dir = catchMaybeIO $
+ readProcess "xdg-user-dir" ["DESKTOP"]
+ fallback = xdgEnvHome "DESKTOP_DIR" "Desktop"
xdgEnvHome :: String -> String -> IO String
xdgEnvHome envbase homedef = do