aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MANUAL.txt19
-rw-r--r--pandoc.cabal4
-rw-r--r--src/Text/Pandoc/App.hs18
-rw-r--r--src/Text/Pandoc/App/CommandLineOptions.hs14
-rw-r--r--test/command/lua-pandoc-state.md2
5 files changed, 27 insertions, 30 deletions
diff --git a/MANUAL.txt b/MANUAL.txt
index 8ef6c54e3..50ca91300 100644
--- a/MANUAL.txt
+++ b/MANUAL.txt
@@ -349,18 +349,13 @@ General options {.options}
: Specify the user data directory to search for pandoc data files.
If this option is not specified, the default user data directory
- will be used. This is, in UNIX:
-
- $HOME/.pandoc
-
- in Windows XP:
-
- C:\Documents And Settings\USERNAME\Application Data\pandoc
-
- and in Windows Vista or later:
-
- C:\Users\USERNAME\AppData\Roaming\pandoc
-
+ will be used. On \*nix and macOS systems this will be the `pandoc`
+ subdirectory of the XDG data directory (by default,
+ `$HOME/.local/share`, overridable by setting the `XDG_DATA_HOME`
+ environment variable). If that directory does not exist,
+ `$HOME/.pandoc` will be used (for backwards compatibility).
+ In Windows the default user data directory is
+ `C:\Users\USERNAME\AppData\Roaming\pandoc`.
You can find the default user data directory on your system by
looking at the output of `pandoc --version`.
A `reference.odt`, `reference.docx`, `epub.css`, `templates`,
diff --git a/pandoc.cabal b/pandoc.cabal
index 507136790..80b1b8ec7 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -363,7 +363,7 @@ library
exceptions >= 0.8 && < 0.11,
filepath >= 1.1 && < 1.5,
process >= 1.2.3 && < 1.7,
- directory >= 1 && < 1.4,
+ directory >= 1.2.3 && < 1.4,
bytestring >= 0.9 && < 0.11,
text >= 1.1.1.0 && < 1.3,
time >= 1.5 && < 1.10,
@@ -661,7 +661,7 @@ test-suite test-pandoc
base64-bytestring >= 0.1 && < 1.1,
text >= 1.1.1.0 && < 1.3,
time >= 1.5 && < 1.10,
- directory >= 1 && < 1.4,
+ directory >= 1.2.3 && < 1.4,
filepath >= 1.1 && < 1.5,
hslua >= 1.0 && < 1.1,
process >= 1.2.3 && < 1.7,
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.",
diff --git a/test/command/lua-pandoc-state.md b/test/command/lua-pandoc-state.md
index 33045f64a..2aece619b 100644
--- a/test/command/lua-pandoc-state.md
+++ b/test/command/lua-pandoc-state.md
@@ -1,5 +1,5 @@
```
-% pandoc --lua-filter=command/lua-pandoc-state.lua
+% pandoc --lua-filter=command/lua-pandoc-state.lua --data-dir=foo
Hello
^D
# input files: 0