diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index b1362aa3..076dbb20 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -208,10 +208,33 @@ func (gui *Gui) refreshContainersAndServices() error { // if the containersView hasn't been instantiated yet we just return return nil } + + // keep track of current service selected so that we can reposition our cursor if it moves position in the list + sl := gui.State.Panels.Services.SelectedLine + var selectedService *commands.Service + if len(gui.DockerCommand.Services) > 0 { + selectedService = gui.DockerCommand.Services[sl] + } + if err := gui.refreshStateContainersAndServices(); err != nil { return err } + // see if our selected service has moved + if selectedService != nil { + for i, service := range gui.DockerCommand.Services { + if service.ID == selectedService.ID { + if i == sl { + break + } + gui.State.Panels.Services.SelectedLine = i + if err := gui.focusPoint(0, i, len(gui.DockerCommand.Services), gui.getServicesView()); err != nil { + return err + } + } + } + } + if len(gui.DockerCommand.Containers) > 0 && gui.State.Panels.Containers.SelectedLine == -1 { gui.State.Panels.Containers.SelectedLine = 0 } diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go index 5d2fd720..d20e3858 100644 --- a/pkg/gui/services_panel.go +++ b/pkg/gui/services_panel.go @@ -17,7 +17,7 @@ func (gui *Gui) getServiceContexts() []string { return []string{"logs", "config", "stats"} } -func (gui *Gui) getSelectedService(g *gocui.Gui) (*commands.Service, error) { +func (gui *Gui) getSelectedService() (*commands.Service, error) { selectedLine := gui.State.Panels.Services.SelectedLine if selectedLine == -1 { return &commands.Service{}, errors.New("no service selected") @@ -55,7 +55,7 @@ func (gui *Gui) handleServiceSelect(g *gocui.Gui, v *gocui.View) error { return err } - service, err := gui.getSelectedService(g) + service, err := gui.getSelectedService() if err != nil { return err } @@ -123,7 +123,7 @@ func (gui *Gui) renderServiceStats(mainView *gocui.View, service *commands.Servi } func (gui *Gui) renderServiceLogs(mainView *gocui.View, service *commands.Service) error { - service, err := gui.getSelectedService(gui.g) + service, err := gui.getSelectedService() if err != nil { return nil } @@ -194,7 +194,7 @@ func (r *removeServiceOption) GetDisplayStrings(isFocused bool) []string { } func (gui *Gui) handleServiceRemoveMenu(g *gocui.Gui, v *gocui.View) error { - service, err := gui.getSelectedService(g) + service, err := gui.getSelectedService() if err != nil { return nil } @@ -232,7 +232,7 @@ func (gui *Gui) handleServiceRemoveMenu(g *gocui.Gui, v *gocui.View) error { } func (gui *Gui) handleServiceStop(g *gocui.Gui, v *gocui.View) error { - service, err := gui.getSelectedService(g) + service, err := gui.getSelectedService() if err != nil { return nil } @@ -250,7 +250,7 @@ func (gui *Gui) handleServiceStop(g *gocui.Gui, v *gocui.View) error { } func (gui *Gui) handleServiceRestart(g *gocui.Gui, v *gocui.View) error { - service, err := gui.getSelectedService(g) + service, err := gui.getSelectedService() if err != nil { return nil } @@ -265,7 +265,7 @@ func (gui *Gui) handleServiceRestart(g *gocui.Gui, v *gocui.View) error { } func (gui *Gui) handleServiceAttach(g *gocui.Gui, v *gocui.View) error { - service, err := gui.getSelectedService(g) + service, err := gui.getSelectedService() if err != nil { return nil }