From 0bed0ab5a308f5e72a01fa9bee76488556288862 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 2 Mar 2019 15:03:59 -0800 Subject: Use XDG data directory for user data directory. Instead of `$HOME/.pandoc`, the default user data directory is now `$XDG_DATA_HOME/pandoc`, where `XDG_DATA_HOME` defaults to `$HOME/.local/share` but can be overridden by setting the environment variable. If this directory is missing, then `$HOME/.pandoc` is searched instead, for backwards compatibility. However, we recommend moving local pandoc data files from `$HOME/.pandoc` to `$HOME/.local/share/pandoc`. On Windows the default user data directory remains the same. Closes #3582. --- src/Text/Pandoc/App.hs | 18 ++++++++++++------ src/Text/Pandoc/App/CommandLineOptions.hs | 14 +++++--------- 2 files changed, 17 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/Text/Pandoc/App.hs b/src/Text/Pandoc/App.hs index 6718617e1..b0527cd79 100644 --- a/src/Text/Pandoc/App.hs +++ b/src/Text/Pandoc/App.hs @@ -38,7 +38,7 @@ import qualified Data.Text.Lazy.Encoding as TE import qualified Data.Text.Encoding.Error as TE import qualified Data.Text.Encoding.Error as TSE import Network.URI (URI (..), parseURI) -import System.Directory (getAppUserDataDirectory) +import System.Directory (doesDirectoryExist) import System.Exit (exitSuccess) import System.FilePath import System.IO (nativeNewline, stdout) @@ -55,7 +55,8 @@ import Text.Pandoc.PDF (makePDF) import Text.Pandoc.Readers.Markdown (yamlToMeta) import Text.Pandoc.SelfContained (makeDataURI, makeSelfContained) import Text.Pandoc.Shared (eastAsianLineBreakFilter, stripEmptyParagraphs, - headerShift, isURI, tabFilter, uriPathToPath, filterIpynbOutput) + headerShift, isURI, tabFilter, uriPathToPath, filterIpynbOutput, + defaultUserDataDirs) import qualified Text.Pandoc.UTF8 as UTF8 #ifndef _WINDOWS import System.Posix.IO (stdOutput) @@ -89,10 +90,15 @@ convertWithOpts opts = do | otherwise -> xs datadir <- case optDataDir opts of - Nothing -> E.catch - (Just <$> getAppUserDataDirectory "pandoc") - (\e -> let _ = (e :: E.SomeException) - in return Nothing) + Nothing -> do + ds <- defaultUserDataDirs + let selectUserDataDir [] = return Nothing + selectUserDataDir (dir:dirs) = do + exists <- doesDirectoryExist dir + if exists + then return (Just dir) + else selectUserDataDir dirs + selectUserDataDir ds Just _ -> return $ optDataDir opts -- assign reader and writer based on options and filenames diff --git a/src/Text/Pandoc/App/CommandLineOptions.hs b/src/Text/Pandoc/App/CommandLineOptions.hs index 7f05418d9..36c68057c 100644 --- a/src/Text/Pandoc/App/CommandLineOptions.hs +++ b/src/Text/Pandoc/App/CommandLineOptions.hs @@ -46,15 +46,14 @@ import Text.Pandoc.App.Opt (Opt (..), LineEnding (..)) import Text.Pandoc.Filter (Filter (..)) import Text.Pandoc.Highlighting (highlightingStyles) import Text.Pandoc.Writers.Math (defaultMathJaxURL, defaultKaTeXURL) -import Text.Pandoc.Shared (ordNub, safeRead) +import Text.Pandoc.Shared (ordNub, safeRead, defaultUserDataDirs) import Text.Printf #ifdef EMBED_DATA_FILES import Text.Pandoc.Data (dataFiles) -import System.Directory (getAppUserDataDirectory) #else import Paths_pandoc (getDataDir) -import System.Directory (getAppUserDataDirectory, getDirectoryContents) +import System.Directory (getDirectoryContents) #endif import qualified Control.Exception as E @@ -837,13 +836,11 @@ options = (NoArg (\_ -> do prg <- getProgName - defaultDatadir <- E.catch - (getAppUserDataDirectory "pandoc") - (\e -> let _ = (e :: E.SomeException) - in return "") + defaultDatadirs <- defaultUserDataDirs UTF8.hPutStrLn stdout (prg ++ " " ++ pandocVersion ++ compileInfo ++ "\nDefault user data directory: " ++ - defaultDatadir ++ copyrightMessage) + intercalate " or " defaultDatadirs ++ + ('\n':copyrightMessage)) exitSuccess )) "" -- "Print version" @@ -872,7 +869,6 @@ usageMessage programName = usageInfo (programName ++ " [OPTIONS] [FILES]") copyrightMessage :: String copyrightMessage = intercalate "\n" [ - "", "Copyright (C) 2006-2019 John MacFarlane", "Web: http://pandoc.org", "This is free software; see the source for copying conditions.", -- cgit v1.2.3