mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-04-23 12:18:51 +02:00
move quit actions to controller
This commit is contained in:
parent
6388885699
commit
037cd99138
@ -87,6 +87,26 @@ func (self *GlobalController) GetKeybindings(opts types.KeybindingsOpts) []*type
|
|||||||
Description: self.c.Tr.LcOpenDiffingMenu,
|
Description: self.c.Tr.LcOpenDiffingMenu,
|
||||||
OpensMenu: true,
|
OpensMenu: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Key: opts.GetKey(opts.Config.Universal.Quit),
|
||||||
|
Modifier: gocui.ModNone,
|
||||||
|
Handler: self.quit,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: opts.GetKey(opts.Config.Universal.QuitAlt1),
|
||||||
|
Modifier: gocui.ModNone,
|
||||||
|
Handler: self.quit,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: opts.GetKey(opts.Config.Universal.QuitWithoutChangingDirectory),
|
||||||
|
Modifier: gocui.ModNone,
|
||||||
|
Handler: self.quitWithoutChangingDirectory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: opts.GetKey(opts.Config.Universal.Return),
|
||||||
|
Modifier: gocui.ModNone,
|
||||||
|
Handler: self.escape,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,3 +145,15 @@ func (self *GlobalController) createFilteringMenu() error {
|
|||||||
func (self *GlobalController) createDiffingMenu() error {
|
func (self *GlobalController) createDiffingMenu() error {
|
||||||
return (&DiffingMenuAction{c: self.c}).Call()
|
return (&DiffingMenuAction{c: self.c}).Call()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *GlobalController) quit() error {
|
||||||
|
return (&QuitActions{c: self.c}).Quit()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *GlobalController) quitWithoutChangingDirectory() error {
|
||||||
|
return (&QuitActions{c: self.c}).QuitWithoutChangingDirectory()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *GlobalController) escape() error {
|
||||||
|
return (&QuitActions{c: self.c}).Escape()
|
||||||
|
}
|
||||||
|
75
pkg/gui/controllers/quit_actions.go
Normal file
75
pkg/gui/controllers/quit_actions.go
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/jesseduffield/gocui"
|
||||||
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
type QuitActions struct {
|
||||||
|
c *ControllerCommon
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *QuitActions) Quit() error {
|
||||||
|
self.c.State().SetRetainOriginalDir(false)
|
||||||
|
return self.quitAux()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *QuitActions) QuitWithoutChangingDirectory() error {
|
||||||
|
self.c.State().SetRetainOriginalDir(true)
|
||||||
|
return self.quitAux()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *QuitActions) quitAux() error {
|
||||||
|
if self.c.State().GetUpdating() {
|
||||||
|
return self.confirmQuitDuringUpdate()
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.c.UserConfig.ConfirmOnQuit {
|
||||||
|
return self.c.Confirm(types.ConfirmOpts{
|
||||||
|
Title: "",
|
||||||
|
Prompt: self.c.Tr.ConfirmQuit,
|
||||||
|
HandleConfirm: func() error {
|
||||||
|
return gocui.ErrQuit
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return gocui.ErrQuit
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *QuitActions) confirmQuitDuringUpdate() error {
|
||||||
|
return self.c.Confirm(types.ConfirmOpts{
|
||||||
|
Title: self.c.Tr.ConfirmQuitDuringUpdateTitle,
|
||||||
|
Prompt: self.c.Tr.ConfirmQuitDuringUpdate,
|
||||||
|
HandleConfirm: func() error {
|
||||||
|
return gocui.ErrQuit
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *QuitActions) Escape() error {
|
||||||
|
currentContext := self.c.CurrentContext()
|
||||||
|
|
||||||
|
parentContext, hasParent := currentContext.GetParentContext()
|
||||||
|
if hasParent && currentContext != nil && parentContext != nil {
|
||||||
|
// TODO: think about whether this should be marked as a return rather than adding to the stack
|
||||||
|
return self.c.PushContext(parentContext)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, mode := range self.c.Helpers().Mode.Statuses() {
|
||||||
|
if mode.IsActive() {
|
||||||
|
return mode.Reset()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
repoPathStack := self.c.State().GetRepoPathStack()
|
||||||
|
if !repoPathStack.IsEmpty() {
|
||||||
|
return self.c.Helpers().Repos.DispatchSwitchToRepo(repoPathStack.Pop(), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.c.UserConfig.QuitOnTopLevelReturn {
|
||||||
|
return self.Quit()
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
@ -178,6 +178,14 @@ func (self *StateAccessor) SetShowExtrasWindow(value bool) {
|
|||||||
self.gui.ShowExtrasWindow = value
|
self.gui.ShowExtrasWindow = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *StateAccessor) GetRetainOriginalDir() bool {
|
||||||
|
return self.gui.RetainOriginalDir
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *StateAccessor) SetRetainOriginalDir(value bool) {
|
||||||
|
self.gui.RetainOriginalDir = value
|
||||||
|
}
|
||||||
|
|
||||||
// we keep track of some stuff from one render to the next to see if certain
|
// we keep track of some stuff from one render to the next to see if certain
|
||||||
// things have changed
|
// things have changed
|
||||||
type PrevLayout struct {
|
type PrevLayout struct {
|
||||||
@ -632,7 +640,7 @@ func (gui *Gui) RunAndHandleError(startArgs appTypes.StartArgs) error {
|
|||||||
|
|
||||||
switch err {
|
switch err {
|
||||||
case gocui.ErrQuit:
|
case gocui.ErrQuit:
|
||||||
if gui.RetainOriginalDir {
|
if gui.c.State().GetRetainOriginalDir() {
|
||||||
if err := gui.helpers.RecordDirectory.RecordDirectory(gui.InitialDir); err != nil {
|
if err := gui.helpers.RecordDirectory.RecordDirectory(gui.InitialDir); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -79,30 +79,6 @@ func (self *Gui) GetInitialKeybindings() ([]*types.Binding, []*gocui.ViewMouseBi
|
|||||||
opts := self.c.KeybindingsOpts()
|
opts := self.c.KeybindingsOpts()
|
||||||
|
|
||||||
bindings := []*types.Binding{
|
bindings := []*types.Binding{
|
||||||
{
|
|
||||||
ViewName: "",
|
|
||||||
Key: opts.GetKey(opts.Config.Universal.Quit),
|
|
||||||
Modifier: gocui.ModNone,
|
|
||||||
Handler: self.handleQuit,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
ViewName: "",
|
|
||||||
Key: opts.GetKey(opts.Config.Universal.QuitWithoutChangingDirectory),
|
|
||||||
Modifier: gocui.ModNone,
|
|
||||||
Handler: self.handleQuitWithoutChangingDirectory,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
ViewName: "",
|
|
||||||
Key: opts.GetKey(opts.Config.Universal.QuitAlt1),
|
|
||||||
Modifier: gocui.ModNone,
|
|
||||||
Handler: self.handleQuit,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
ViewName: "",
|
|
||||||
Key: opts.GetKey(opts.Config.Universal.Return),
|
|
||||||
Modifier: gocui.ModNone,
|
|
||||||
Handler: self.handleTopLevelReturn,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
ViewName: "",
|
ViewName: "",
|
||||||
Key: opts.GetKey(opts.Config.Universal.OpenRecentRepos),
|
Key: opts.GetKey(opts.Config.Universal.OpenRecentRepos),
|
||||||
|
@ -1,71 +0,0 @@
|
|||||||
package gui
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/jesseduffield/gocui"
|
|
||||||
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (gui *Gui) handleQuitWithoutChangingDirectory() error {
|
|
||||||
gui.RetainOriginalDir = true
|
|
||||||
return gui.quit()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (gui *Gui) handleQuit() error {
|
|
||||||
gui.RetainOriginalDir = false
|
|
||||||
return gui.quit()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (gui *Gui) handleTopLevelReturn() error {
|
|
||||||
currentContext := gui.c.CurrentContext()
|
|
||||||
|
|
||||||
parentContext, hasParent := currentContext.GetParentContext()
|
|
||||||
if hasParent && currentContext != nil && parentContext != nil {
|
|
||||||
// TODO: think about whether this should be marked as a return rather than adding to the stack
|
|
||||||
return gui.c.PushContext(parentContext)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, mode := range gui.helpers.Mode.Statuses() {
|
|
||||||
if mode.IsActive() {
|
|
||||||
return mode.Reset()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
repoPathStack := gui.c.State().GetRepoPathStack()
|
|
||||||
if !repoPathStack.IsEmpty() {
|
|
||||||
return gui.helpers.Repos.DispatchSwitchToRepo(repoPathStack.Pop(), true)
|
|
||||||
}
|
|
||||||
|
|
||||||
if gui.c.UserConfig.QuitOnTopLevelReturn {
|
|
||||||
return gui.handleQuit()
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (gui *Gui) quit() error {
|
|
||||||
if gui.c.State().GetUpdating() {
|
|
||||||
return gui.createUpdateQuitConfirmation()
|
|
||||||
}
|
|
||||||
|
|
||||||
if gui.c.UserConfig.ConfirmOnQuit {
|
|
||||||
return gui.c.Confirm(types.ConfirmOpts{
|
|
||||||
Title: "",
|
|
||||||
Prompt: gui.c.Tr.ConfirmQuit,
|
|
||||||
HandleConfirm: func() error {
|
|
||||||
return gocui.ErrQuit
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return gocui.ErrQuit
|
|
||||||
}
|
|
||||||
|
|
||||||
func (gui *Gui) createUpdateQuitConfirmation() error {
|
|
||||||
return gui.c.Confirm(types.ConfirmOpts{
|
|
||||||
Title: gui.Tr.ConfirmQuitDuringUpdateTitle,
|
|
||||||
Prompt: gui.Tr.ConfirmQuitDuringUpdate,
|
|
||||||
HandleConfirm: func() error {
|
|
||||||
return gocui.ErrQuit
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
@ -233,6 +233,8 @@ type IStateAccessor interface {
|
|||||||
GetIsRefreshingFiles() bool
|
GetIsRefreshingFiles() bool
|
||||||
GetShowExtrasWindow() bool
|
GetShowExtrasWindow() bool
|
||||||
SetShowExtrasWindow(bool)
|
SetShowExtrasWindow(bool)
|
||||||
|
GetRetainOriginalDir() bool
|
||||||
|
SetRetainOriginalDir(bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
type IRepoStateAccessor interface {
|
type IRepoStateAccessor interface {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user