mirror of
https://github.com/jesseduffield/lazydocker.git
synced 2026-07-25 08:31:03 +00:00
more progress
This commit is contained in:
parent
6bbd22bb8d
commit
1585b30904
5 changed files with 71 additions and 24 deletions
|
|
@ -113,13 +113,7 @@ func (gui *Gui) createPopupPanel(g *gocui.Gui, currentView *gocui.View, title, p
|
||||||
// delete the existing confirmation panel if it exists
|
// delete the existing confirmation panel if it exists
|
||||||
if view, _ := g.View("confirmation"); view != nil {
|
if view, _ := g.View("confirmation"); view != nil {
|
||||||
if err := gui.closeConfirmationPrompt(g); err != nil {
|
if err := gui.closeConfirmationPrompt(g); err != nil {
|
||||||
errMessage := gui.Tr.TemplateLocalize(
|
gui.Log.Error(err.Error())
|
||||||
"CantCloseConfirmationPrompt",
|
|
||||||
Teml{
|
|
||||||
"error": err.Error(),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
gui.Log.Error(errMessage)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
confirmationView, err := gui.prepareConfirmationPanel(currentView, title, prompt, hasLoader)
|
confirmationView, err := gui.prepareConfirmationPanel(currentView, title, prompt, hasLoader)
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
package gui
|
package gui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-errors/errors"
|
||||||
"github.com/jesseduffield/gocui"
|
"github.com/jesseduffield/gocui"
|
||||||
"github.com/jesseduffield/lazydocker/pkg/commands"
|
"github.com/jesseduffield/lazydocker/pkg/commands"
|
||||||
"github.com/jesseduffield/lazydocker/pkg/utils"
|
"github.com/jesseduffield/lazydocker/pkg/utils"
|
||||||
|
|
@ -12,6 +14,10 @@ import (
|
||||||
|
|
||||||
// list panel functions
|
// list panel functions
|
||||||
|
|
||||||
|
func (gui *Gui) getContainerContexts() []string {
|
||||||
|
return []string{"logs", "config"}
|
||||||
|
}
|
||||||
|
|
||||||
func (gui *Gui) getSelectedContainer(g *gocui.Gui) (*commands.Container, error) {
|
func (gui *Gui) getSelectedContainer(g *gocui.Gui) (*commands.Container, error) {
|
||||||
selectedLine := gui.State.Panels.Containers.SelectedLine
|
selectedLine := gui.State.Panels.Containers.SelectedLine
|
||||||
if selectedLine == -1 {
|
if selectedLine == -1 {
|
||||||
|
|
@ -62,11 +68,6 @@ func (gui *Gui) handleContainerSelect(g *gocui.Gui, v *gocui.View, alreadySelect
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// data, err := json.MarshalIndent(&container.Container, "", " ")
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
|
|
||||||
mainView := gui.getMainView()
|
mainView := gui.getMainView()
|
||||||
|
|
||||||
gui.State.MainWriterID++
|
gui.State.MainWriterID++
|
||||||
|
|
@ -76,16 +77,38 @@ func (gui *Gui) handleContainerSelect(g *gocui.Gui, v *gocui.View, alreadySelect
|
||||||
mainView.SetOrigin(0, 0)
|
mainView.SetOrigin(0, 0)
|
||||||
mainView.SetCursor(0, 0)
|
mainView.SetCursor(0, 0)
|
||||||
|
|
||||||
if err := gui.renderLogs(mainView, container, writerID); err != nil {
|
switch gui.getContainerContexts()[gui.State.Panels.Containers.ContextIndex] {
|
||||||
return err
|
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
|
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.Autoscroll = true
|
||||||
|
mainView.Title = "Logs"
|
||||||
|
|
||||||
var cmd *exec.Cmd
|
var cmd *exec.Cmd
|
||||||
cmd = gui.OSCommand.RunCustomCommand("docker logs --since=60m --timestamps --follow " + container.ID)
|
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 {
|
func (gui *Gui) handleContainerPress(g *gocui.Gui, v *gocui.View) error {
|
||||||
return nil
|
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
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@ type Gui struct {
|
||||||
|
|
||||||
type containerPanelState struct {
|
type containerPanelState struct {
|
||||||
SelectedLine int
|
SelectedLine int
|
||||||
|
ContextIndex int // for specifying if you are looking at logs/stats/config/etc
|
||||||
}
|
}
|
||||||
|
|
||||||
type menuPanelState struct {
|
type menuPanelState struct {
|
||||||
|
|
@ -105,7 +106,7 @@ func NewGui(log *logrus.Entry, dockerCommand *commands.DockerCommand, oSCommand
|
||||||
PreviousView: "containers",
|
PreviousView: "containers",
|
||||||
Platform: *oSCommand.Platform,
|
Platform: *oSCommand.Platform,
|
||||||
Panels: &panelStates{
|
Panels: &panelStates{
|
||||||
Containers: &containerPanelState{SelectedLine: -1},
|
Containers: &containerPanelState{SelectedLine: -1, ContextIndex: 0},
|
||||||
Menu: &menuPanelState{SelectedLine: 0},
|
Menu: &menuPanelState{SelectedLine: 0},
|
||||||
},
|
},
|
||||||
MainWriterID: 0,
|
MainWriterID: 0,
|
||||||
|
|
@ -290,7 +291,6 @@ func (gui *Gui) layout(g *gocui.Gui) error {
|
||||||
if err.Error() != "unknown view" {
|
if err.Error() != "unknown view" {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
v.Title = gui.Tr.SLocalize("DiffTitle")
|
|
||||||
v.Wrap = true
|
v.Wrap = true
|
||||||
v.FgColor = gocui.ColorWhite
|
v.FgColor = gocui.ColorWhite
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,16 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
|
||||||
Key: gocui.MouseLeft,
|
Key: gocui.MouseLeft,
|
||||||
Modifier: gocui.ModNone,
|
Modifier: gocui.ModNone,
|
||||||
Handler: gui.handleDonate,
|
Handler: gui.handleDonate,
|
||||||
|
}, {
|
||||||
|
ViewName: "containers",
|
||||||
|
Key: '[',
|
||||||
|
Modifier: gocui.ModNone,
|
||||||
|
Handler: gui.handleContainersPrevContext,
|
||||||
|
}, {
|
||||||
|
ViewName: "containers",
|
||||||
|
Key: ']',
|
||||||
|
Modifier: gocui.ModNone,
|
||||||
|
Handler: gui.handleContainersNextContext,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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())
|
gui.Log.Info("setting highlight to true for view" + newView.Name())
|
||||||
message := gui.Tr.TemplateLocalize(
|
gui.Log.Info("new focused view is " + newView.Name())
|
||||||
"newFocusedViewIs",
|
|
||||||
Teml{
|
|
||||||
"newFocusedView": newView.Name(),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
gui.Log.Info(message)
|
|
||||||
if _, err := g.SetCurrentView(newView.Name()); err != nil {
|
if _, err := g.SetCurrentView(newView.Name()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue