diff --git a/docs/keybindings/Keybindings_de.md b/docs/keybindings/Keybindings_de.md index 62b92011..9f08b97b 100644 --- a/docs/keybindings/Keybindings_de.md +++ b/docs/keybindings/Keybindings_de.md @@ -17,6 +17,7 @@ [: vorheriges Tab ]: nächstes Tab d: entfernen + e: Hide/Show stopped containers s: anhalten r: neustarten a: anbinden diff --git a/docs/keybindings/Keybindings_en.md b/docs/keybindings/Keybindings_en.md index 3e6301b9..3cedb64b 100644 --- a/docs/keybindings/Keybindings_en.md +++ b/docs/keybindings/Keybindings_en.md @@ -17,6 +17,7 @@ [: previous tab ]: next tab d: remove + e: Hide/Show stopped containers s: stop r: restart a: attach diff --git a/docs/keybindings/Keybindings_nl.md b/docs/keybindings/Keybindings_nl.md index 041f86e9..2cc97077 100644 --- a/docs/keybindings/Keybindings_nl.md +++ b/docs/keybindings/Keybindings_nl.md @@ -17,6 +17,7 @@ [: vorige tab ]: volgende tab d: verwijder + e: Verberg gestopte containers s: stop r: herstart a: verbinden @@ -36,7 +37,7 @@ m: bekijk logs [: vorige tab ]: volgende tab - R: beijk herstart opties + R: bekijk herstart opties c: draai een vooraf bedacht aangepaste opdracht enter: focus hooft panneel diff --git a/docs/keybindings/Keybindings_pl.md b/docs/keybindings/Keybindings_pl.md index 9e65f80d..82e4cab2 100644 --- a/docs/keybindings/Keybindings_pl.md +++ b/docs/keybindings/Keybindings_pl.md @@ -17,6 +17,7 @@ [: poprzednia zakładka ]: następna zakładka d: usuń + e: Hide/Show stopped containers s: zatrzymaj r: restartuj a: przyczep diff --git a/docs/keybindings/Keybindings_tr.md b/docs/keybindings/Keybindings_tr.md index dc8bb571..30f69b5c 100644 --- a/docs/keybindings/Keybindings_tr.md +++ b/docs/keybindings/Keybindings_tr.md @@ -17,6 +17,7 @@ [: önceki sekme ]: sonraki sekme d: kaldır + e: Hide/Show stopped containers s: durdur r: yeniden başlat a: bağlan/iliştir diff --git a/pkg/commands/docker.go b/pkg/commands/docker.go index 44fc6cda..20a4d8cd 100644 --- a/pkg/commands/docker.go +++ b/pkg/commands/docker.go @@ -29,6 +29,7 @@ type DockerCommand struct { Config *config.AppConfig Client *client.Client InDockerComposeProject bool + ShowExited bool ErrorChan chan error ContainerMutex sync.Mutex ServiceMutex sync.Mutex @@ -73,6 +74,7 @@ func NewDockerCommand(log *logrus.Entry, osCommand *OSCommand, tr *i18n.Translat Config: config, Client: cli, ErrorChan: errorChan, + ShowExited: true, InDockerComposeProject: true, } @@ -213,10 +215,8 @@ func (c *DockerCommand) RefreshContainersAndServices() error { c.assignContainersToServices(containers, services) - var displayContainers []*Container - if c.Config.UserConfig.Gui.ShowAllContainers { - displayContainers = containers - } else { + var displayContainers = containers + if !c.Config.UserConfig.Gui.ShowAllContainers { displayContainers = c.obtainStandaloneContainers(containers, services) } @@ -235,7 +235,7 @@ func (c *DockerCommand) RefreshContainersAndServices() error { c.Containers = containers c.Services = services - c.DisplayContainers = displayContainers + c.DisplayContainers = c.filterOutExited(displayContainers) return nil } @@ -253,6 +253,20 @@ L: } } +// filterOutExited filters out the exited containers if c.ShowExited is false +func (c *DockerCommand) filterOutExited(containers []*Container) []*Container { + if c.ShowExited { + return containers + } + toReturn := []*Container{} + for _, container := range containers { + if container.Container.State != "exited" { + toReturn = append(toReturn, container) + } + } + return toReturn +} + // obtainStandaloneContainers returns standalone containers. Standalone containers are containers which are either one-off containers, or whose service is not part of this docker-compose context func (c *DockerCommand) obtainStandaloneContainers(containers []*Container, services []*Service) []*Container { standaloneContainers := []*Container{} diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index 22ec1d99..d1c61f5e 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -277,6 +277,7 @@ func (gui *Gui) refreshContainersAndServices() error { gui.g.Update(func(g *gocui.Gui) error { containersView.Clear() isFocused := gui.g.CurrentView().Name() == "containers" + list, err := utils.RenderList(gui.DockerCommand.DisplayContainers, utils.IsFocused(isFocused)) if err != nil { return err @@ -371,6 +372,11 @@ func (r *removeContainerOption) GetDisplayStrings(isFocused bool) []string { return []string{r.description, color.New(color.FgRed).Sprint(r.command)} } +func (gui *Gui) handleHideStoppedContainers(g *gocui.Gui, v *gocui.View) error { + gui.DockerCommand.ShowExited = !gui.DockerCommand.ShowExited + return nil +} + func (gui *Gui) handleContainersRemoveMenu(g *gocui.Gui, v *gocui.View) error { container, err := gui.getSelectedContainer() if err != nil { diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index c1fe9196..ccedcaa1 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -211,6 +211,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Handler: gui.handleContainersRemoveMenu, Description: gui.Tr.Remove, }, + { + ViewName: "containers", + Key: 'e', + Modifier: gocui.ModNone, + Handler: gui.handleHideStoppedContainers, + Description: gui.Tr.HideStopped, + }, { ViewName: "containers", Key: 's', diff --git a/pkg/i18n/dutch.go b/pkg/i18n/dutch.go index 36a0bc42..b5d642e7 100644 --- a/pkg/i18n/dutch.go +++ b/pkg/i18n/dutch.go @@ -31,6 +31,7 @@ func dutchSet() TranslationSet { EditConfig: "verander de lazydocker configuratie", Cancel: "annuleren", Remove: "verwijder", + HideStopped: "Verberg gestopte containers", ForceRemove: "geforceerd verwijderen", RemoveWithVolumes: "verwijder met volumes", RemoveService: "verwijder containers", diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 48442c0c..54384549 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -29,6 +29,7 @@ type TranslationSet struct { Cancel string CustomCommandTitle string Remove string + HideStopped string ForceRemove string RemoveWithVolumes string MustForceToRemoveContainer string @@ -113,6 +114,7 @@ func englishSet() TranslationSet { EditConfig: "edit lazydocker config", Cancel: "cancel", Remove: "remove", + HideStopped: "Hide/Show stopped containers", ForceRemove: "force remove", RemoveWithVolumes: "remove with volumes", RemoveService: "remove containers",