diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index 2ab25964..eea774e9 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -19,7 +19,11 @@ import ( // list panel functions func (gui *Gui) getContainerContexts() []string { - return []string{"logs", "config", "stats"} + return []string{"logs", "stats", "config"} +} + +func (gui *Gui) getContainerContextTitles() []string { + return []string{gui.Tr.LogsTitle, gui.Tr.StatsTitle, gui.Tr.ConfigTitle} } func (gui *Gui) getSelectedContainer(g *gocui.Gui) (*commands.Container, error) { @@ -80,20 +84,22 @@ func (gui *Gui) handleContainerSelect(g *gocui.Gui, v *gocui.View) error { } mainView := gui.getMainView() + mainView.Tabs = gui.getContainerContextTitles() + mainView.TabIndex = gui.State.Panels.Containers.ContextIndex gui.clearMainView() switch gui.getContainerContexts()[gui.State.Panels.Containers.ContextIndex] { case "logs": - if err := gui.renderContainerLogs(mainView, container); err != nil { + if err := gui.renderContainerLogs(container); err != nil { return err } case "config": - if err := gui.renderContainerConfig(mainView, container); err != nil { + if err := gui.renderContainerConfig(container); err != nil { return err } case "stats": - if err := gui.renderContainerStats(mainView, container); err != nil { + if err := gui.renderContainerStats(container); err != nil { return err } default: @@ -103,9 +109,10 @@ func (gui *Gui) handleContainerSelect(g *gocui.Gui, v *gocui.View) error { return nil } -func (gui *Gui) renderContainerConfig(mainView *gocui.View, container *commands.Container) error { +func (gui *Gui) renderContainerConfig(container *commands.Container) error { + mainView := gui.getMainView() mainView.Autoscroll = false - mainView.Title = "Config" + mainView.Wrap = true data, err := json.MarshalIndent(&container.Details, "", " ") if err != nil { @@ -119,9 +126,9 @@ func (gui *Gui) renderContainerConfig(mainView *gocui.View, container *commands. return nil } -func (gui *Gui) renderContainerStats(mainView *gocui.View, container *commands.Container) error { +func (gui *Gui) renderContainerStats(container *commands.Container) error { + mainView := gui.getMainView() mainView.Autoscroll = false - mainView.Title = "Stats" mainView.Wrap = false return gui.T.NewTickerTask(time.Second, func(stop chan struct{}) { gui.clearMainView() }, func(stop, notifyStopped chan struct{}) { @@ -136,9 +143,10 @@ func (gui *Gui) renderContainerStats(mainView *gocui.View, container *commands.C }) } -func (gui *Gui) renderContainerLogs(mainView *gocui.View, container *commands.Container) error { +func (gui *Gui) renderContainerLogs(container *commands.Container) error { + mainView := gui.getMainView() mainView.Autoscroll = true - mainView.Title = "Logs" + mainView.Wrap = true if container.Details.Config.OpenStdin { return gui.renderLogsForTTYContainer(container) @@ -332,7 +340,7 @@ func (gui *Gui) handleContainersPrevLine(g *gocui.Gui, v *gocui.View) error { return gui.handleContainerSelect(gui.g, v) } -func (gui *Gui) handleContainersPrevContext(g *gocui.Gui, v *gocui.View) error { +func (gui *Gui) handleContainersNextContext(g *gocui.Gui, v *gocui.View) error { contexts := gui.getContainerContexts() if gui.State.Panels.Containers.ContextIndex >= len(contexts)-1 { gui.State.Panels.Containers.ContextIndex = 0 @@ -345,7 +353,7 @@ func (gui *Gui) handleContainersPrevContext(g *gocui.Gui, v *gocui.View) error { return nil } -func (gui *Gui) handleContainersNextContext(g *gocui.Gui, v *gocui.View) error { +func (gui *Gui) handleContainersPrevContext(g *gocui.Gui, v *gocui.View) error { contexts := gui.getContainerContexts() if gui.State.Panels.Containers.ContextIndex <= 0 { gui.State.Panels.Containers.ContextIndex = len(contexts) - 1 diff --git a/pkg/gui/images_panel.go b/pkg/gui/images_panel.go index 9142d759..21b37489 100644 --- a/pkg/gui/images_panel.go +++ b/pkg/gui/images_panel.go @@ -19,6 +19,10 @@ func (gui *Gui) getImageContexts() []string { return []string{"config"} } +func (gui *Gui) getImageContextTitles() []string { + return []string{gui.Tr.ConfigTitle} +} + func (gui *Gui) getSelectedImage(g *gocui.Gui) (*commands.Image, error) { selectedLine := gui.State.Panels.Images.SelectedLine if selectedLine == -1 { @@ -77,6 +81,8 @@ func (gui *Gui) handleImageSelect(g *gocui.Gui, v *gocui.View) error { } mainView := gui.getMainView() + mainView.Tabs = gui.getImageContextTitles() + mainView.TabIndex = gui.State.Panels.Images.ContextIndex switch gui.getImageContexts()[gui.State.Panels.Images.ContextIndex] { case "config": @@ -107,7 +113,6 @@ func (gui *Gui) renderImageConfig(mainView *gocui.View, image *commands.Image) e mainView.Autoscroll = false mainView.Wrap = false - mainView.Title = "Config" gui.renderString(gui.g, "main", output) }) @@ -188,7 +193,7 @@ func (gui *Gui) handleImagePress(g *gocui.Gui, v *gocui.View) error { return nil } -func (gui *Gui) handleImagesPrevContext(g *gocui.Gui, v *gocui.View) error { +func (gui *Gui) handleImagesNextContext(g *gocui.Gui, v *gocui.View) error { contexts := gui.getImageContexts() if gui.State.Panels.Images.ContextIndex >= len(contexts)-1 { gui.State.Panels.Images.ContextIndex = 0 @@ -201,7 +206,7 @@ func (gui *Gui) handleImagesPrevContext(g *gocui.Gui, v *gocui.View) error { return nil } -func (gui *Gui) handleImagesNextContext(g *gocui.Gui, v *gocui.View) error { +func (gui *Gui) handleImagesPrevContext(g *gocui.Gui, v *gocui.View) error { contexts := gui.getImageContexts() if gui.State.Panels.Images.ContextIndex <= 0 { gui.State.Panels.Images.ContextIndex = len(contexts) - 1 diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go index e09e1177..201736ce 100644 --- a/pkg/gui/services_panel.go +++ b/pkg/gui/services_panel.go @@ -14,7 +14,11 @@ import ( // list panel functions func (gui *Gui) getServiceContexts() []string { - return []string{"logs", "config", "stats"} + return []string{"logs", "stats", "config"} +} + +func (gui *Gui) getServiceContextTitles() []string { + return []string{gui.Tr.LogsTitle, gui.Tr.StatsTitle, gui.Tr.ConfigTitle} } func (gui *Gui) getSelectedService() (*commands.Service, error) { @@ -73,17 +77,20 @@ func (gui *Gui) handleServiceSelect(g *gocui.Gui, v *gocui.View) error { mainView := gui.getMainView() + mainView.Tabs = gui.getServiceContextTitles() + mainView.TabIndex = gui.State.Panels.Services.ContextIndex + switch gui.getServiceContexts()[gui.State.Panels.Services.ContextIndex] { case "logs": - if err := gui.renderServiceLogs(mainView, service); err != nil { + if err := gui.renderServiceLogs(service); err != nil { return err } case "config": - if err := gui.renderServiceConfig(mainView, service); err != nil { + if err := gui.renderServiceConfig(service); err != nil { return err } case "stats": - if err := gui.renderServiceStats(mainView, service); err != nil { + if err := gui.renderServiceStats(service); err != nil { return err } default: @@ -93,9 +100,10 @@ func (gui *Gui) handleServiceSelect(g *gocui.Gui, v *gocui.View) error { return nil } -func (gui *Gui) renderServiceConfig(mainView *gocui.View, service *commands.Service) error { +func (gui *Gui) renderServiceConfig(service *commands.Service) error { + mainView := gui.getMainView() mainView.Autoscroll = false - mainView.Title = "Config" + mainView.Wrap = true go gui.T.NewTask(func(stop chan struct{}) { // TODO: actually show service config @@ -110,15 +118,15 @@ func (gui *Gui) renderServiceConfig(mainView *gocui.View, service *commands.Serv return nil } -func (gui *Gui) renderServiceStats(mainView *gocui.View, service *commands.Service) error { +func (gui *Gui) renderServiceStats(service *commands.Service) error { if service.Container == nil { return nil } - return gui.renderContainerStats(mainView, service.Container) + return gui.renderContainerStats(service.Container) } -func (gui *Gui) renderServiceLogs(mainView *gocui.View, service *commands.Service) error { +func (gui *Gui) renderServiceLogs(service *commands.Service) error { service, err := gui.getSelectedService() if err != nil { return nil @@ -131,7 +139,7 @@ func (gui *Gui) renderServiceLogs(mainView *gocui.View, service *commands.Servic return nil } - return gui.renderContainerLogs(gui.getMainView(), service.Container) + return gui.renderContainerLogs(service.Container) } func (gui *Gui) handleServicesNextLine(g *gocui.Gui, v *gocui.View) error { @@ -156,7 +164,7 @@ func (gui *Gui) handleServicesPrevLine(g *gocui.Gui, v *gocui.View) error { return gui.handleServiceSelect(gui.g, v) } -func (gui *Gui) handleServicesPrevContext(g *gocui.Gui, v *gocui.View) error { +func (gui *Gui) handleServicesNextContext(g *gocui.Gui, v *gocui.View) error { contexts := gui.getServiceContexts() if gui.State.Panels.Services.ContextIndex >= len(contexts)-1 { gui.State.Panels.Services.ContextIndex = 0 @@ -169,7 +177,7 @@ func (gui *Gui) handleServicesPrevContext(g *gocui.Gui, v *gocui.View) error { return nil } -func (gui *Gui) handleServicesNextContext(g *gocui.Gui, v *gocui.View) error { +func (gui *Gui) handleServicesPrevContext(g *gocui.Gui, v *gocui.View) error { contexts := gui.getServiceContexts() if gui.State.Panels.Services.ContextIndex <= 0 { gui.State.Panels.Services.ContextIndex = len(contexts) - 1 diff --git a/pkg/gui/status_panel.go b/pkg/gui/status_panel.go index 418e3576..d4dd7c4a 100644 --- a/pkg/gui/status_panel.go +++ b/pkg/gui/status_panel.go @@ -13,6 +13,10 @@ func (gui *Gui) getStatusContexts() []string { return []string{"logs", "credits"} } +func (gui *Gui) getStatusContextTitles() []string { + return []string{gui.Tr.LogsTitle, gui.Tr.CreditsTitle} +} + func (gui *Gui) refreshStatus() error { v := gui.getStatusView() @@ -43,6 +47,10 @@ func (gui *Gui) handleStatusSelect(g *gocui.Gui, v *gocui.View) error { gui.clearMainView() + mainView := gui.getMainView() + mainView.Tabs = gui.getStatusContextTitles() + mainView.TabIndex = gui.State.Panels.Status.ContextIndex + switch gui.getStatusContexts()[gui.State.Panels.Status.ContextIndex] { case "credits": if err := gui.renderCredits(); err != nil { @@ -62,7 +70,7 @@ func (gui *Gui) handleStatusSelect(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) renderCredits() error { mainView := gui.getMainView() mainView.Autoscroll = false - mainView.Title = "about" + mainView.Wrap = true dashboardString := strings.Join( []string{ @@ -83,7 +91,7 @@ func (gui *Gui) renderCredits() error { func (gui *Gui) renderAllLogs() error { mainView := gui.getMainView() mainView.Autoscroll = true - mainView.Title = "logs" + mainView.Wrap = true go gui.T.NewTask(func(stop chan struct{}) { gui.clearMainView() @@ -130,7 +138,7 @@ func lazydockerTitle() string { ` } -func (gui *Gui) handleStatusPrevContext(g *gocui.Gui, v *gocui.View) error { +func (gui *Gui) handleStatusNextContext(g *gocui.Gui, v *gocui.View) error { contexts := gui.getStatusContexts() if gui.State.Panels.Status.ContextIndex >= len(contexts)-1 { gui.State.Panels.Status.ContextIndex = 0 @@ -143,7 +151,7 @@ func (gui *Gui) handleStatusPrevContext(g *gocui.Gui, v *gocui.View) error { return nil } -func (gui *Gui) handleStatusNextContext(g *gocui.Gui, v *gocui.View) error { +func (gui *Gui) handleStatusPrevContext(g *gocui.Gui, v *gocui.View) error { contexts := gui.getStatusContexts() if gui.State.Panels.Status.ContextIndex <= 0 { gui.State.Panels.Status.ContextIndex = len(contexts) - 1 diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index c99131fe..56433173 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -55,6 +55,11 @@ type TranslationSet struct { StopService string PressEnterToReturn string ViewRestartOptions string + + LogsTitle string + ConfigTitle string + StatsTitle string + CreditsTitle string } func englishSet() TranslationSet { @@ -105,6 +110,10 @@ func englishSet() TranslationSet { ImagesTitle: "Images", CustomCommandTitle: "Custom Command:", ErrorTitle: "Error", + LogsTitle: "Logs", + ConfigTitle: "Config", + StatsTitle: "Stats", + CreditsTitle: "About", NoContainers: "No containers", NoImages: "No images", diff --git a/test/testmain/main.go b/test/testmain/main.go index ecdf844e..cb825708 100644 --- a/test/testmain/main.go +++ b/test/testmain/main.go @@ -1,17 +1,9 @@ package main -import ( - "os" - "os/exec" - "strings" -) +import "fmt" func main() { - cmd := exec.Command("docker", strings.Split("logs --follow 29754cb1ab9a", " ")...) - - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - - cmd.Start() - cmd.Wait() + var arr []string + arr = nil + fmt.Println(len(arr)) }