1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-03-19 21:28:28 +02:00

more refactoring

This commit is contained in:
Jesse Duffield 2021-04-05 00:31:52 +10:00
parent 56197c81cf
commit 9167c9df65
13 changed files with 48 additions and 72 deletions

View File

@ -97,10 +97,10 @@ func (gui *Gui) renderAppStatus() {
for range ticker.C { for range ticker.C {
appStatus := gui.statusManager.getStatusString() appStatus := gui.statusManager.getStatusString()
if appStatus == "" { if appStatus == "" {
gui.renderString("appStatus", "") gui.renderString(gui.Views.AppStatus, "")
return return
} }
gui.renderString("appStatus", appStatus) gui.renderString(gui.Views.AppStatus, appStatus)
} }
}) })
} }

View File

@ -59,7 +59,7 @@ func (gui *Gui) handleCommitMessageFocused() error {
}, },
) )
gui.renderString("options", message) gui.renderString(gui.Views.Options, message)
return nil return nil
} }

View File

@ -227,7 +227,7 @@ func (gui *Gui) createPopupPanel(opts createPopupPanelOpts) error {
}) })
} }
gui.renderString("confirmation", opts.prompt) gui.renderString(gui.Views.Confirmation, opts.prompt)
return gui.setKeyBindings(opts) return gui.setKeyBindings(opts)
}) })
@ -243,7 +243,7 @@ func (gui *Gui) setKeyBindings(opts createPopupPanelOpts) error {
}, },
) )
gui.renderString("options", actions) gui.renderString(gui.Views.Options, actions)
var onConfirm func() error var onConfirm func() error
if opts.handleConfirmPrompt != nil { if opts.handleConfirmPrompt != nil {
onConfirm = gui.wrappedPromptConfirmationFunction(opts.handlersManageFocus, opts.handleConfirmPrompt, func() string { return gui.Views.Confirmation.Buffer() }) onConfirm = gui.wrappedPromptConfirmationFunction(opts.handlersManageFocus, opts.handleConfirmPrompt, func() string { return gui.Views.Confirmation.Buffer() })

View File

@ -13,7 +13,7 @@ type credentials chan string
func (gui *Gui) promptUserForCredential(passOrUname string) string { func (gui *Gui) promptUserForCredential(passOrUname string) string {
gui.credentials = make(chan string) gui.credentials = make(chan string)
gui.g.Update(func(g *gocui.Gui) error { gui.g.Update(func(g *gocui.Gui) error {
credentialsView, _ := g.View("credentials") credentialsView := gui.Views.Credentials
switch passOrUname { switch passOrUname {
case "username": case "username":
credentialsView.Title = gui.Tr.CredentialsUsername credentialsView.Title = gui.Tr.CredentialsUsername
@ -67,7 +67,7 @@ func (gui *Gui) handleCredentialsViewFocused() error {
}, },
) )
gui.renderString("options", message) gui.renderString(gui.Views.Options, message)
return nil return nil
} }

View File

@ -344,7 +344,7 @@ func (gui *Gui) handleWIPCommitPress() error {
return gui.createErrorPanel(gui.Tr.SkipHookPrefixNotConfigured) return gui.createErrorPanel(gui.Tr.SkipHookPrefixNotConfigured)
} }
_ = gui.renderStringSync("commitMessage", skipHookPreifx) _ = gui.renderStringSync(gui.Views.CommitMessage, skipHookPreifx)
if err := gui.Views.CommitMessage.SetCursor(len(skipHookPreifx), 0); err != nil { if err := gui.Views.CommitMessage.SetCursor(len(skipHookPreifx), 0); err != nil {
return err return err
} }
@ -393,7 +393,7 @@ func (gui *Gui) handleCommitPress() error {
return gui.createErrorPanel(fmt.Sprintf("%s: %s", gui.Tr.LcCommitPrefixPatternError, err.Error())) return gui.createErrorPanel(fmt.Sprintf("%s: %s", gui.Tr.LcCommitPrefixPatternError, err.Error()))
} }
prefix := rgx.ReplaceAllString(gui.getCheckedOutBranch().Name, prefixReplace) prefix := rgx.ReplaceAllString(gui.getCheckedOutBranch().Name, prefixReplace)
gui.renderString("commitMessage", prefix) gui.renderString(gui.Views.CommitMessage, prefix)
if err := gui.Views.CommitMessage.SetCursor(len(prefix), 0); err != nil { if err := gui.Views.CommitMessage.SetCursor(len(prefix), 0); err != nil {
return err return err
} }

View File

@ -48,8 +48,8 @@ func (gui *Gui) layout(g *gocui.Gui) error {
viewDimensions := gui.getWindowDimensions(informationStr, appStatus) viewDimensions := gui.getWindowDimensions(informationStr, appStatus)
// reading more lines into main view buffers upon resize // reading more lines into main view buffers upon resize
prevMainView, err := gui.g.View("main") prevMainView := gui.Views.Main
if err == nil { if prevMainView != nil {
_, prevMainHeight := prevMainView.Size() _, prevMainHeight := prevMainView.Size()
newMainHeight := viewDimensions["main"].Y1 - viewDimensions["main"].Y0 - 1 newMainHeight := viewDimensions["main"].Y1 - viewDimensions["main"].Y0 - 1
heightDiff := newMainHeight - prevMainHeight heightDiff := newMainHeight - prevMainHeight
@ -230,7 +230,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
gui.Views.Information.BgColor = gocui.ColorDefault gui.Views.Information.BgColor = gocui.ColorDefault
gui.Views.Information.FgColor = gocui.ColorGreen gui.Views.Information.FgColor = gocui.ColorGreen
gui.Views.Information.Frame = false gui.Views.Information.Frame = false
gui.renderString("information", INFO_SECTION_PADDING+informationStr) gui.renderString(gui.Views.Information, INFO_SECTION_PADDING+informationStr)
} }
if gui.State.OldInformation != informationStr { if gui.State.OldInformation != informationStr {
gui.setViewContent(gui.Views.Information, informationStr) gui.setViewContent(gui.Views.Information, informationStr)

View File

@ -110,29 +110,29 @@ func (t *runFunctionTask) GetKind() TaskKind {
// return &runFunctionTask{f: f} // return &runFunctionTask{f: f}
// } // }
func (gui *Gui) runTaskForView(viewName string, task updateTask) error { func (gui *Gui) runTaskForView(view *gocui.View, task updateTask) error {
gui.Log.Warn("running new task for view") gui.Log.Warn("running new task for view")
switch task.GetKind() { switch task.GetKind() {
case RENDER_STRING: case RENDER_STRING:
specificTask := task.(*renderStringTask) specificTask := task.(*renderStringTask)
return gui.newStringTask(viewName, specificTask.str) return gui.newStringTask(view, specificTask.str)
case RENDER_STRING_WITHOUT_SCROLL: case RENDER_STRING_WITHOUT_SCROLL:
specificTask := task.(*renderStringWithoutScrollTask) specificTask := task.(*renderStringWithoutScrollTask)
return gui.newStringTaskWithoutScroll(viewName, specificTask.str) return gui.newStringTaskWithoutScroll(view, specificTask.str)
case RUN_FUNCTION: case RUN_FUNCTION:
specificTask := task.(*runFunctionTask) specificTask := task.(*runFunctionTask)
return gui.newTask(viewName, specificTask.f) return gui.newTask(view, specificTask.f)
case RUN_COMMAND: case RUN_COMMAND:
specificTask := task.(*runCommandTask) specificTask := task.(*runCommandTask)
return gui.newCmdTask(viewName, specificTask.cmd, specificTask.prefix) return gui.newCmdTask(view, specificTask.cmd, specificTask.prefix)
case RUN_PTY: case RUN_PTY:
specificTask := task.(*runPtyTask) specificTask := task.(*runPtyTask)
return gui.newPtyTask(viewName, specificTask.cmd, specificTask.prefix) return gui.newPtyTask(view, specificTask.cmd, specificTask.prefix)
} }
return nil return nil
@ -143,7 +143,7 @@ func (gui *Gui) refreshMainView(opts *viewUpdateOpts, view *gocui.View) error {
view.Wrap = !opts.noWrap view.Wrap = !opts.noWrap
view.Highlight = opts.highlight view.Highlight = opts.highlight
if err := gui.runTaskForView(view.Name(), opts.task); err != nil { if err := gui.runTaskForView(view, opts.task); err != nil {
gui.Log.Error(err) gui.Log.Error(err)
return nil return nil
} }

View File

@ -6,6 +6,7 @@ import (
"os/exec" "os/exec"
"github.com/creack/pty" "github.com/creack/pty"
"github.com/jesseduffield/gocui"
) )
func (gui *Gui) onResize() error { func (gui *Gui) onResize() error {
@ -29,22 +30,17 @@ func (gui *Gui) onResize() error {
// which is just an io.Reader. the pty package lets us wrap a command in a // which is just an io.Reader. the pty package lets us wrap a command in a
// pseudo-terminal meaning we'll get the behaviour we want from the underlying // pseudo-terminal meaning we'll get the behaviour we want from the underlying
// command. // command.
func (gui *Gui) newPtyTask(viewName string, cmd *exec.Cmd, prefix string) error { func (gui *Gui) newPtyTask(view *gocui.View, cmd *exec.Cmd, prefix string) error {
width, _ := gui.Views.Main.Size() width, _ := gui.Views.Main.Size()
pager := gui.GitCommand.GetPager(width) pager := gui.GitCommand.GetPager(width)
if pager == "" { if pager == "" {
// if we're not using a custom pager we don't need to use a pty // if we're not using a custom pager we don't need to use a pty
return gui.newCmdTask(viewName, cmd, prefix) return gui.newCmdTask(view, cmd, prefix)
} }
cmd.Env = append(cmd.Env, "GIT_PAGER="+pager) cmd.Env = append(cmd.Env, "GIT_PAGER="+pager)
view, err := gui.g.View(viewName)
if err != nil {
return nil // swallowing for now
}
_, height := view.Size() _, height := view.Size()
_, oy := view.Origin() _, oy := view.Origin()

View File

@ -16,7 +16,7 @@ func (gui *Gui) handleOpenSearch(viewName string) error {
gui.State.Searching.isSearching = true gui.State.Searching.isSearching = true
gui.State.Searching.view = view gui.State.Searching.view = view
gui.renderString("search", "") gui.renderString(gui.Views.Search, "")
if err := gui.pushContext(gui.State.Contexts.Search); err != nil { if err := gui.pushContext(gui.State.Contexts.Search); err != nil {
return err return err
@ -27,6 +27,7 @@ func (gui *Gui) handleOpenSearch(viewName string) error {
func (gui *Gui) handleSearch() error { func (gui *Gui) handleSearch() error {
gui.State.Searching.searchString = gui.Views.Search.Buffer() gui.State.Searching.searchString = gui.Views.Search.Buffer()
gui.Log.Warn(gui.State.Searching.searchString)
if err := gui.returnFromContext(); err != nil { if err := gui.returnFromContext(); err != nil {
return err return err
} }
@ -49,7 +50,7 @@ func (gui *Gui) onSelectItemWrapper(innerFunc func(int) error) func(int, int, in
return func(y int, index int, total int) error { return func(y int, index int, total int) error {
if total == 0 { if total == 0 {
gui.renderString( gui.renderString(
"search", gui.Views.Search,
fmt.Sprintf( fmt.Sprintf(
"no matches for '%s' %s", "no matches for '%s' %s",
gui.State.Searching.searchString, gui.State.Searching.searchString,
@ -62,7 +63,7 @@ func (gui *Gui) onSelectItemWrapper(innerFunc func(int) error) func(int, int, in
return nil return nil
} }
gui.renderString( gui.renderString(
"search", gui.Views.Search,
fmt.Sprintf( fmt.Sprintf(
"matches for '%s' (%d of %d) %s", "matches for '%s' (%d of %d) %s",
gui.State.Searching.searchString, gui.State.Searching.searchString,

View File

@ -8,17 +8,12 @@ import (
"github.com/jesseduffield/lazygit/pkg/tasks" "github.com/jesseduffield/lazygit/pkg/tasks"
) )
func (gui *Gui) newCmdTask(viewName string, cmd *exec.Cmd, prefix string) error { func (gui *Gui) newCmdTask(view *gocui.View, cmd *exec.Cmd, prefix string) error {
gui.Log.WithField( gui.Log.WithField(
"command", "command",
strings.Join(cmd.Args, " "), strings.Join(cmd.Args, " "),
).Debug("RunCommand") ).Debug("RunCommand")
view, err := gui.g.View(viewName)
if err != nil {
return nil // swallowing for now
}
_, height := view.Size() _, height := view.Size()
_, oy := view.Origin() _, oy := view.Origin()
@ -41,12 +36,7 @@ func (gui *Gui) newCmdTask(viewName string, cmd *exec.Cmd, prefix string) error
return nil return nil
} }
func (gui *Gui) newTask(viewName string, f func(chan struct{}) error) error { func (gui *Gui) newTask(view *gocui.View, f func(chan struct{}) error) error {
view, err := gui.g.View(viewName)
if err != nil {
return nil // swallowing for now
}
manager := gui.getManager(view) manager := gui.getManager(view)
if err := manager.NewTask(f); err != nil { if err := manager.NewTask(f); err != nil {
@ -56,16 +46,11 @@ func (gui *Gui) newTask(viewName string, f func(chan struct{}) error) error {
return nil return nil
} }
func (gui *Gui) newStringTask(viewName string, str string) error { func (gui *Gui) newStringTask(view *gocui.View, str string) error {
view, err := gui.g.View(viewName)
if err != nil {
return nil // swallowing for now
}
manager := gui.getManager(view) manager := gui.getManager(view)
f := func(stop chan struct{}) error { f := func(stop chan struct{}) error {
gui.renderString(viewName, str) gui.renderString(view, str)
return nil return nil
} }
@ -76,12 +61,7 @@ func (gui *Gui) newStringTask(viewName string, str string) error {
return nil return nil
} }
func (gui *Gui) newStringTaskWithoutScroll(viewName string, str string) error { func (gui *Gui) newStringTaskWithoutScroll(view *gocui.View, str string) error {
view, err := gui.g.View(viewName)
if err != nil {
return nil // swallowing for now
}
manager := gui.getManager(view) manager := gui.getManager(view)
f := func(stop chan struct{}) error { f := func(stop chan struct{}) error {

View File

@ -52,7 +52,7 @@ func (gui *Gui) startUpdating(newVersion string) {
func (gui *Gui) onUpdateFinish(statusId int, err error) error { func (gui *Gui) onUpdateFinish(statusId int, err error) error {
gui.State.Updating = false gui.State.Updating = false
gui.statusManager.removeStatus(statusId) gui.statusManager.removeStatus(statusId)
gui.renderString("appStatus", "") gui.renderString(gui.Views.AppStatus, "")
if err != nil { if err != nil {
return gui.createErrorPanel("Update failed: " + err.Error()) return gui.createErrorPanel("Update failed: " + err.Error())
} }

View File

@ -207,24 +207,20 @@ func (gui *Gui) setViewContent(v *gocui.View, s string) {
} }
// renderString resets the origin of a view and sets its content // renderString resets the origin of a view and sets its content
func (gui *Gui) renderString(viewName, s string) { func (gui *Gui) renderString(view *gocui.View, s string) {
gui.g.Update(func(*gocui.Gui) error { gui.g.Update(func(*gocui.Gui) error {
return gui.renderStringSync(viewName, s) return gui.renderStringSync(view, s)
}) })
} }
func (gui *Gui) renderStringSync(viewName, s string) error { func (gui *Gui) renderStringSync(view *gocui.View, s string) error {
v, err := gui.g.View(viewName) if err := view.SetOrigin(0, 0); err != nil {
if err != nil {
return nil // return gracefully if view has been deleted
}
if err := v.SetOrigin(0, 0); err != nil {
return err return err
} }
if err := v.SetCursor(0, 0); err != nil { if err := view.SetCursor(0, 0); err != nil {
return err return err
} }
gui.setViewContent(v, s) gui.setViewContent(view, s)
return nil return nil
} }
@ -238,7 +234,7 @@ func (gui *Gui) optionsMapToString(optionsMap map[string]string) string {
} }
func (gui *Gui) renderOptionsMap(optionsMap map[string]string) { func (gui *Gui) renderOptionsMap(optionsMap map[string]string) {
gui.renderString("options", gui.optionsMapToString(optionsMap)) gui.renderString(gui.Views.Options, gui.optionsMapToString(optionsMap))
} }
func (gui *Gui) trimmedContent(v *gocui.View) string { func (gui *Gui) trimmedContent(v *gocui.View) string {

View File

@ -1002,12 +1002,7 @@ func (g *Gui) draw(v *View) error {
func (g *Gui) onKey(ev *GocuiEvent) error { func (g *Gui) onKey(ev *GocuiEvent) error {
switch ev.Type { switch ev.Type {
case eventKey: case eventKey:
if g.currentView != nil && g.currentView.Editable && g.currentView.Editor != nil {
matched := g.currentView.Editor.Edit(g.currentView, Key(ev.Key), ev.Ch, Modifier(ev.Mod))
if matched {
break
}
}
_, err := g.execKeybindings(g.currentView, ev) _, err := g.execKeybindings(g.currentView, ev)
if err != nil { if err != nil {
return err return err
@ -1095,6 +1090,14 @@ func (g *Gui) execKeybindings(v *View, ev *GocuiEvent) (matched bool, err error)
if matchingParentViewKb != nil { if matchingParentViewKb != nil {
return g.execKeybinding(v.ParentView, matchingParentViewKb) return g.execKeybinding(v.ParentView, matchingParentViewKb)
} }
if g.currentView != nil && g.currentView.Editable && g.currentView.Editor != nil {
matched := g.currentView.Editor.Edit(g.currentView, Key(ev.Key), ev.Ch, Modifier(ev.Mod))
if matched {
return true, nil
}
}
if globalKb != nil { if globalKb != nil {
return g.execKeybinding(v, globalKb) return g.execKeybinding(v, globalKb)
} }