From 062559cbd5bd3434333ddf1c95ed474a53455020 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Sat, 18 Mar 2023 20:03:25 -1000 Subject: [PATCH] imp: demo: nicer output, show clearer start/stop indicators, don't show "exit" --- hledger/Hledger/Cli/Commands/Demo.hs | 26 ++++++++++++++++++++------ hledger/embeddedfiles/add.cast | 1 - hledger/embeddedfiles/balance.cast | 1 - hledger/embeddedfiles/demo.cast | 1 - hledger/embeddedfiles/help.cast | 1 - hledger/embeddedfiles/install.cast | 1 - hledger/embeddedfiles/print.cast | 1 - 7 files changed, 20 insertions(+), 12 deletions(-) diff --git a/hledger/Hledger/Cli/Commands/Demo.hs b/hledger/Hledger/Cli/Commands/Demo.hs index b2fc50c19..8f0ef61ae 100644 --- a/hledger/Hledger/Cli/Commands/Demo.hs +++ b/hledger/Hledger/Cli/Commands/Demo.hs @@ -1,6 +1,14 @@ {-| The @demo@ command lists and plays small hledger demos in the terminal, using asciinema. -} +{- +TODO +mirror common asciinema flags - -s, -i at least +support other asciinema operations - cat +hledger.org hosting +embedded links to hledger.org player +windows/PowerSession support +-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} @@ -19,9 +27,10 @@ import Control.Concurrent (threadDelay) import System.Process (callProcess) import System.IO.Error (catchIOError) import Safe (readMay, atMay, headMay) -import Data.List (isPrefixOf, find, isInfixOf) +import Data.List (isPrefixOf, find, findIndex, isInfixOf) import Control.Applicative ((<|>)) import Data.ByteString as B (ByteString) +import Data.Maybe import qualified Data.ByteString.Char8 as B import System.IO.Temp (withSystemTempFile) import System.IO (hClose) @@ -68,12 +77,17 @@ demo CliOpts{rawopts_=rawopts, reportspec_=ReportSpec{_rsQuery=_query}} _j = do putStrLn usagestr printDemos exitFailure - Just (Demo t c) -> do - printf "playing (space to pause, . to step, ctrl-c to quit):\n %s\n" t + let i = maybe 0 (1+) $ findIndex (\(Demo t2 _) -> t2 == t) demos -- should succeed + mw <- getTerminalWidth + let line = red' $ replicate w '.' where w = fromMaybe (length t) mw + printf "playing: %d) %s\nspace to pause, . to step, ctrl-c to quit\n" i (bold' t) + putStrLn line + putStrLn "" threadDelay 1000000 - putStr "\n" runAsciinemaPlay c as + putStrLn "" + putStrLn line readDemo :: ByteString -> Demo readDemo content = Demo title content @@ -89,7 +103,7 @@ findDemo :: [Demo] -> String -> Maybe Demo findDemo ds s = (readMay s >>= atMay ds . subtract 1) -- try to find by number <|> find ((sl `isPrefixOf`).lowercase.dtitle) ds -- or by title prefix (ignoring case) - <|> find ((sl `isInfixOf`) .lowercase.dtitle) ds -- or by title substring (ignoring case) + <|> find ((sl `isInfixOf`) .lowercase.dtitle) ds -- or by title substring (ignoring case) where sl = lowercase s @@ -97,7 +111,7 @@ printDemos :: IO () printDemos = putStrLn $ unlines $ "Demos:" : -- "" : - [show i <> ") " <> t | (i, Demo t _) <- zip [(1::Int)..] demos] + [show i <> ") " <> bold' t | (i, Demo t _) <- zip [(1::Int)..] demos] -- | Run asciinema play, passing content to its stdin. runAsciinemaPlay :: ByteString -> [String] -> IO () diff --git a/hledger/embeddedfiles/add.cast b/hledger/embeddedfiles/add.cast index ba5586588..43aed25a3 100644 --- a/hledger/embeddedfiles/add.cast +++ b/hledger/embeddedfiles/add.cast @@ -522,4 +522,3 @@ [100.830158, "o", "\u001b[?2004h"] [100.830201, "o", "~$ "] [105, "o", "\u001b[?2004l\r\r\n"] -[105, "o", "exit\r\n"] diff --git a/hledger/embeddedfiles/balance.cast b/hledger/embeddedfiles/balance.cast index 342da5667..84cd838c5 100644 --- a/hledger/embeddedfiles/balance.cast +++ b/hledger/embeddedfiles/balance.cast @@ -98,4 +98,3 @@ [125, "o", "\u001b[?2004h"] [125, "o", "~$ "] [126, "o", "\u001b[?2004l\r\r\n"] -[126, "o", "exit\r\n"] diff --git a/hledger/embeddedfiles/demo.cast b/hledger/embeddedfiles/demo.cast index 25f0c4065..942a36ecd 100644 --- a/hledger/embeddedfiles/demo.cast +++ b/hledger/embeddedfiles/demo.cast @@ -264,4 +264,3 @@ [38.510999, "o", " $50.25 cash\r\n--------------------\r\n $50.25 \r\n"] [38.545263, "o", "\u001b[?2004h$ "] [41.803082, "o", "\u001b[?2004l\r\r\n"] -[41.803223, "o", "exit\r\n"] diff --git a/hledger/embeddedfiles/help.cast b/hledger/embeddedfiles/help.cast index 49e7d931e..2d5e389ee 100644 --- a/hledger/embeddedfiles/help.cast +++ b/hledger/embeddedfiles/help.cast @@ -537,4 +537,3 @@ [144.480441, "o", "\r\n"] [145.003191, "o", "\u001b[?2004h$ "] [145.875477, "o", "\u001b[?2004l\r\r\n"] -[145.875715, "o", "exit\r\n"] diff --git a/hledger/embeddedfiles/install.cast b/hledger/embeddedfiles/install.cast index 540c48c48..fe9c1856f 100644 --- a/hledger/embeddedfiles/install.cast +++ b/hledger/embeddedfiles/install.cast @@ -1576,4 +1576,3 @@ [380.301919, "o", "s"] [382.740552, "o", "\r\u001b[C\u001b[C\u001b[K"] [383.332762, "o", "\u001b[?2004l\r\r\n"] -[383.332833, "o", "exit\r\n"] diff --git a/hledger/embeddedfiles/print.cast b/hledger/embeddedfiles/print.cast index 2073b6020..72578f95f 100644 --- a/hledger/embeddedfiles/print.cast +++ b/hledger/embeddedfiles/print.cast @@ -41,4 +41,3 @@ [107, "o", "\u001b[?2004h"] [107, "o", "~$ "] [108, "o", "\u001b[?2004l\r\r\n"] -[108, "o", "exit\r\n"]