tldr 0.4.0.1 → 0.4.0.2
raw patch · 5 files changed
+67/−52 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG.md +7/−1
- README.md +2/−4
- app/Main.hs +55/−44
- src/Tldr.hs +2/−2
- tldr.cabal +1/−1
CHANGELOG.md view
@@ -1,4 +1,10 @@-# 0.4.0.1+# 0.5.0++* Obey XdgData for storing the files.+* Also search pages from sunos directory now.+* Support subcommansds ie. tldr git submodule will now work.++# 0.4.0.2 * Fix double initialization bug. Credits to @Kove-W-O-Salter
README.md view
@@ -1,7 +1,7 @@ # tldr -[](https://travis-ci.org/psibi/tldr-hs)-[](https://ci.appveyor.com/project/psibi/tldr-hs/branch/master)+[](https://dev.azure.com/psibi2000/tldr-hs/_build/latest?definitionId=5?branchName=master)+ [](https://hackage.haskell.org/package/tldr) [](http://stackage.org/nightly/package/tldr) [](http://stackage.org/lts/package/tldr)@@ -32,5 +32,3 @@ ## Snapshot --
app/Main.hs view
@@ -1,60 +1,59 @@-{-#LANGUAGE CPP#-}-{-#LANGUAGE ScopedTypeVariables#-}+{-# LANGUAGE ScopedTypeVariables #-} module Main where -import Tldr-import Options.Applicative hiding ((<>))-import Data.Semigroup ((<>)) import Control.Monad+import Data.List (intercalate, isPrefixOf)+import Data.Semigroup ((<>))+import Data.Version (showVersion)+import GHC.IO.Handle.FD (stdout)+import Options.Applicative hiding ((<>))+import Paths_tldr (version) import System.Directory+import System.Environment (getArgs, withArgs) import System.FilePath import System.Process.Typed-import System.Environment (getArgs, withArgs)-import GHC.IO.Handle.FD (stdout)-import Paths_tldr (version)-import Data.Version (showVersion)+import Tldr data TldrOpts = TldrOpts { pageName :: String } deriving (Show) tldrDirName :: String-tldrDirName = ".tldr"+tldrDirName = "tldr" repoHttpsUrl :: String repoHttpsUrl = "https://github.com/tldr-pages/tldr.git" checkDirs :: [String]-checkDirs = ["common", "linux", "osx"]+checkDirs = ["common", "linux", "osx", "windows", "sunos"] tldrInitialized :: IO Bool tldrInitialized = do- homeDir <- getHomeDirectory- let dir1 = homeDir </> tldrDirName- dir2 = homeDir </> tldrDirName </> "tldr"- pages = homeDir </> tldrDirName </> "tldr" </> "pages"- exists <- mapM doesDirectoryExist [dir1, dir2, pages]+ dataDir <- getXdgDirectory XdgData tldrDirName+ let dir2 = dataDir </> "tldr"+ pages = dataDir </> "tldr" </> "pages"+ exists <- mapM doesDirectoryExist [dataDir, dir2, pages] return $ all (== True) exists initializeTldrPages :: IO () initializeTldrPages = do initialized <- tldrInitialized- initialized <- tldrInitialized unless initialized $ do- homeDir <- getHomeDirectory- let cloneDir = homeDir </> tldrDirName- runProcess_ $ proc "mkdir" [cloneDir]- runProcess_ $ setWorkingDir cloneDir $ proc "git" ["clone", repoHttpsUrl]-+ dataDir <- getXdgDirectory XdgData tldrDirName+ createDirectoryIfMissing False dataDir+ runProcess_ $ setWorkingDir dataDir $ proc "git" ["clone", repoHttpsUrl] updateTldrPages :: IO () updateTldrPages = do- homeDir <- getHomeDirectory- let repoDir = homeDir </> tldrDirName </> "tldr"+ dataDir <- getXdgDirectory XdgData tldrDirName+ let repoDir = dataDir </> "tldr" repoExists <- doesDirectoryExist repoDir- when repoExists $ do- runProcess_ $ setWorkingDir repoDir $ proc "git" ["pull", "origin", "master"] + case repoExists of+ True ->+ runProcess_ $+ setWorkingDir (repoDir) $ proc "git" ["pull", "origin", "master"]+ False -> initializeTldrPages updateOption :: Parser (a -> a) updateOption = infoOption "update" (long "update" <> help "Update tldr pages")@@ -68,7 +67,9 @@ where versionOption :: Parser (a -> a) versionOption =- infoOption (showVersion version) (long "version" <> short 'v' <> help "Show version")+ infoOption+ (showVersion version)+ (long "version" <> short 'v' <> help "Show version") programOptions :: Parser TldrOpts programOptions =@@ -83,29 +84,39 @@ getPagePath :: String -> IO (Maybe FilePath) getPagePath page = do- homeDir <- getHomeDirectory- let pageDir = homeDir </> tldrDirName </> "tldr" </> "pages"- x@(f1:f2:f3:[]) = map (\x -> pageDir </> x </> page <.> "md") checkDirs-#if MIN_VERSION_base(4,7,0)- f1' <- pageExists f1- f2' <- pageExists f2- f3' <- pageExists f3- return $ f1' <|> f2' <|> f3'-#else- pageExists f1 <|> pageExists f2 <|> pageExists f3-#endif+ dataDir <- getXdgDirectory XdgData tldrDirName+ let pageDir = dataDir </> "tldr" </> "pages"+ paths = map (\x -> pageDir </> x </> page <.> "md") checkDirs+ foldr1 (<|>) <$> mapM pageExists paths +isOption :: String -> Bool+isOption string = string `isPrefixOf` "--" +hasOption :: [String] -> Bool+hasOption xs = any isOption xs+ main :: IO () main = do args <- getArgs- case execParserPure (prefs noBacktrack) tldrParserInfo args of+ case execParserPure (prefs showHelpOnEmpty) tldrParserInfo args of failOpts@(Failure _) | args == ["--update"] -> updateTldrPages- | otherwise -> handleParseResult failOpts >> return ()+ | otherwise ->+ if hasOption args+ then handleParseResult failOpts >> return ()+ else do+ let npage = intercalate "-" args+ fname <- getPagePath npage+ case fname of+ Just path -> renderPage path stdout+ Nothing ->+ putStrLn ("No tldr entry for " <> (intercalate " " args)) Success opts -> do- initializeTldrPages- let page = pageName opts- fname <- getPagePath page- maybe (putStrLn ("No tldr entry for " <> page)) (flip renderPage stdout) fname + initializeTldrPages+ let page = pageName opts+ fname <- getPagePath page+ maybe+ (putStrLn ("No tldr entry for " <> page))+ (flip renderPage stdout)+ fname compOpts@(CompletionInvoked _) -> handleParseResult compOpts >> return ()
src/Tldr.hs view
@@ -93,7 +93,7 @@ handleSubsetNode :: Node -> Text-handleSubsetNode (Node _ ntype xs) = handleSubsetNodeType ntype <> (T.concat $ Prelude.map handleSubsetNode xs)+handleSubsetNode (Node _ ntype xs) = handleSubsetNodeType ntype <> T.concat (Prelude.map handleSubsetNode xs) handleParagraph :: [Node] -> Handle -> IO () handleParagraph xs handle = TIO.hPutStrLn handle $ T.concat $ Prelude.map handleSubsetNode xs@@ -105,7 +105,7 @@ handleNode (Node _ ntype xs) handle = do changeConsoleSetting ntype renderNode ntype handle- mapM_ (\(Node _ ntype' ns) -> renderNode ntype' handle >> mapM_ (flip handleNode $ handle) ns) xs+ mapM_ (\(Node _ ntype' ns) -> renderNode ntype' handle >> mapM_ (`handleNode` handle) ns) xs setSGR [Reset] parsePage :: FilePath -> IO Node
tldr.cabal view
@@ -1,5 +1,5 @@ name: tldr-version: 0.4.0.1+version: 0.4.0.2 synopsis: Haskell tldr client description: Haskell tldr client with support for updating and viewing tldr pages. homepage: https://github.com/psibi/tldr-hs#readme