diff --git a/pkg/gui/confirmation_panel.go b/pkg/gui/confirmation_panel.go index 51ad711c..6467facf 100644 --- a/pkg/gui/confirmation_panel.go +++ b/pkg/gui/confirmation_panel.go @@ -113,13 +113,7 @@ func (gui *Gui) createPopupPanel(g *gocui.Gui, currentView *gocui.View, title, p // delete the existing confirmation panel if it exists if view, _ := g.View("confirmation"); view != nil { if err := gui.closeConfirmationPrompt(g); err != nil { - errMessage := gui.Tr.TemplateLocalize( - "CantCloseConfirmationPrompt", - Teml{ - "error": err.Error(), - }, - ) - gui.Log.Error(errMessage) + gui.Log.Error(err.Error()) } } confirmationView, err := gui.prepareConfirmationPanel(currentView, title, prompt, hasLoader) diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index cbab4dd0..baecdae5 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -1,10 +1,12 @@ package gui import ( + "encoding/json" "fmt" "os/exec" "time" + "github.com/go-errors/errors" "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazydocker/pkg/commands" "github.com/jesseduffield/lazydocker/pkg/utils" @@ -12,6 +14,10 @@ import ( // list panel functions +func (gui *Gui) getContainerContexts() []string { + return []string{"logs", "config"} +} + func (gui *Gui) getSelectedContainer(g *gocui.Gui) (*commands.Container, error) { selectedLine := gui.State.Panels.Containers.SelectedLine if selectedLine == -1 { @@ -62,11 +68,6 @@ func (gui *Gui) handleContainerSelect(g *gocui.Gui, v *gocui.View, alreadySelect return err } - // data, err := json.MarshalIndent(&container.Container, "", " ") - // if err != nil { - // return err - // } - mainView := gui.getMainView() gui.State.MainWriterID++ @@ -76,16 +77,38 @@ func (gui *Gui) handleContainerSelect(g *gocui.Gui, v *gocui.View, alreadySelect mainView.SetOrigin(0, 0) mainView.SetCursor(0, 0) - if err := gui.renderLogs(mainView, container, writerID); err != nil { - return err + switch gui.getContainerContexts()[gui.State.Panels.Containers.ContextIndex] { + case "logs": + if err := gui.renderLogs(mainView, container, writerID); err != nil { + return err + } + case "config": + if err := gui.renderConfig(mainView, container, writerID); err != nil { + return err + } + default: + return errors.New("Unknown context for containers panel") } return nil } -func (gui *Gui) renderLogs(mainView *gocui.View, container *commands.Container, writerID int) error { +func (gui *Gui) renderConfig(mainView *gocui.View, container *commands.Container, writerID int) error { + mainView.Autoscroll = false + mainView.Title = "Config" + data, err := json.MarshalIndent(&container.Container, "", " ") + if err != nil { + return err + } + gui.renderString(gui.g, "main", string(data)) + + return nil +} + +func (gui *Gui) renderLogs(mainView *gocui.View, container *commands.Container, writerID int) error { mainView.Autoscroll = true + mainView.Title = "Logs" var cmd *exec.Cmd cmd = gui.OSCommand.RunCustomCommand("docker logs --since=60m --timestamps --follow " + container.ID) @@ -179,3 +202,29 @@ func (gui *Gui) handleContainersPrevLine(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleContainerPress(g *gocui.Gui, v *gocui.View) error { return nil } + +func (gui *Gui) handleContainersPrevContext(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 + } else { + gui.State.Panels.Containers.ContextIndex++ + } + + gui.handleContainerSelect(gui.g, v, true) + + return nil +} + +func (gui *Gui) handleContainersNextContext(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 + } else { + gui.State.Panels.Containers.ContextIndex-- + } + + gui.handleContainerSelect(gui.g, v, true) + + return nil +} diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index 9afaf592..35334ca0 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -75,6 +75,7 @@ type Gui struct { type containerPanelState struct { SelectedLine int + ContextIndex int // for specifying if you are looking at logs/stats/config/etc } type menuPanelState struct { @@ -105,7 +106,7 @@ func NewGui(log *logrus.Entry, dockerCommand *commands.DockerCommand, oSCommand PreviousView: "containers", Platform: *oSCommand.Platform, Panels: &panelStates{ - Containers: &containerPanelState{SelectedLine: -1}, + Containers: &containerPanelState{SelectedLine: -1, ContextIndex: 0}, Menu: &menuPanelState{SelectedLine: 0}, }, MainWriterID: 0, @@ -290,7 +291,6 @@ func (gui *Gui) layout(g *gocui.Gui) error { if err.Error() != "unknown view" { return err } - v.Title = gui.Tr.SLocalize("DiffTitle") v.Wrap = true v.FgColor = gocui.ColorWhite } diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index bd932b8d..e51b358a 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -138,6 +138,16 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Key: gocui.MouseLeft, Modifier: gocui.ModNone, Handler: gui.handleDonate, + }, { + ViewName: "containers", + Key: '[', + Modifier: gocui.ModNone, + Handler: gui.handleContainersPrevContext, + }, { + ViewName: "containers", + Key: ']', + Modifier: gocui.ModNone, + Handler: gui.handleContainersNextContext, }, } diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index 561b0c7f..ca2849c9 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -107,13 +107,7 @@ func (gui *Gui) switchFocus(g *gocui.Gui, oldView, newView *gocui.View) error { } gui.Log.Info("setting highlight to true for view" + newView.Name()) - message := gui.Tr.TemplateLocalize( - "newFocusedViewIs", - Teml{ - "newFocusedView": newView.Name(), - }, - ) - gui.Log.Info(message) + gui.Log.Info("new focused view is " + newView.Name()) if _, err := g.SetCurrentView(newView.Name()); err != nil { return err }