@@ -189,6 +189,33 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
189189 // Normal key handling for non-search states
190190 switch {
191191 case key .Matches (msg , m .keys .Quit ):
192+ // Don't quit if we're in a done state waiting for user to continue
193+ if m .state == StateDeleting && len (m .deleteResults ) == len (m .deletingRepos ) {
194+ // Deletion done, return to list instead of quitting
195+ m .state = StateList
196+ m .selected = make (map [int ]struct {})
197+ return m , fetchRepos (m .client )
198+ } else if m .state == StateArchiving && len (m .archiveResults ) == len (m .archivingRepos ) {
199+ // Archiving done, return to list instead of quitting
200+ m .state = StateList
201+ m .selected = make (map [int ]struct {})
202+ return m , fetchRepos (m .client )
203+ } else if m .state == StateChangingVisibilityPrivate && len (m .visibilityResults ) == len (m .changingVisibilityRepos ) {
204+ // Visibility change done, return to list instead of quitting
205+ m .state = StateList
206+ m .selected = make (map [int ]struct {})
207+ return m , fetchRepos (m .client )
208+ } else if m .state == StateChangingVisibilityPublic && len (m .visibilityResults ) == len (m .changingVisibilityRepos ) {
209+ // Visibility change done, return to list instead of quitting
210+ m .state = StateList
211+ m .selected = make (map [int ]struct {})
212+ return m , fetchRepos (m .client )
213+ } else if m .state == StateBackingUp && len (m .backupResults ) == len (m .backingUpRepos ) {
214+ // Backup done, return to list instead of quitting
215+ m .state = StateList
216+ m .selected = make (map [int ]struct {})
217+ return m , fetchRepos (m .client )
218+ }
192219 return m , tea .Quit
193220
194221 case msg .String () == "/" :
@@ -313,7 +340,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
313340 }
314341
315342 case key .Matches (msg , m .keys .ToggleVisibilityPrivate ):
316- case key . Matches ( msg , m . keys . ToggleVisibilityPrivate ):
343+
317344 if m .state == StateList {
318345 if len (m .selected ) == 0 {
319346 m .flashMessage = "No repos selected"
@@ -398,6 +425,29 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
398425 } else if m .state == StateConfirmVisibilityPublic {
399426 m .state = StateList
400427 }
428+
429+ case msg .String () == "" || msg .String () == "q" : // Enter or q
430+ if m .state == StateDeleting && len (m .deleteResults ) == len (m .deletingRepos ) {
431+ m .state = StateList
432+ m .selected = make (map [int ]struct {})
433+ return m , fetchRepos (m .client )
434+ } else if m .state == StateArchiving && len (m .archiveResults ) == len (m .archivingRepos ) {
435+ m .state = StateList
436+ m .selected = make (map [int ]struct {})
437+ return m , fetchRepos (m .client )
438+ } else if m .state == StateChangingVisibilityPrivate && len (m .visibilityResults ) == len (m .changingVisibilityRepos ) {
439+ m .state = StateList
440+ m .selected = make (map [int ]struct {})
441+ return m , fetchRepos (m .client )
442+ } else if m .state == StateChangingVisibilityPublic && len (m .visibilityResults ) == len (m .changingVisibilityRepos ) {
443+ m .state = StateList
444+ m .selected = make (map [int ]struct {})
445+ return m , fetchRepos (m .client )
446+ } else if m .state == StateBackingUp && len (m .backupResults ) == len (m .backingUpRepos ) {
447+ m .state = StateList
448+ m .selected = make (map [int ]struct {})
449+ return m , fetchRepos (m .client )
450+ }
401451 }
402452
403453 case flashTimeoutMsg :
@@ -551,10 +601,10 @@ func (m Model) View() string {
551601 "NAME" , "VIS" , "STAR" , "FORK" , "PUSHED" , "FLAGS" )) + "\n "
552602
553603 // Status Bar
554- status := fmt .Sprintf (" %d selected | %d repos | ↑↓ navigate | space mark | / search | enter delete | A archive | q quit " ,
604+ status := fmt .Sprintf (" %d selected | %d repos | ↑↓: navigate | space: mark | /: search | enter: delete | A: archive | p: private | P: public | B: backup | q: quit " ,
555605 len (m .selected ), len (m .filtered ))
556606 if m .filterOpts .SearchQuery != "" {
557- status = fmt .Sprintf (" 🔍 %q | %d results | %d selected | ↑↓ navigate | space mark | / search | enter delete | A archive | q quit " ,
607+ status = fmt .Sprintf (" 🔍 %q | %d results | %d selected | ↑↓: navigate | space: mark | /: search | enter: delete | A: archive | p: private | P: public | B: backup | q: quit " ,
558608 m .filterOpts .SearchQuery , len (m .filtered ), len (m .selected ))
559609 }
560610 statusBar := StatusBarStyle .Render (status )
0 commit comments