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. --- .envrc | 1 + Biz/Bild.hs | 24 ++++++++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/.envrc b/.envrc index 67b6b37..8fa2948 100644 --- a/.envrc +++ b/.envrc @@ -14,6 +14,7 @@ use nix # export CODEROOT=$PWD + export COLUMNS # # scripts for editing go here PATH_add $CODEROOT/Biz/Ide 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