diff --git a/internal/ui/app.go b/internal/ui/app.go index 906d556..3e67283 100644 --- a/internal/ui/app.go +++ b/internal/ui/app.go @@ -738,6 +738,10 @@ func (m *AppModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, m.loadTask(task.ID) } } + // Pass mouse events to detail view for scrolling + if m.currentView == ViewDetail { + return m.updateDetail(msg) + } case tasksLoadedMsg: m.loading = false @@ -2406,10 +2410,7 @@ func (m *AppModel) updateDetail(msg tea.Msg) (tea.Model, tea.Cmd) { } // Arrow key navigation to prev/next task in the same column - // Skip j/k in detail view - only use arrow keys (j/k reserved for other uses) - if keyMsg.String() == "j" || keyMsg.String() == "k" { - return m, nil - } + // j/k keys are passed through to the viewport for scrolling if key.Matches(keyMsg, m.keys.Up) { // Ignore if no previous task exists if !m.kanban.HasPrevTask() { diff --git a/internal/ui/detail.go b/internal/ui/detail.go index 23e12a6..6129a6c 100644 --- a/internal/ui/detail.go +++ b/internal/ui/detail.go @@ -2615,7 +2615,7 @@ func (m *DetailModel) renderHelp() string { // Show scroll hint when content is scrollable if m.viewport.TotalLineCount() > m.viewport.VisibleLineCount() { - keys = append(keys, helpKey{"PgUp/Dn", "scroll", false}) + keys = append(keys, helpKey{"j/k/wheel", "scroll", false}) } // Only show execute/retry when Claude is not running