diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2022-10-30 21:53:33 +0100 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2022-10-30 21:53:41 +0100 |
commit | 616934c3aad73a2ef8390975151c945577ad49cb (patch) | |
tree | 194367fc5b4a667445a1e66c2ccc96bb64479910 | |
parent | complete fromRight. (diff) | |
download | vimwiki-scripts-616934c3aad73a2ef8390975151c945577ad49cb.tar.gz vimwiki-scripts-616934c3aad73a2ef8390975151c945577ad49cb.tar.xz |
Find data files in multiple places.
-rw-r--r-- | hs/Html.hs | 37 |
1 files changed, 33 insertions, 4 deletions
@@ -17,6 +17,7 @@ import System.FilePath , dropExtension , takeBaseName ) +import Control.Lens (_2) import Control.Lens.Operators hiding ((<.>)) import Control.Lens.Setter (ASetter) @@ -36,8 +37,12 @@ import Data.Text.Compat (PandocStr, conv, from) import Network.URI hiding (query) -import System.Directory (copyFile, createDirectoryIfMissing) -import System.Environment.XDG.BaseDir (getUserConfigDir) +import System.Directory (copyFile, createDirectoryIfMissing, doesFileExist) +import System.Environment.XDG.BaseDir + ( getUserConfigDir + , getUserDataDir + , getSystemDataDirs + ) import Text.Blaze.Html5 (Html, toHtml, (!), textValue, docTypeHtml) import qualified Text.Blaze.Html5 as H @@ -267,6 +272,24 @@ stripTrailing c s | c == last s = init s | otherwise = s + +dup a = (a, a) + +filterM :: Monad m => (a -> m Bool) -> [a] -> m [a] +filterM f = fmap (fmap fst) + . fmap (filter snd) + . mapM sequence + . fmap (_2 %~ f) + . fmap dup + +copyFromDatadir :: FilePath -> [FilePath] -> FilePath -> IO () +copyFromDatadir filename datadirs destination = do + let candidates = datadirs <&> (</> filename) + existing <- filterM doesFileExist candidates + let source = head existing + copyFile source destination + + main = do args <- parseCmdline @@ -306,8 +329,14 @@ main = do createDirectoryIfMissing True $ conf ^. data' . outputDir - copyFile "style.css" $ (conf ^. (data' . outputDir)) <> "/style.css" - copyFile "script.js" $ (conf ^. (data' . outputDir)) <> "/script.js" + userdd <- getUserDataDir "vimwiki" + systemdds <- getSystemDataDirs "vimwiki" + let dataDirs = [ "." + , userdd + ] ++ systemdds + let od = conf ^. (data' . outputDir) + copyFromDatadir "style.css" dataDirs $ od </> "style.css" + copyFromDatadir "script.js" dataDirs $ od </> "script.js" -- What each page links to -- forwardLinks :: [(FilePath, [String])] |