summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Sima <ben@bsima.me>2025-11-09 09:22:34 -0500
committerBen Sima <ben@bsima.me>2025-11-09 09:22:34 -0500
commitb2767b50b8a0d7987eef419709c8d5b467f8e33e (patch)
tree65d4968cdcb360604976afa88e39d17a16e33202
parent7d7be88312c47761fb0892e9329520bfc37e7177 (diff)
Improve task tree visualization display
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.
-rw-r--r--.tasks/tasks.jsonl1
-rw-r--r--Omni/Task/Core.hs14
2 files changed, 12 insertions, 3 deletions
diff --git a/.tasks/tasks.jsonl b/.tasks/tasks.jsonl
index 72da314..0ac3fa8 100644
--- a/.tasks/tasks.jsonl
+++ b/.tasks/tasks.jsonl
@@ -22,3 +22,4 @@
{"taskCreatedAt":"2025-11-09T13:05:18.445111257Z","taskDependencies":[],"taskId":"t-PqMc17","taskNamespace":"Omni/Task.hs","taskParent":"t-PpXWsU","taskStatus":"Done","taskTitle":"Add enhanced dependency types (blocks, discovered-from, related)","taskType":"WorkTask","taskUpdatedAt":"2025-11-09T13:05:18.50495798Z"}
{"taskCreatedAt":"2025-11-09T13:05:18.543055749Z","taskDependencies":[],"taskId":"t-PqMBuS","taskNamespace":"Omni/Task.hs","taskParent":"t-PpXWsU","taskStatus":"Done","taskTitle":"Protect production database from tests","taskType":"WorkTask","taskUpdatedAt":"2025-11-09T13:05:18.602787251Z"}
{"taskCreatedAt":"2025-11-09T13:05:18.64074361Z","taskDependencies":[],"taskId":"t-PqN0Uu","taskNamespace":"Omni/Task.hs","taskParent":"t-PpXWsU","taskStatus":"Done","taskTitle":"Add migration support for old task format","taskType":"WorkTask","taskUpdatedAt":"2025-11-09T13:05:18.703048004Z"}
+{"taskCreatedAt":"2025-11-09T14:22:32.038937583Z","taskDependencies":[{"depId":"t-PpZlbL","depType":"DiscoveredFrom"}],"taskId":"t-Uumhrq","taskNamespace":"Omni/Task.hs","taskParent":null,"taskStatus":"Open","taskTitle":"Investigate and implement prettier tree drawing with box characters","taskType":"WorkTask","taskUpdatedAt":"2025-11-09T14:22:32.038937583Z"}
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