@@ -579,7 +579,7 @@ func Update(m model.Model, msg tea.Msg) (model.Model, tea.Cmd) {
579579 if m .CurrentView == model .FileView {
580580 switch msg .String () {
581581 case " " :
582- if len (m .Files ) > 0 {
582+ if len (m .Files ) > 0 && m . Cursor < len ( m . Files ) {
583583 f := & m .Files [m .Cursor ]
584584 f .Staged = ! f .Staged
585585 if f .Staged {
@@ -590,16 +590,29 @@ func Update(m model.Model, msg tea.Msg) (model.Model, tea.Cmd) {
590590 m .Message = fmt .Sprintf ("✓ File %s removed from stage" , f .Name )
591591 }
592592 m .MessageType = "success"
593+ } else {
594+ // Resetear cursor y mostrar mensaje apropiado
595+ if len (m .Files ) > 0 {
596+ m .Cursor = 0
597+ } else {
598+ m .Message = "⚠ No files to stage"
599+ m .MessageType = "warning"
600+ }
593601 }
594602 case "a" :
595- for i := range m .Files {
596- if ! m .Files [i ].Staged {
597- m .Files [i ].Staged = true
598- git .Add (m .Files [i ].Name )
603+ if len (m .Files ) > 0 {
604+ for i := range m .Files {
605+ if ! m .Files [i ].Staged {
606+ m .Files [i ].Staged = true
607+ git .Add (m .Files [i ].Name )
608+ }
599609 }
610+ m .Message = "✓ All files added to stage"
611+ m .MessageType = "success"
612+ } else {
613+ m .Message = "⚠ No files to stage"
614+ m .MessageType = "warning"
600615 }
601- m .Message = "✓ All files added to stage"
602- m .MessageType = "success"
603616 case "c" :
604617 ok := false
605618 for _ , f := range m .Files {
@@ -625,6 +638,7 @@ func Update(m model.Model, msg tea.Msg) (model.Model, tea.Cmd) {
625638 m .Message = ""
626639 case "r" :
627640 m .RefreshData ()
641+ utils .ValidateCursor (& m )
628642 m .Message = "✓ Status updated"
629643 m .MessageType = "success"
630644 case "p" :
@@ -657,10 +671,13 @@ func Update(m model.Model, msg tea.Msg) (model.Model, tea.Cmd) {
657671 m .MessageType = "info"
658672 return m , nil
659673 case "x" :
660- if len (m .Files ) > 0 {
674+ if len (m .Files ) > 0 && m . Cursor < len ( m . Files ) {
661675 m .DialogType = "discard_changes"
662676 m .DialogTarget = m .Files [m .Cursor ].Name
663677 m .CurrentView = model .ConfirmDialog
678+ } else {
679+ m .Message = "⚠ No file selected or no files available"
680+ m .MessageType = "warning"
664681 }
665682 case "?" :
666683 if m .CurrentView == model .FileView {
@@ -691,6 +708,7 @@ func Update(m model.Model, msg tea.Msg) (model.Model, tea.Cmd) {
691708 m .DialogTarget = ""
692709 m .LogLines = nil
693710 m .RefreshData ()
711+ utils .ValidateCursor (& m )
694712 }
695713
696714 case fetchMsg :
@@ -702,6 +720,7 @@ func Update(m model.Model, msg tea.Msg) (model.Model, tea.Cmd) {
702720 m .Message = "✓ Changes fetched successfully"
703721 m .MessageType = "success"
704722 m .RefreshData ()
723+ utils .ValidateCursor (& m )
705724 }
706725
707726 case pullMsg :
@@ -713,6 +732,7 @@ func Update(m model.Model, msg tea.Msg) (model.Model, tea.Cmd) {
713732 m .Message = "✓ Changes pulled successfully"
714733 m .MessageType = "success"
715734 m .RefreshData ()
735+ utils .ValidateCursor (& m )
716736 }
717737 }
718738
0 commit comments