diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go index 2500fdf97..cb3355fc3 100644 --- a/pkg/gui/files_panel.go +++ b/pkg/gui/files_panel.go @@ -398,25 +398,6 @@ func (gui *Gui) refreshStateFiles() error { return nil } -func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) { - item, err := gui.getSelectedFile() - if err != nil { - if err != gui.Errors.ErrNoFiles { - return "", err - } - return "", gui.newStringTask("main", gui.Tr.SLocalize("NoFilesDisplay")) - } - if item.Type != "file" { - return "", gui.newStringTask("main", gui.Tr.SLocalize("NotAFile")) - } - cat, err := gui.GitCommand.CatFile(item.Name) - if err != nil { - gui.Log.Error(err) - return "", gui.newStringTask("main", err.Error()) - } - return cat, nil -} - func (gui *Gui) handlePullFiles(g *gocui.Gui, v *gocui.View) error { // if we have no upstream branch we need to set that first currentBranch := gui.currentBranch() diff --git a/pkg/gui/layout.go b/pkg/gui/layout.go index f5385e934..09e5f2c89 100644 --- a/pkg/gui/layout.go +++ b/pkg/gui/layout.go @@ -398,7 +398,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { searchPrefixView.BgColor = gocui.ColorDefault searchPrefixView.FgColor = gocui.ColorGreen searchPrefixView.Frame = false - gui.setViewContent(gui.g, searchPrefixView, searchPrefix) + gui.setViewContent(searchPrefixView, searchPrefix) } if searchView, err := g.SetView("search", appStatusOptionsBoundary-1+searchViewOffset+len(searchPrefix), height-2+searchViewOffset, optionsVersionBoundary+searchViewOffset, height+searchViewOffset, 0); err != nil { @@ -440,7 +440,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { } } if gui.State.OldInformation != information { - gui.setViewContent(g, informationView, information) + gui.setViewContent(informationView, information) gui.State.OldInformation = information } diff --git a/pkg/gui/line_by_line_panel.go b/pkg/gui/line_by_line_panel.go index 0b5171cb1..edc1f4a57 100644 --- a/pkg/gui/line_by_line_panel.go +++ b/pkg/gui/line_by_line_panel.go @@ -88,7 +88,7 @@ func (gui *Gui) refreshLineByLinePanel(diff string, secondaryDiff string, second } gui.g.Update(func(*gocui.Gui) error { - gui.setViewContent(gui.g, gui.getSecondaryView(), secondaryPatchParser.Render(-1, -1, nil)) + gui.setViewContent(gui.getSecondaryView(), secondaryPatchParser.Render(-1, -1, nil)) return nil }) @@ -242,7 +242,7 @@ func (gui *Gui) refreshMainView() error { mainView.Wrap = false gui.g.Update(func(*gocui.Gui) error { - gui.setViewContent(gui.g, gui.getMainView(), colorDiff) + gui.setViewContent(gui.getMainView(), colorDiff) return nil }) diff --git a/pkg/gui/merge_panel.go b/pkg/gui/merge_panel.go index 7d2e8fc52..a2346db6e 100644 --- a/pkg/gui/merge_panel.go +++ b/pkg/gui/merge_panel.go @@ -222,19 +222,39 @@ func (gui *Gui) refreshMergePanel() error { return err } - mainView := gui.getMainView() - mainView.Wrap = false - if err := gui.newStringTask("main", content); err != nil { - return err - } - if err := gui.scrollToConflict(gui.g); err != nil { return err } + mainView := gui.getMainView() + mainView.Wrap = false + + if err := gui.newStringTaskWithoutScroll("main", content); err != nil { + return err + } + return nil } +func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) { + item, err := gui.getSelectedFile() + if err != nil { + if err != gui.Errors.ErrNoFiles { + return "", err + } + return "", gui.newStringTask("main", gui.Tr.SLocalize("NoFilesDisplay")) + } + if item.Type != "file" { + return "", gui.newStringTask("main", gui.Tr.SLocalize("NotAFile")) + } + cat, err := gui.GitCommand.CatFile(item.Name) + if err != nil { + gui.Log.Error(err) + return "", gui.newStringTask("main", err.Error()) + } + return cat, nil +} + func (gui *Gui) scrollToConflict(g *gocui.Gui) error { panelState := gui.State.Panels.Merging if len(panelState.Conflicts) == 0 { diff --git a/pkg/gui/patch_building_panel.go b/pkg/gui/patch_building_panel.go index 3e32386ec..def631d47 100644 --- a/pkg/gui/patch_building_panel.go +++ b/pkg/gui/patch_building_panel.go @@ -94,7 +94,7 @@ func (gui *Gui) refreshSecondaryPatchPanel() error { secondaryView.Wrap = false gui.g.Update(func(*gocui.Gui) error { - gui.setViewContent(gui.g, gui.getSecondaryView(), gui.GitCommand.PatchManager.RenderAggregatedPatchColored(false)) + gui.setViewContent(gui.getSecondaryView(), gui.GitCommand.PatchManager.RenderAggregatedPatchColored(false)) return nil }) } else { diff --git a/pkg/gui/status_panel.go b/pkg/gui/status_panel.go index 3b5c6dd05..26f3b6d3a 100644 --- a/pkg/gui/status_panel.go +++ b/pkg/gui/status_panel.go @@ -42,7 +42,7 @@ func (gui *Gui) refreshStatus() { status += fmt.Sprintf("%s → %s ", repoName, name) gui.g.Update(func(*gocui.Gui) error { - gui.setViewContent(gui.g, gui.getStatusView(), status) + gui.setViewContent(gui.getStatusView(), status) return nil }) } diff --git a/pkg/gui/tasks_adapter.go b/pkg/gui/tasks_adapter.go index f966f2eee..aa9f26f14 100644 --- a/pkg/gui/tasks_adapter.go +++ b/pkg/gui/tasks_adapter.go @@ -70,6 +70,26 @@ func (gui *Gui) newStringTask(viewName string, str string) error { return nil } +func (gui *Gui) newStringTaskWithoutScroll(viewName string, str string) error { + view, err := gui.g.View(viewName) + if err != nil { + return nil // swallowing for now + } + + manager := gui.getManager(view) + + f := func(stop chan struct{}) error { + gui.setViewContent(view, str) + return nil + } + + if err := manager.NewTask(f); err != nil { + return err + } + + return nil +} + func (gui *Gui) getManager(view *gocui.View) *tasks.ViewBufferManager { manager, ok := gui.viewBufferManagerMap[view.Name()] if !ok { diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index c647d1819..429ab46b5 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -340,7 +340,7 @@ func (gui *Gui) cleanString(s string) string { return utils.NormalizeLinefeeds(output) } -func (gui *Gui) setViewContent(g *gocui.Gui, v *gocui.View, s string) { +func (gui *Gui) setViewContent(v *gocui.View, s string) { v.Clear() fmt.Fprint(v, gui.cleanString(s)) } @@ -358,7 +358,7 @@ func (gui *Gui) renderString(g *gocui.Gui, viewName, s string) { if err := v.SetCursor(0, 0); err != nil { return err } - gui.setViewContent(gui.g, v, s) + gui.setViewContent(v, s) return nil }) }