Monadoro 0.1.2.0 → 0.2.0.0
raw patch · 11 files changed
+194/−18 lines, 11 filesdep +argparserdep +doctestdep +ncurses
Dependencies added: argparser, doctest, ncurses, optparse-applicative
Files
- ChangeLog.md +0/−5
- Monadoro.cabal +19/−3
- README.md +5/−0
- app/Main.hs +2/−2
- changelog +7/−0
- src/ArgParse.hs +26/−0
- src/Clock.lhs +59/−0
- src/FullScreen.lhs +58/−0
- src/MyHelp.hs +4/−0
- src/Pomodoro.lhs +11/−7
- test/Spec.hs +3/−1
− ChangeLog.md
@@ -1,5 +0,0 @@-# Changelog for Monadoro--1. Switch to literate Haskell in library.--## Unreleased changes
Monadoro.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 653a2abf4fa16463894ecf07ecb4a16eb86a20534df5d73e02b76c8419c18b46+-- hash: 924fd821c4ec1f5d5265fc59902a3058d01b0e57e4c3a131948ce2e4ff3533f1 name: Monadoro-version: 0.1.2.0+version: 0.2.0.0 synopsis: A minimalistic CLI Pomodoro timer, based on a library of the same purpose. description: Please see the README on GitLab at <https://gitlab.com/kocielnik/monadoro#readme> category: Tools@@ -21,7 +21,7 @@ build-type: Simple extra-source-files: README.md- ChangeLog.md+ changelog source-repository head type: git@@ -30,7 +30,11 @@ library exposed-modules:+ ArgParse+ Clock+ FullScreen Lib+ MyHelp Pomodoro Timer other-modules:@@ -39,7 +43,11 @@ src build-depends: ansi-terminal >=0.8 && <1+ , argparser >=0.3 && <0.4 , base >=4.7 && <5+ , doctest >=0.8+ , ncurses >=0.2+ , optparse-applicative >=0.14 , process >=1.6 && <2 , time >=1.8 && <2 default-language: Haskell2010@@ -54,7 +62,11 @@ build-depends: Monadoro , ansi-terminal >=0.8 && <1+ , argparser >=0.3 && <0.4 , base >=4.7 && <5+ , doctest >=0.8+ , ncurses >=0.2+ , optparse-applicative >=0.14 , process >=1.6 && <2 , time >=1.8 && <2 default-language: Haskell2010@@ -70,7 +82,11 @@ build-depends: Monadoro , ansi-terminal >=0.8 && <1+ , argparser >=0.3 && <0.4 , base >=4.7 && <5+ , doctest >=0.8+ , ncurses >=0.2+ , optparse-applicative >=0.14 , process >=1.6 && <2 , time >=1.8 && <2 default-language: Haskell2010
README.md view
@@ -3,3 +3,8 @@ A Pomodoro timer to track work time in 4-pomodoro sessions. To run, execute `monadoro`.++## Goal++The simplest Pomodoro counter, ready to deploy at once on most command-line platformsto enable you to focus on your work in just a few moments, for weeks to come.+
app/Main.hs view
@@ -1,7 +1,7 @@ module Main where -import Pomodoro ( worker )+import ArgParse ( parse_args ) main :: IO ()-main = worker+main = parse_args
+ changelog view
@@ -0,0 +1,7 @@+monadoro (2.0.0)++ * Add option for a long (4-pomodoro) session.++monadoro (1.0.0)++ * Initial release.
+ src/ArgParse.hs view
@@ -0,0 +1,26 @@+#!/usr/bin/env stack+--stack --install-ghc runghc++module ArgParse (parse_args) where++-- Here we will service arguments passed to the program in the simplest manner+-- possible.++import System.Environment+import System.Exit+import Pomodoro (worker)+import Clock (countdown)++main = parse_args++parse_args = getArgs >>= parse++parse ["-h"] = usage >> exit+parse ["-v"] = version >> exit+parse ["--session"] = worker+parse [] = countdown++usage = putStrLn "Usage: monadoro [-vh] [file ...]"+version = putStrLn "Monadoro 1.1"+exit = exitWith ExitSuccess+die = exitWith (ExitFailure 1)
+ src/Clock.lhs view
@@ -0,0 +1,59 @@+#!/usr/bin/env stack+> --stack --install-ghc runghc --package markdown-unlit -- "-pgmL markdown-unlit"++> {-# LANGUAGE OverloadedStrings #-}++This is a simple countdown clock module.++> module Clock (countdown) where++> import Control.Concurrent (threadDelay)+> import System.Process (system, rawSystem)+> import System.Console.ANSI (clearLine,+> clearFromCursorToScreenEnd,+> setCursorColumn,+> hideCursor,+> showCursor,+> saveCursor,+> restoreCursor)+> import System.Environment (getArgs)+> import System.IO (hFlush,+> stdout)+> import Timer (secToTimestamp)+> +> -- >>> putStrLn "Hello world!"+> -- Hello world!+> --+> -- >>> putStrLn "Test complete!"+> -- Test complete!+ +> countdown :: IO()+> countdown = do+> wait_seconds $ 25 * 60 + 1++> wait_seconds :: Int -> IO()+> wait_seconds 0 = do+> putStrLn ""+> wait_seconds n = do+> putStr ""+> setCursorColumn 0+> putStr $ secToTimestamp $ n - 1+> hFlush stdout+> delay 1+> wait_seconds $ n - 1++> delay :: Int -> IO()+> delay n = del n+> +> del :: Int -> IO()+> del n = do+> threadDelay $ n * 1000 * 1000+>+> no_del :: Int -> IO()+> no_del n = do+> return ()+> +> main :: IO()+> main = do+> countdown+
+ src/FullScreen.lhs view
@@ -0,0 +1,58 @@+> module FullScreen where+>+> import Timer (secToTimestamp)+> import Control.Concurrent (threadDelay)+> import UI.NCurses+> import System.IO (+> hFlush,+> stdout)+> import System.Console.ANSI (clearLine,+> clearFromCursorToScreenEnd,+> setCursorColumn,+> hideCursor,+> showCursor,+> saveCursor,+> restoreCursor,+> )+>+> main :: IO ()+> main = ncurses_clock+>+> wait_seconds :: Int -> IO()+> wait_seconds 0 = do+> putStr ""+> wait_seconds n = do+> restoreCursor+> putStr $ secToTimestamp $ n - 1+> hFlush stdout+> delay 1+> wait_seconds $ n - 1++> delay :: Int -> IO()+> delay n = del n+> +> del :: Int -> IO()+> del n = do+> threadDelay $ n * 1000 * 1000++> ncurses_clock :: IO ()+> ncurses_clock = runCurses $ do+> setEcho False+> w <- defaultWindow+> updateWindow w $ do+> moveCursor 1 10+> drawString "Hello world!"+> moveCursor 3 10+> drawString "(press q to quit)"+> moveCursor 0 0+> render+> waitFor w (\ev -> ev == EventCharacter 'q' || ev == EventCharacter 'Q')+> +> waitFor :: Window -> (Event -> Bool) -> Curses ()+> waitFor w p = loop where+> loop = do+> ev <- getEvent w Nothing+> case ev of+> Nothing -> loop+> Just ev' -> if p ev' then return () else loop+>
+ src/MyHelp.hs view
@@ -0,0 +1,4 @@+module MyHelp (show_help) where++show_help :: IO ()+show_help = putStrLn "Welcome to Monadoro - your personal Pomodoro counter!"
src/Pomodoro.lhs view
@@ -1,8 +1,3 @@-#!/usr/bin/env stack-> --stack --install-ghc runghc --package markdown-unlit -- "-pgmL markdown-unlit"--> {-# LANGUAGE OverloadedStrings #-}- This is a command-line Pomodoro counter. > module Pomodoro (worker) where@@ -25,7 +20,16 @@ > > data Pomodoro = First | Second | Third | Fourth > deriving (Eq, Ord, Show, Read, Bounded, Enum)-> ++> -- | Manage Pomodoro sessions+> -- Examples:+> --+> -- >>> putStrLn "Hello world!"+> -- Hello world!+> --+> -- >>> putStrLn "Test complete!"+> -- Test complete!+ > pom m = do > putStr $ show m ++ " pomodoro" ++ " | " > saveCursor@@ -42,7 +46,7 @@ > pomodoro Fourth = do > pom Fourth > putStrLn "Take a 30-minute rest now. You just completed 4 pomodoros."-> putStrLn "Thank you for tracking your time with Haskomodoro."+> putStrLn "Thank you for tracking your time with Monadoro." > pomodoro m = do > pom m > delay $ 5 * 60
test/Spec.hs view
@@ -1,2 +1,4 @@+import Test.DocTest+ main :: IO ()-main = putStrLn "Test suite not yet implemented"+main = doctest ["-isrc", "src/Pomodoro.lhs", "src/Clock.lhs", "src/Timer.hs"]