@@ -3,7 +3,6 @@
33{-# LANGUAGE DeriveDataTypeable #-}
44{-# LANGUAGE FlexibleContexts #-}
55{-# LANGUAGE MultiParamTypeClasses #-}
6−
76{-# LANGUAGE ScopedTypeVariables #-}
87{-# LANGUAGE ViewPatterns #-}
98{-# LANGUAGE FlexibleInstances #-}
@@ -90,6 +89,8 @@ module Text.Pandoc.Shared (
9089 safeRead,
9190 -- * Temp directory
9291 withTempDir,
92+ -- * User data directory
93+ defaultUserDataDirs,
9394 -- * Version
9495 pandocVersion
9596 ) where
@@ -910,3 +911,18 @@ withTempDir =
910911#else
911912 withSystemTempDirectory
912913#endif
914+
915+--
916+-- User data directory
917+--
918+
919+-- | Return appropriate user data directory for platform. We use
920+-- XDG_DATA_HOME (or its default value), but fall back to the
921+-- legacy user data directory ($HOME/.pandoc on *nix) if this is
922+-- missing.
923+defaultUserDataDirs :: IO [FilePath]
924+defaultUserDataDirs = E.catch (do
925+ xdgDir <- getXdgDirectory XdgData "pandoc"
926+ legacyDir <- getAppUserDataDirectory "pandoc"
927+ return $ ordNub [xdgDir, legacyDir])
928+ (\(_ :: E.SomeException) -> return [])