From b2767b50b8a0d7987eef419709c8d5b467f8e33e Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Sun, 9 Nov 2025 09:22:34 -0500 Subject: Improve task tree visualization display MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes: 1. Remove [Task] label - only show [Epic] for epics, cleaner output 2. Truncate long titles to fit 80 columns with ... ellipsis 3. Better spacing with type label included in layout calculation Created task for future improvement: prettier box-drawing characters (├──, └──) which would require Data.Tree library investigation. Current output is clean and readable within standard terminal width. --- Omni/Task/Core.hs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'Omni/Task/Core.hs') diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs index 1a9cb2e..ef60ead 100644 --- a/Omni/Task/Core.hs +++ b/Omni/Task/Core.hs @@ -279,9 +279,10 @@ showTaskTree maybeId = do printTreeNode :: [Task] -> Task -> Int -> IO () printTreeNode allTasks task indent = do let prefix = T.pack (replicate (indent * 2) ' ') + -- Only show type label for epics typeStr = case taskType task of - Epic -> "[Epic]" - WorkTask -> "[Task]" + Epic -> "[Epic] " + WorkTask -> "" statusStr = case taskStatus task of Open -> "[ ]" InProgress -> "[~]" @@ -289,7 +290,14 @@ showTaskTree maybeId = do nsStr = case taskNamespace task of Nothing -> "" Just ns -> " [" <> ns <> "]" - putText <| prefix <> taskId task <> " " <> typeStr <> " " <> statusStr <> " " <> taskTitle task <> nsStr + -- Calculate available width for title (80 cols - prefix - id - labels) + usedWidth = T.length prefix + T.length (taskId task) + T.length typeStr + T.length statusStr + T.length nsStr + 3 + availableWidth = max 20 (80 - usedWidth) + truncatedTitle = + if T.length (taskTitle task) > availableWidth + then T.take (availableWidth - 3) (taskTitle task) <> "..." + else taskTitle task + putText <| prefix <> taskId task <> " " <> typeStr <> statusStr <> " " <> truncatedTitle <> nsStr -- Find and print children (tasks with this task as parent) let children = filter (\t -> taskParent t == Just (taskId task)) allTasks -- cgit v1.2.3