Skip to content

Commit 36b6908

Browse files
author
Ziang Zhang
committed
fix: replace print() with typer.secho/echo for styled terminal output
Use typer.secho with colors for warning/error/success messages and typer.echo for normal output, matching the project's existing pattern in cli.py. This ensures task feedback is visible and styled correctly in busy terminals. Addresses review feedback on TruFoundation#53.
1 parent 344986a commit 36b6908

1 file changed

Lines changed: 18 additions & 16 deletions

File tree

trushell/commands/tasks.py

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from typing import Callable
44

5+
import typer
6+
57
from trushell.core.database import complete_todo, delete_todo, get_all_todos, insert_todo, update_todo
68
from trushell.core.models import Todo
79

@@ -14,7 +16,7 @@ def add_task(args: str) -> None:
1416
addtask task text here
1517
"""
1618
if not args.strip():
17-
print("Usage: task add <task> [category]")
19+
typer.secho('⚠️ Missing arguments. Syntax: addtask "task-name" "category"', fg=typer.colors.YELLOW)
1820
return
1921

2022
# Try to parse quoted arguments: "task text" "category"
@@ -33,54 +35,54 @@ def add_task(args: str) -> None:
3335

3436
todo = Todo(task=task_text, category=category)
3537
insert_todo(todo)
36-
print("Task added.")
38+
typer.secho("✅ Task added.", fg=typer.colors.GREEN)
3739

3840

3941
def show_tasks(_: str) -> None:
4042
"""Display the current todo list."""
4143
tasks = get_all_todos()
4244
if not tasks:
43-
print("No tasks found.")
45+
typer.echo("No tasks found.")
4446
return
4547

4648
for index, task in enumerate(tasks, start=1):
4749
status = "✅" if task.status == 2 else "❌"
48-
print(f"{index}. {task.task} [{task.category}] {status}")
50+
typer.echo(f"{index}. {task.task} [{task.category}] {status}")
4951

5052

5153
def complete_task(args: str) -> None:
5254
"""Mark a todo item as complete."""
5355
if not args.strip() or not args.strip().isdigit():
54-
print("Usage: task done <task-number>")
56+
typer.secho("⚠️ Usage: task done <task-number>", fg=typer.colors.YELLOW)
5557
return
5658

5759
index = int(args.strip()) - 1
5860
try:
5961
complete_todo(index)
60-
print("Task completed.")
62+
typer.secho("✅ Task completed.", fg=typer.colors.GREEN)
6163
except Exception as error:
62-
print(f"Task error: {error}")
64+
typer.secho(f"Task error: {error}", fg=typer.colors.RED)
6365

6466

6567
def remove_task(args: str) -> None:
6668
"""Remove a task by its numeric position."""
6769
if not args.strip() or not args.strip().isdigit():
68-
print("Usage: task remove <task-number>")
70+
typer.secho("⚠️ Usage: task remove <task-number>", fg=typer.colors.YELLOW)
6971
return
7072

7173
index = int(args.strip()) - 1
7274
try:
7375
delete_todo(index)
74-
print("Task removed.")
76+
typer.secho("✅ Task removed.", fg=typer.colors.GREEN)
7577
except Exception as error:
76-
print(f"Task error: {error}")
78+
typer.secho(f"Task error: {error}", fg=typer.colors.RED)
7779

7880

7981
def update_task(args: str) -> None:
8082
"""Update an existing task's text and/or category."""
8183
parts = args.split(maxsplit=2)
8284
if len(parts) < 2 or not parts[0].isdigit():
83-
print('Usage: task update <task-number> "<task>" ["<category>"]')
85+
typer.secho('⚠️ Usage: task update <task-number> "<task>" ["<category>"]', fg=typer.colors.YELLOW)
8486
return
8587

8688
index = int(parts[0]) - 1
@@ -89,9 +91,9 @@ def update_task(args: str) -> None:
8991

9092
try:
9193
update_todo(index, task_text, category)
92-
print("Task updated.")
94+
typer.secho("✅ Task updated.", fg=typer.colors.GREEN)
9395
except Exception as error:
94-
print(f"Task error: {error}")
96+
typer.secho(f"Task error: {error}", fg=typer.colors.RED)
9597

9698

9799
def list_tasks(_: str) -> None:
@@ -112,7 +114,7 @@ def run_task_command(args: str) -> None:
112114
}
113115

114116
if not args.strip():
115-
print("Usage: task <add|show|done|list|remove|update> [options]")
117+
typer.secho("⚠️ Usage: task <add|show|done|list|remove|update> [options]", fg=typer.colors.YELLOW)
116118
return
117119

118120
parts = args.split(maxsplit=1)
@@ -124,6 +126,6 @@ def run_task_command(args: str) -> None:
124126
try:
125127
handler(subargs)
126128
except Exception as error:
127-
print(f"Task error: {error}")
129+
typer.secho(f"Task error: {error}", fg=typer.colors.RED)
128130
else:
129-
print(f"Unknown task subcommand: {subcmd}")
131+
typer.secho(f"Unknown task subcommand: {subcmd}", fg=typer.colors.YELLOW)

0 commit comments

Comments
 (0)