処理進行中を表すプロペラを回転させるプログラムを作ってみました
shtool - メモ帳のpropコマンドのところを読んで、関数cycleが使えるかなと思って試しに作ってみました。
ファイル: prop.hs
module Main (main) where import System (getArgs, getProgName) import System.IO (hPutStr, stderr) import Text.Printf (printf) prop :: String -> [String] -> [String] prop prefix ls = (cnt ls) ++ [end] where cnt :: [String] -> [String] cnt = zipWith (\ c _ -> printf "\r%s...%c\b" prefix c) $ cycle "|/-\\" end :: String end = printf "\r%s \n" prefix main :: IO () main = do prefix <- getPrefix mapM_ (hPutStr stderr) . prop prefix . lines =<< getContents where getPrefix :: IO String getPrefix = do args <- getArgs case args of (x : _ ) -> return x [] -> getProgName
実行例:
$ for i in {1..5}; do echo;sleep 1;done | ./prop Running
参照: OSSP: GNU shtool