@@ -38,7 +38,7 @@ import qualified Data.Text.Lazy.Encoding as TE
3838import qualified Data.Text.Encoding.Error as TE
3939import qualified Data.Text.Encoding.Error as TSE
4040import Network.URI (URI (..), parseURI)
41−import System.Directory (getAppUserDataDirectory)
41+import System.Directory (doesDirectoryExist)
4242import System.Exit (exitSuccess)
4343import System.FilePath
4444import System.IO (nativeNewline, stdout)
@@ -55,7 +55,8 @@ import Text.Pandoc.PDF (makePDF)
5555import Text.Pandoc.Readers.Markdown (yamlToMeta)
5656import Text.Pandoc.SelfContained (makeDataURI, makeSelfContained)
5757import Text.Pandoc.Shared (eastAsianLineBreakFilter, stripEmptyParagraphs,
58− headerShift, isURI, tabFilter, uriPathToPath, filterIpynbOutput)
58+ headerShift, isURI, tabFilter, uriPathToPath, filterIpynbOutput,
59+ defaultUserDataDirs)
5960import qualified Text.Pandoc.UTF8 as UTF8
6061#ifndef _WINDOWS
6162import System.Posix.IO (stdOutput)
@@ -89,10 +90,15 @@ convertWithOpts opts = do
8990 | otherwise -> xs
9091
9192 datadir <- case optDataDir opts of
92− Nothing -> E.catch
93− (Just <$> getAppUserDataDirectory "pandoc")
94− (\e -> let _ = (e :: E.SomeException)
95− in return Nothing)
93+ Nothing -> do
94+ ds <- defaultUserDataDirs
95+ let selectUserDataDir [] = return Nothing
96+ selectUserDataDir (dir:dirs) = do
97+ exists <- doesDirectoryExist dir
98+ if exists
99+ then return (Just dir)
100+ else selectUserDataDir dirs
101+ selectUserDataDir ds
96102 Just _ -> return $ optDataDir opts
97103
98104 -- assign reader and writer based on options and filenames