From d36b4360c9c359e6eea480b39e9699b1deae70f1 Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Mon, 15 Apr 2024 15:59:20 -0400 Subject: Wrap bild log at the terminal-supplied width Apparently `$COLUMNS` is a POSIX standard, which allows us to set the print width to however wide the user's terminal is. This is a better UI on both wide and narrow terminal layouts: on very narrow layouts, the terminal will properly clear the line instead of doing the wrap-print thing it does when the line overflows, and on wide layouts you can see more of the log message if you're curious. This only works if you export `$COLUMNS` though, because bash only sets the variable in interactive mode, so by default a running program doesn't see it. --- Biz/Bild.hs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'Biz') diff --git a/Biz/Bild.hs b/Biz/Bild.hs index cc10782..1ca0a2c 100644 --- a/Biz/Bild.hs +++ b/Biz/Bild.hs @@ -1011,16 +1011,20 @@ logs :: Conduit.ConduitT () ByteString (Conduit.ResourceT IO) () -> IO ByteString logs ns src = - Conduit.runConduitRes - <| src - .| Conduit.iterM - ( ByteString.filter (/= BSI.c2w '\n') - .> (\t -> Log.fmt ["info", "bild", nschunk ns, decodeUtf8 t]) - .> Text.take 79 - .> (<> "…\r") - .> putStr - ) - .| Conduit.foldC + Env.lookupEnv "COLUMNS" + -- is there a better way to set a default? + /> maybe 79 (readMaybe .> fromMaybe 79) + +> \columns -> + src + .| Conduit.iterM + ( ByteString.filter (/= BSI.c2w '\n') + .> (\t -> Log.fmt ["info", "bild", nschunk ns, decodeUtf8 t]) + .> Text.take (columns - 1) + .> (<> "…\r") + .> putStr + ) + .| Conduit.foldC + |> Conduit.runConduitRes nschunk :: Namespace -> Text nschunk = Namespace.toPath .> Text.pack -- cgit v1.2.3