@@ -163,6 +163,8 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
163163 return m , tea .Batch (cmds ... )
164164 }
165165
166+ skipListUpdate := false
167+
166168 switch msg := msg .(type ) {
167169 case tea.WindowSizeMsg :
168170 w , h := listStyle .GetFrameSize ()
@@ -424,16 +426,43 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
424426 return m , tea .Batch (cmds ... )
425427
426428 case "down" , "j" :
427- if m .activeView != taskDetailsView && m .activeView != helpView {
428- break
429- }
430-
431429 switch m .activeView {
430+ case taskListView , archivedTaskListView , contextBookmarksView , prefixSelectionView :
431+ // cycle back to top
432+ var list * list.Model
433+ switch m .activeView {
434+ case taskListView :
435+ list = & m .taskList
436+ case archivedTaskListView :
437+ list = & m .archivedTaskList
438+ case contextBookmarksView :
439+ list = & m .taskBMList
440+ case prefixSelectionView :
441+ list = & m .prefixSearchList
442+ default :
443+ break
444+ }
445+
446+ if list .IsFiltered () {
447+ break
448+ }
449+
450+ numItems := len (list .Items ())
451+ if numItems <= 1 {
452+ break
453+ }
454+
455+ if list .Index () == numItems - 1 {
456+ list .Select (0 )
457+ skipListUpdate = true
458+ }
459+
432460 case taskDetailsView :
433461 if m .taskDetailsVP .AtBottom () {
434462 break
435463 }
436464 m .taskDetailsVP .LineDown (viewPortMoveLineCount )
465+
437466 case helpView :
438467 if m .helpVP .AtBottom () {
439468 break
@@ -442,16 +471,43 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
442471 }
443472
444473 case "up" , "k" :
445- if m .activeView != taskDetailsView && m .activeView != helpView {
446- break
447- }
448-
449474 switch m .activeView {
475+ case taskListView , archivedTaskListView , contextBookmarksView , prefixSelectionView :
476+ // cycle to the end
477+ var list * list.Model
478+ switch m .activeView {
479+ case taskListView :
480+ list = & m .taskList
481+ case archivedTaskListView :
482+ list = & m .archivedTaskList
483+ case contextBookmarksView :
484+ list = & m .taskBMList
485+ case prefixSelectionView :
486+ list = & m .prefixSearchList
487+ default :
488+ break
489+ }
490+
491+ if list .IsFiltered () {
492+ break
493+ }
494+
495+ numItems := len (list .Items ())
496+ if numItems <= 1 {
497+ break
498+ }
499+
500+ if list .Index () == 0 {
501+ list .Select (numItems - 1 )
502+ skipListUpdate = true
503+ }
504+
450505 case taskDetailsView :
451506 if m .taskDetailsVP .AtTop () {
452507 break
453508 }
454509 m .taskDetailsVP .LineUp (viewPortMoveLineCount )
510+
455511 case helpView :
456512 if m .helpVP .AtTop () {
457513 break
@@ -1415,7 +1471,9 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
14151471 var viewUpdateCmd tea.Cmd
14161472 switch m .activeView {
14171473 case taskListView :
1418- m .taskList , viewUpdateCmd = m .taskList .Update (msg )
1474+ if ! skipListUpdate {
1475+ m .taskList , viewUpdateCmd = m .taskList .Update (msg )
1476+ }
14191477
14201478 if ! m .cfg .ShowContext {
14211479 break
@@ -1452,7 +1510,9 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
14521510 m .contextVPTaskId = t .ID
14531511
14541512 case archivedTaskListView :
1455- m .archivedTaskList , viewUpdateCmd = m .archivedTaskList .Update (msg )
1513+ if ! skipListUpdate {
1514+ m .archivedTaskList , viewUpdateCmd = m .archivedTaskList .Update (msg )
1515+ }
14561516
14571517 if ! m .cfg .ShowContext {
14581518 break
@@ -1490,10 +1550,14 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
14901550 m .taskDetailsVP , viewUpdateCmd = m .taskDetailsVP .Update (msg )
14911551
14921552 case contextBookmarksView :
1493- m .taskBMList , viewUpdateCmd = m .taskBMList .Update (msg )
1553+ if ! skipListUpdate {
1554+ m .taskBMList , viewUpdateCmd = m .taskBMList .Update (msg )
1555+ }
14941556
14951557 case prefixSelectionView :
1496- m .prefixSearchList , viewUpdateCmd = m .prefixSearchList .Update (msg )
1558+ if ! skipListUpdate {
1559+ m .prefixSearchList , viewUpdateCmd = m .prefixSearchList .Update (msg )
1560+ }
14971561
14981562 case helpView :
14991563 m .helpVP , viewUpdateCmd = m .helpVP .Update (msg )
0 commit comments