mirror of
https://github.com/jesseduffield/lazydocker.git
synced 2026-07-22 15:11:02 +00:00
157 lines
3.5 KiB
Go
157 lines
3.5 KiB
Go
package gui
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"syscall"
|
|
|
|
"github.com/go-errors/errors"
|
|
"github.com/jesseduffield/gocui"
|
|
)
|
|
|
|
func (gui *Gui) getStatusContexts() []string {
|
|
return []string{"logs", "credits"}
|
|
}
|
|
|
|
func (gui *Gui) refreshStatus() error {
|
|
v := gui.getStatusView()
|
|
|
|
gui.g.Update(func(*gocui.Gui) error {
|
|
v.Clear()
|
|
fmt.Fprint(v, "lazydocker")
|
|
return nil
|
|
})
|
|
|
|
return nil
|
|
}
|
|
|
|
func (gui *Gui) handleStatusSelect(g *gocui.Gui, v *gocui.View) error {
|
|
if gui.popupPanelFocused() {
|
|
return nil
|
|
}
|
|
|
|
if _, err := gui.g.SetCurrentView(v.Name()); err != nil {
|
|
return err
|
|
}
|
|
|
|
key := gui.getStatusContexts()[gui.State.Panels.Status.ContextIndex]
|
|
if gui.State.Panels.Main.ObjectKey == key {
|
|
return nil
|
|
} else {
|
|
gui.State.Panels.Main.ObjectKey = key
|
|
}
|
|
|
|
gui.clearMainView()
|
|
|
|
switch gui.getStatusContexts()[gui.State.Panels.Status.ContextIndex] {
|
|
case "credits":
|
|
if err := gui.renderCredits(); err != nil {
|
|
return err
|
|
}
|
|
case "logs":
|
|
if err := gui.renderAllLogs(); err != nil {
|
|
return err
|
|
}
|
|
default:
|
|
return errors.New("Unknown context for status panel")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (gui *Gui) renderCredits() error {
|
|
mainView := gui.getMainView()
|
|
mainView.Autoscroll = false
|
|
mainView.Title = "about"
|
|
|
|
dashboardString := strings.Join(
|
|
[]string{
|
|
lazydockerTitle(),
|
|
"Copyright (c) 2019 Jesse Duffield",
|
|
"Keybindings: https://github.com/jesseduffield/lazydocker/blob/master/docs/keybindings",
|
|
"Config Options: https://github.com/jesseduffield/lazydocker/blob/master/docs/Config.md",
|
|
"Raise an Issue: https://github.com/jesseduffield/lazydocker/issues",
|
|
}, "\n\n")
|
|
|
|
go gui.T.NewTask(func(stop chan struct{}) {
|
|
gui.renderString(gui.g, "main", dashboardString)
|
|
})
|
|
|
|
return nil
|
|
}
|
|
|
|
func (gui *Gui) renderAllLogs() error {
|
|
mainView := gui.getMainView()
|
|
mainView.Autoscroll = true
|
|
mainView.Title = "logs"
|
|
|
|
go gui.T.NewTask(func(stop chan struct{}) {
|
|
gui.clearMainView()
|
|
|
|
cmd := gui.OSCommand.RunCustomCommand(gui.Config.UserConfig.CommandTemplates.AllLogs)
|
|
|
|
cmd.Stdout = mainView
|
|
cmd.Stderr = mainView
|
|
|
|
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
|
|
cmd.Start()
|
|
|
|
go func() {
|
|
<-stop
|
|
if err := gui.OSCommand.Kill(cmd); err != nil {
|
|
gui.Log.Error(err)
|
|
}
|
|
}()
|
|
|
|
cmd.Wait()
|
|
})
|
|
|
|
return nil
|
|
}
|
|
|
|
func (gui *Gui) handleOpenConfig(g *gocui.Gui, v *gocui.View) error {
|
|
return gui.openFile(gui.Config.ConfigFilename())
|
|
}
|
|
|
|
func (gui *Gui) handleEditConfig(g *gocui.Gui, v *gocui.View) error {
|
|
return gui.editFile(gui.Config.ConfigFilename())
|
|
}
|
|
|
|
func lazydockerTitle() string {
|
|
return `
|
|
_ _ _
|
|
| | | | | |
|
|
| | __ _ _____ _ __| | ___ ___| | _____ _ __
|
|
| |/ _` + "`" + ` |_ / | | |/ _` + "`" + ` |/ _ \ / __| |/ / _ \ '__|
|
|
| | (_| |/ /| |_| | (_| | (_) | (__| < __/ |
|
|
|_|\__,_/___|\__, |\__,_|\___/ \___|_|\_\___|_|
|
|
__/ |
|
|
|___/
|
|
`
|
|
}
|
|
|
|
func (gui *Gui) handleStatusPrevContext(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
|
|
} else {
|
|
gui.State.Panels.Status.ContextIndex++
|
|
}
|
|
|
|
gui.handleStatusSelect(gui.g, v)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (gui *Gui) handleStatusNextContext(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
|
|
} else {
|
|
gui.State.Panels.Status.ContextIndex--
|
|
}
|
|
|
|
gui.handleStatusSelect(gui.g, v)
|
|
|
|
return nil
|
|
}
|