mirror of
https://github.com/jesseduffield/lazydocker.git
synced 2026-07-25 08:31:03 +00:00
gui: improve and fix PreviousViews stack
This commit is contained in:
parent
f95b49cd6b
commit
cfd4b7a1cc
4 changed files with 40 additions and 14 deletions
|
|
@ -132,10 +132,6 @@ type guiState struct {
|
||||||
|
|
||||||
// NewGui builds a new gui handler
|
// NewGui builds a new gui handler
|
||||||
func NewGui(log *logrus.Entry, dockerCommand *commands.DockerCommand, oSCommand *commands.OSCommand, tr *i18n.TranslationSet, config *config.AppConfig, errorChan chan error) (*Gui, error) {
|
func NewGui(log *logrus.Entry, dockerCommand *commands.DockerCommand, oSCommand *commands.OSCommand, tr *i18n.TranslationSet, config *config.AppConfig, errorChan chan error) (*Gui, error) {
|
||||||
previousViews := stack.New()
|
|
||||||
// push dummy initial string
|
|
||||||
previousViews.Push("")
|
|
||||||
|
|
||||||
initialState := guiState{
|
initialState := guiState{
|
||||||
Platform: *oSCommand.Platform,
|
Platform: *oSCommand.Platform,
|
||||||
Panels: &panelStates{
|
Panels: &panelStates{
|
||||||
|
|
@ -150,9 +146,19 @@ func NewGui(log *logrus.Entry, dockerCommand *commands.DockerCommand, oSCommand
|
||||||
Project: &projectState{ContextIndex: 0},
|
Project: &projectState{ContextIndex: 0},
|
||||||
},
|
},
|
||||||
SessionIndex: 0,
|
SessionIndex: 0,
|
||||||
PreviousViews: previousViews,
|
PreviousViews: stack.New(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// debugging PreviousViews
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
<-time.After(time.Second * 2)
|
||||||
|
log.Println("HERE", initialState.PreviousViews.Len())
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
*/
|
||||||
|
|
||||||
cyclableViews := []string{"project", "containers", "images", "volumes"}
|
cyclableViews := []string{"project", "containers", "images", "volumes"}
|
||||||
if dockerCommand.InDockerComposeProject {
|
if dockerCommand.InDockerComposeProject {
|
||||||
cyclableViews = []string{"project", "services", "containers", "images", "volumes"}
|
cyclableViews = []string{"project", "services", "containers", "images", "volumes"}
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
currView := gui.g.CurrentView()
|
currView := gui.g.CurrentView()
|
||||||
currentCyclebleView := gui.State.PreviousViews.Peek().(string)
|
currentCyclebleView := gui.peekPreviousView()
|
||||||
if currView != nil {
|
if currView != nil {
|
||||||
viewName := currView.Name()
|
viewName := currView.Name()
|
||||||
usePreviouseView := true
|
usePreviouseView := true
|
||||||
|
|
@ -106,7 +106,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if usePreviouseView {
|
if usePreviouseView {
|
||||||
currentCyclebleView = gui.State.PreviousViews.Peek().(string)
|
currentCyclebleView = gui.peekPreviousView()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -273,7 +273,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if gui.g.CurrentView() == nil {
|
if gui.g.CurrentView() == nil {
|
||||||
v, err := gui.g.View(gui.State.PreviousViews.Peek().(string))
|
v, err := gui.g.View(gui.peekPreviousView())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
viewName := gui.initiallyFocusedViewName()
|
viewName := gui.initiallyFocusedViewName()
|
||||||
v, err = gui.g.View(viewName)
|
v, err = gui.g.View(viewName)
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ func (gui *Gui) RunWithSubprocesses() error {
|
||||||
break
|
break
|
||||||
} else if err == gui.Errors.ErrSubProcess {
|
} else if err == gui.Errors.ErrSubProcess {
|
||||||
// preparing the state for when we return
|
// preparing the state for when we return
|
||||||
gui.State.PreviousViews.Push(gui.currentViewName())
|
gui.pushPreviousView(gui.currentViewName())
|
||||||
// giving goEvery goroutines time to finish
|
// giving goEvery goroutines time to finish
|
||||||
gui.State.SessionIndex++
|
gui.State.SessionIndex++
|
||||||
|
|
||||||
|
|
@ -31,7 +31,7 @@ func (gui *Gui) RunWithSubprocesses() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// pop here so we don't stack up view names
|
// pop here so we don't stack up view names
|
||||||
gui.State.PreviousViews.Pop()
|
gui.popPreviousView()
|
||||||
// ensuring we render e.g. the logs of the currently selected item upon return
|
// ensuring we render e.g. the logs of the currently selected item upon return
|
||||||
gui.State.Panels.Main.ObjectKey = ""
|
gui.State.Panels.Main.ObjectKey = ""
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ func (gui *Gui) nextView(g *gocui.Gui, v *gocui.View) error {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
gui.resetMainView()
|
gui.resetMainView()
|
||||||
gui.State.PreviousViews.Pop()
|
gui.popPreviousView()
|
||||||
return gui.switchFocus(g, v, focusedView, false)
|
return gui.switchFocus(g, v, focusedView, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -67,7 +67,7 @@ func (gui *Gui) previousView(g *gocui.Gui, v *gocui.View) error {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
gui.resetMainView()
|
gui.resetMainView()
|
||||||
gui.State.PreviousViews.Pop()
|
gui.popPreviousView()
|
||||||
return gui.switchFocus(g, v, focusedView, false)
|
return gui.switchFocus(g, v, focusedView, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -104,8 +104,28 @@ func (gui *Gui) newLineFocused(v *gocui.View) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) popPreviousView() string {
|
||||||
|
if gui.State.PreviousViews.Len() > 0 {
|
||||||
|
return gui.State.PreviousViews.Pop().(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) peekPreviousView() string {
|
||||||
|
if gui.State.PreviousViews.Len() > 0 {
|
||||||
|
return gui.State.PreviousViews.Peek().(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) pushPreviousView(name string) {
|
||||||
|
gui.State.PreviousViews.Push(name)
|
||||||
|
}
|
||||||
|
|
||||||
func (gui *Gui) returnFocus(g *gocui.Gui, v *gocui.View) error {
|
func (gui *Gui) returnFocus(g *gocui.Gui, v *gocui.View) error {
|
||||||
previousViewName := gui.State.PreviousViews.Pop().(string)
|
previousViewName := gui.popPreviousView()
|
||||||
previousView, err := g.View(previousViewName)
|
previousView, err := g.View(previousViewName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// always fall back to services view if there's no 'previous' view stored
|
// always fall back to services view if there's no 'previous' view stored
|
||||||
|
|
@ -123,7 +143,7 @@ func (gui *Gui) switchFocus(g *gocui.Gui, oldView, newView *gocui.View, returnin
|
||||||
// we assume we'll never want to return focus to a popup panel i.e.
|
// we assume we'll never want to return focus to a popup panel i.e.
|
||||||
// we should never stack popup panels
|
// we should never stack popup panels
|
||||||
if oldView != nil && !gui.isPopupPanel(oldView.Name()) && !returning {
|
if oldView != nil && !gui.isPopupPanel(oldView.Name()) && !returning {
|
||||||
gui.State.PreviousViews.Push(oldView.Name())
|
gui.pushPreviousView(oldView.Name())
|
||||||
}
|
}
|
||||||
|
|
||||||
gui.Log.Info("setting highlight to true for view " + newView.Name())
|
gui.Log.Info("setting highlight to true for view " + newView.Name())
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue