summaryrefslogtreecommitdiffstats
path: root/pkg/gui
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2021-11-01 09:35:54 +1100
committerJesse Duffield <jessedduffield@gmail.com>2021-11-01 10:03:49 +1100
commit2fc1498517523a20a3080816ec50ee9e7fbe533d (patch)
tree808b455c38c2e96f3d3930fa49f3f605416e5f24 /pkg/gui
parent7a464ae5b7782b383050de6dc3ae5bd51a88bad0 (diff)
some refactoring in anticipation of the graph feature
Diffstat (limited to 'pkg/gui')
-rw-r--r--pkg/gui/cherry_picking.go2
-rw-r--r--pkg/gui/commits_panel.go2
-rw-r--r--pkg/gui/context.go4
-rw-r--r--pkg/gui/context_config.go26
-rw-r--r--pkg/gui/files_panel.go4
-rw-r--r--pkg/gui/gui.go9
-rw-r--r--pkg/gui/layout.go11
-rw-r--r--pkg/gui/list_context.go174
-rw-r--r--pkg/gui/list_context_config.go167
-rw-r--r--pkg/gui/menu_panel.go4
-rw-r--r--pkg/gui/tasks_adapter.go5
-rw-r--r--pkg/gui/view_helpers.go15
12 files changed, 224 insertions, 199 deletions
diff --git a/pkg/gui/cherry_picking.go b/pkg/gui/cherry_picking.go
index 8f144084c..c57854370 100644
--- a/pkg/gui/cherry_picking.go
+++ b/pkg/gui/cherry_picking.go
@@ -33,7 +33,7 @@ func (gui *Gui) handleCopyCommit() error {
return err
}
- item, ok := context.SelectedItem()
+ item, ok := context.GetSelectedItem()
if !ok {
return nil
}
diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go
index 422d8ec29..9c2914330 100644
--- a/pkg/gui/commits_panel.go
+++ b/pkg/gui/commits_panel.go
@@ -640,7 +640,7 @@ func (gui *Gui) handleGotoBottomForCommitsPanel() error {
}
for _, context := range gui.getListContexts() {
- if context.ViewName == "commits" {
+ if context.GetViewName() == "commits" {
return context.handleGotoBottom()
}
}
diff --git a/pkg/gui/context.go b/pkg/gui/context.go
index a74b12749..79db5dc26 100644
--- a/pkg/gui/context.go
+++ b/pkg/gui/context.go
@@ -285,9 +285,9 @@ func (gui *Gui) currentContextWithoutLock() Context {
// the status panel is not yet a list context (and may never be), so this method is not
// quite the same as currentSideContext()
-func (gui *Gui) currentSideListContext() *ListContext {
+func (gui *Gui) currentSideListContext() IListContext {
context := gui.currentSideContext()
- listContext, ok := context.(*ListContext)
+ listContext, ok := context.(IListContext)
if !ok {
return nil
}
diff --git a/pkg/gui/context_config.go b/pkg/gui/context_config.go
index b7f7e3783..a3b965a69 100644
--- a/pkg/gui/context_config.go
+++ b/pkg/gui/context_config.go
@@ -56,19 +56,19 @@ var allContextKeys = []ContextKey{
type ContextTree struct {
Status Context
- Files *ListContext
- Submodules *ListContext
- Menu *ListContext
- Branches *ListContext
- Remotes *ListContext
- RemoteBranches *ListContext
- Tags *ListContext
- BranchCommits *ListContext
- CommitFiles *ListContext
- ReflogCommits *ListContext
- SubCommits *ListContext
- Stash *ListContext
- Suggestions *ListContext
+ Files IListContext
+ Submodules IListContext
+ Menu IListContext
+ Branches IListContext
+ Remotes IListContext
+ RemoteBranches IListContext
+ Tags IListContext
+ BranchCommits IListContext
+ CommitFiles IListContext
+ ReflogCommits IListContext
+ SubCommits IListContext
+ Stash IListContext
+ Suggestions IListContext
Normal Context
Staging Context
PatchBuilding Context
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go
index cce28353e..6b5d0dd5d 100644
--- a/pkg/gui/files_panel.go
+++ b/pkg/gui/files_panel.go
@@ -395,9 +395,7 @@ func (gui *Gui) handleCommitPress() error {
prefix := rgx.ReplaceAllString(gui.getCheckedOutBranch().Name, prefixReplace)
gui.Views.CommitMessage.ClearTextArea()
gui.Views.CommitMessage.TextArea.TypeString(prefix)
- gui.g.Update(func(*gocui.Gui) error {
- return nil
- })
+ gui.render()
}
gui.g.Update(func(g *gocui.Gui) error {
diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go
index cfd436090..a07e1887b 100644
--- a/pkg/gui/gui.go
+++ b/pkg/gui/gui.go
@@ -458,6 +458,12 @@ func NewGui(log *logrus.Entry, gitCommand *commands.GitCommand, oSCommand *oscom
return gui, nil
}
+var RuneReplacements = map[rune]string{
+ // for the commit graph
+ '⏣': "M",
+ '⎔': "o",
+}
+
// Run setup the gui with keybindings and start the mainloop
func (gui *Gui) Run() error {
recordEvents := recordingEvents()
@@ -468,7 +474,7 @@ func (gui *Gui) Run() error {
playMode = gocui.REPLAYING
}
- g, err := gocui.NewGui(gocui.OutputTrue, OverlappingEdges, playMode, headless())
+ g, err := gocui.NewGui(gocui.OutputTrue, OverlappingEdges, playMode, headless(), RuneReplacements)
if err != nil {
return err
}
@@ -712,6 +718,7 @@ func (gui *Gui) startBackgroundFetch() {
} else {
gui.goEvery(time.Second*time.Duration(userConfig.Refresher.FetchInterval), gui.stopChan, func() error {
err := gui.fetch(false, "")
+ gui.render()
return err
})
}
diff --git a/pkg/gui/layout.go b/pkg/gui/layout.go
index 0c43c3f34..59c6a761e 100644
--- a/pkg/gui/layout.go
+++ b/pkg/gui/layout.go
@@ -52,24 +52,19 @@ func (gui *Gui) createAllViews() error {
gui.Views.Stash.Title = gui.Tr.StashTitle
gui.Views.Stash.FgColor = theme.GocuiDefaultTextColor
- gui.Views.Stash.ContainsList = true
gui.Views.Commits.Title = gui.Tr.CommitsTitle
gui.Views.Commits.FgColor = theme.GocuiDefaultTextColor
- gui.Views.Commits.ContainsList = true
gui.Views.CommitFiles.Title = gui.Tr.CommitFiles
gui.Views.CommitFiles.FgColor = theme.GocuiDefaultTextColor
- gui.Views.CommitFiles.ContainsList = true
gui.Views.Branches.Title = gui.Tr.BranchesTitle
gui.Views.Branches.FgColor = theme.GocuiDefaultTextColor
- gui.Views.Branches.ContainsList = true
gui.Views.Files.Highlight = true
gui.Views.Files.Title = gui.Tr.FilesTitle
gui.Views.Files.FgColor = theme.GocuiDefaultTextColor
- gui.Views.Files.ContainsList = true
gui.Views.Secondary.Title = gui.Tr.DiffTitle
gui.Views.Secondary.Wrap = true
@@ -111,7 +106,6 @@ func (gui *Gui) createAllViews() error {
gui.Views.Credentials.Editable = true
gui.Views.Suggestions.Visible = false
- gui.Views.Suggestions.ContainsList = true
gui.Views.Menu.Visible = false
@@ -264,7 +258,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
}
for _, listContext := range gui.getListContexts() {
- view, err := gui.g.View(listContext.ViewName)
+ view, err := gui.g.View(listContext.GetViewName())
if err != nil {
continue
}
@@ -274,8 +268,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
continue
}
- // check if the selected line is now out of view and if so refocus it
- view.FocusPoint(0, listContext.GetPanelState().GetSelectedLineIdx())
+ listContext.FocusLine()
view.SelBgColor = theme.GocuiSelectedLineBgColor
diff --git a/pkg/gui/list_context.go b/pkg/gui/list_context.go
index a8ed12372..c8ef850a0 100644
--- a/pkg/gui/list_context.go
+++ b/pkg/gui/list_context.go
@@ -1,21 +1,49 @@
package gui
+import (
+ "fmt"
+)
+
type ListContext struct {
GetItemsLength func() int
- GetDisplayStrings func() [][]string
+ GetDisplayStrings func(startIdx int, length int) [][]string
OnFocus func() error
OnFocusLost func() error
OnClickSelectedItem func() error
// the boolean here tells us whether the item is nil. This is needed because you can't work it out on the calling end once the pointer is wrapped in an interface (unless you want to use reflection)
- SelectedItem func() (ListItem, bool)
- GetPanelState func() IListPanelState
+ SelectedItem func() (ListItem, bool)
+ OnGetPanelState func() IListPanelState
Gui *Gui
*BasicContext
}
+type IListContext interface {
+ GetSelectedItem() (ListItem, bool)
+ GetSelectedItemId() string
+ OnRender() error
+ handlePrevLine() error
+ handleNextLine() error
+ handleLineChange(change int) error
+ handleNextPage() error
+ handleGotoTop() error
+ handleGotoBottom() error
+ handlePrevPage() error
+ handleClick() error
+ onSearchSelect(selectedLineIdx int) error
+ FocusLine()
+
+ GetPanelState() IListPanelState
+
+ Context
+}
+
+func (self *ListContext) GetPanelState() IListPanelState {
+ return self.OnGetPanelState()
+}
+
type IListPanelState interface {
SetSelectedLineIdx(int)
GetSelectedLineIdx() int
@@ -29,12 +57,26 @@ type ListItem interface {
Description() string
}
-func (lc *ListContext) GetSelectedItem() (ListItem, bool) {
- return lc.SelectedItem()
+func (self *ListContext) FocusLine() {
+ view, err := self.Gui.g.View(self.ViewName)
+ if err != nil {
+ return
+ }
+
+ view.FocusPoint(0, self.GetPanelState().GetSelectedLineIdx())
+ view.Footer = formatListFooter(self.GetPanelState().GetSelectedLineIdx(), self.GetItemsLength())
+}
+
+func formatListFooter(selectedLineIdx int, length int) string {
+ return fmt.Sprintf("%d of %d", selectedLineIdx+1, length)
+}
+
+func (self *ListContext) GetSelectedItem() (ListItem, bool) {
+ return self.SelectedItem()
}
-func (lc *ListContext) GetSelectedItemId() string {
- item, ok := lc.SelectedItem()
+func (self *ListContext) GetSelectedItemId() string {
+ item, ok := self.GetSelectedItem()
if !ok {
return ""
@@ -44,145 +86,135 @@ func (lc *ListContext) GetSelectedItemId() string {
}
// OnFocus assumes that the content of the context has already been rendered to the view. OnRender is the function which actually renders the content to the view
-func (lc *ListContext) OnRender() error {
- view, err := lc.Gui.g.View(lc.ViewName)
+func (self *ListContext) OnRender() error {
+ view, err := self.Gui.g.View(self.ViewName)
if err != nil {
return nil
}
- if lc.GetDisplayStrings != nil {
- lc.Gui.refreshSelectedLine(lc.GetPanelState(), lc.GetItemsLength())
- lc.Gui.renderDisplayStrings(view, lc.GetDisplayStrings())
+ if self.GetDisplayStrings != nil {
+ self.Gui.refreshSelectedLine(self.GetPanelState(), self.GetItemsLength())
+ self.Gui.renderDisplayStrings(view, self.GetDisplayStrings(0, self.GetItemsLength()))
+ self.Gui.render()
}
return nil
}
-func (lc *ListContext) HandleFocusLost() error {
- if lc.OnFocusLost != nil {
- return lc.OnFocusLost()
+func (self *ListContext) HandleFocusLost() error {
+ if self.OnFocusLost != nil {
+ return self.OnFocusLost()
}
return nil
}
-func (lc *ListContext) HandleFocus() error {
- if lc.Gui.popupPanelFocused() {
+func (self *ListContext) HandleFocus() error {
+ if self.Gui.popupPanelFocused() {
return nil
}
- view, err := lc.Gui.g.View(lc.ViewName)
- if err != nil {
- return nil
- }
+ self.FocusLine()
- view.FocusPoint(0, lc.GetPanelState().GetSelectedLineIdx())
-
- if lc.Gui.State.Modes.Diffing.Active() {
- return lc.Gui.renderDiff()
+ if self.Gui.State.Modes.Diffing.Active() {
+ return self.Gui.renderDiff()
}
- if lc.OnFocus != nil {
- return lc.OnFocus()
+ if self.OnFocus != nil {
+ return self.OnFocus()
}
return nil
}
-func (lc *ListContext) HandleRender() error {
- return lc.OnRender()
+func (self *ListContext) HandleRender() error {
+ return self.OnRender()
}
-func (lc *ListContext) handlePrevLine() error {
- return lc.handleLineChange(-1)
+func (self *ListContext) handlePrevLine() error {
+ return self.handleLineChange(-1)
}
-func (lc *ListContext) handleNextLine() error {
- return lc.handleLineChange(1)
+func (self *ListContext) handleNextLine() error {
+ return self.handleLineChange(1)
}
-func (lc *ListContext) handleLineChange(change int) error {
- if !lc.Gui.isPopupPanel(lc.ViewName) && lc.Gui.popupPanelFocused() {
+func (self *ListContext) handleLineChange(change int) error {
+ if !self.Gui.isPopupPanel(self.ViewName) && self.Gui.popupPanelFocused() {
return nil
}
- view, err := lc.Gui.g.View(lc.ViewName)
- if err != nil {
- return err
- }
-
- selectedLineIdx := lc.GetPanelState().GetSelectedLineIdx()
- if (change < 0 && selectedLineIdx == 0) || (change > 0 && selectedLineIdx == lc.GetItemsLength()-1) {
+ selectedLineIdx := self.GetPanelState().GetSelectedLineIdx()
+ if (change < 0 && selectedLineIdx == 0) || (change > 0 && selectedLineIdx == self.GetItemsLength()-1) {
return nil
}
- lc.Gui.changeSelectedLine(lc.GetPanelState(), lc.GetItemsLength(), change)
- view.FocusPoint(0, lc.GetPanelState().GetSelectedLineIdx())
+ self.Gui.changeSelectedLine(self.GetPanelState(), self.GetItemsLength(), change)
- return lc.HandleFocus()
+ return self.HandleFocus()
}
-func (lc *ListContext) handleNextPage() error {
- view, err := lc.Gui.g.View(lc.ViewName)
+func (self *ListContext) handleNextPage() error {
+ view, err := self.Gui.g.View(self.ViewName)
if err != nil {
return nil
}
- delta := lc.Gui.pageDelta(view)
+ delta := self.Gui.pageDelta(view)
- return lc.handleLineChange(delta)
+ return self.handleLineChange(delta)
}
-func (lc *ListContext) handleGotoTop() error {
- return lc.handleLineChange(-lc.GetItemsLength())
+func (self *ListContext) handleGotoTop() error {
+ return self.handleLineChange(-self.GetItemsLength())
}
-func (lc *ListContext) handleGotoBottom() error {
- return lc.handleLineChange(lc.GetItemsLength())
+func (self *ListContext) handleGotoBottom() error {
+ return self.handleLineChange(self.GetItemsLength())
}
-func (lc *ListContext) handlePrevPage() error {
- view, err := lc.Gui.g.View(lc.ViewName)
+func (self *ListContext) handlePrevPage() error {
+ view, err := self.Gui.g.View(self.ViewName)
if err != nil {
return nil
}
- delta := lc.Gui.pageDelta(view)
+ delta := self.Gui.pageDelta(view)
- return lc.handleLineChange(-delta)
+ return self.handleLineChange(-delta)
}
-func (lc *ListContext) handleClick() error {
- if !lc.Gui.isPopupPanel(lc.ViewName) && lc.Gui.popupPanelFocused() {
+func (self *ListContext) handleClick() error {
+ if !self.Gui.isPopupPanel(self.ViewName) && self.Gui.popupPanelFocused() {
return nil
}
- view, err := lc.Gui.g.View(lc.ViewName)
+ view, err := self.Gui.g.View(self.ViewName)
if err != nil {
return nil
}
- prevSelectedLineIdx := lc.GetPanelState().GetSelectedLineIdx()
+ prevSelectedLineIdx := self.GetPanelState().GetSelectedLineIdx()
newSelectedLineIdx := view.SelectedLineIdx()
// we need to focus the view
- if err := lc.Gui.pushContext(lc); err != nil {
+ if err := self.Gui.pushContext(self); err != nil {
return err
}
- if newSelectedLineIdx > lc.GetItemsLength()-1 {
+ if newSelectedLineIdx > self.GetItemsLength()-1 {
return nil
}
- lc.GetPanelState().SetSelectedLineIdx(newSelectedLineIdx)
+ self.GetPanelState().SetSelectedLineIdx(newSelectedLineIdx)
- prevViewName := lc.Gui.currentViewName()
- if prevSelectedLineIdx == newSelectedLineIdx && prevViewName == lc.ViewName && lc.OnClickSelectedItem != nil {
- return lc.OnClickSelectedItem()
+ prevViewName := self.Gui.currentViewName()
+ if prevSelectedLineIdx == newSelectedLineIdx && prevViewName == self.ViewName && self.OnClickSelectedItem != nil {
+ return self.OnClickSelectedItem()
}
- return lc.HandleFocus()
+ return self.HandleFocus()
}
-func (lc *ListContext) onSearchSelect(selectedLineIdx int) error {
- lc.GetPanelState().SetSelectedLineIdx(selectedLineIdx)
- return lc.HandleFocus()
+func (self *ListContext) onSearchSelect(selectedLineIdx int) error {
+ self.GetPanelState().SetSelectedLineIdx(selectedLineIdx)
+ return self.HandleFocus()
}
diff --git a/pkg/gui/list_context_config.go b/pkg/gui/list_context_config.go
index 0d591531e..6bd5a63c1 100644
--- a/pkg/gui/list_context_config.go
+++ b/pkg/gui/list_context_config.go
@@ -6,7 +6,7 @@ import (
"github.com/jesseduffield/lazygit/pkg/gui/style"
)
-func (gui *Gui) menuListContext() *ListContext {
+func (gui *Gui) menuListContext() IListContext {
return &ListContext{
BasicContext: &BasicContext{
ViewName: "menu",
@@ -15,7 +15,7 @@ func (gui *Gui) menuListContext() *ListContext {
OnGetOptionsMap: gui.getMenuOptions,
},
GetItemsLength: func() int { return gui.Views.Menu.LinesHeight() },
- GetPanelState: func() IListPanelState { return gui.State.Panels.Menu },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.Menu },
OnFocus: gui.handleMenuSelect,
OnClickSelectedItem: gui.onMenuPress,
Gui: gui,
@@ -24,7 +24,7 @@ func (gui *Gui) menuListContext() *ListContext {
}
}
-func (gui *Gui) filesListContext() *ListContext {
+func (gui *Gui) filesListContext() IListContext {
return &ListContext{
BasicContext: &BasicContext{
ViewName: "files",
@@ -33,11 +33,11 @@ func (gui *Gui) filesListContext() *ListContext {
Kind: SIDE_CONTEXT,
},
GetItemsLength: func() int { return gui.State.FileManager.GetItemsLength() },
- GetPanelState: func() IListPanelState { return gui.State.Panels.Files },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.Files },
OnFocus: gui.focusAndSelectFile,
OnClickSelectedItem: gui.handleFilePress,
Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
lines := gui.State.FileManager.Render(gui.State.Modes.Diffing.Ref, gui.State.Submodules)
mappedLines := make([][]string, len(lines))
for i, line := range lines {
@@ -53,7 +53,7 @@ func (gui *Gui) filesListContext() *ListContext {
}
}
-func (gui *Gui) branchesListContext() *ListContext {
+func (gui *Gui) branchesListContext() IListContext {
return &ListContext{
BasicContext: &BasicContext{
ViewName: "branches",
@@ -61,11 +61,11 @@ func (gui *Gui) branchesListContext() *ListContext {
Key: LOCAL_BRANCHES_CONTEXT_KEY,
Kind: SIDE_CONTEXT,
},
- GetItemsLength: func() int { return len(gui.State.Branches) },
- GetPanelState: func() IListPanelState { return gui.State.Panels.Branches },
- OnFocus: gui.handleBranchSelect,
- Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetItemsLength: func() int { return len(gui.State.Branches) },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.Branches },
+ OnFocus: gui.handleBranchSelect,
+ Gui: gui,
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
return presentation.GetBranchListDisplayStrings(gui.State.Branches, gui.State.ScreenMode != SCREEN_NORMAL, gui.State.Modes.Diffing.Ref)
},
SelectedItem: func() (ListItem, bool) {
@@ -75,7 +75,7 @@ func (gui *Gui) branchesListContext() *ListContext {
}
}
-func (gui *Gui) remotesListContext() *ListContext {
+func (gui *Gui) remotesListContext() IListContext {
return &ListContext{
BasicContext: &BasicContext{
ViewName: "branches",
@@ -84,11 +84,11 @@ func (gui *Gui) remotesListContext() *ListContext {
Kind: SIDE_CONTEXT,
},
GetItemsLength: func() int { return len(gui.State.Remotes) },
- GetPanelState: func() IListPanelState { return gui.State.Panels.Remotes },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.Remotes },
OnFocus: gui.handleRemoteSelect,
OnClickSelectedItem: gui.handleRemoteEnter,
Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
return presentation.GetRemoteListDisplayStrings(gui.State.Remotes, gui.State.Modes.Diffing.Ref)
},
SelectedItem: func() (ListItem, bool) {
@@ -98,7 +98,7 @@ func (gui *Gui) remotesListContext() *ListContext {
}
}
-func (gui *Gui) remoteBranchesListContext() *ListContext {
+func (gui *Gui) remoteBranchesListContext() IListContext {
return &ListContext{
BasicContext: &BasicContext{
ViewName: "branches",
@@ -106,11 +106,11 @@ func (gui *Gui) remoteBranchesListContext() *ListContext {
Key: REMOTE_BRANCHES_CONTEXT_KEY,
Kind: SIDE_CONTEXT,
},
- GetItemsLength: func() int { return len(gui.State.RemoteBranches) },
- GetPanelState: func() IListPanelState { return gui.State.Panels.RemoteBranches },
- OnFocus: gui.handleRemoteBranchSelect,
- Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetItemsLength: func() int { return len(gui.State.RemoteBranches) },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.RemoteBranches },
+ OnFocus: gui.handleRemoteBranchSelect,
+ Gui: gui,
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
return presentation.GetRemoteBranchListDisplayStrings(gui.State.RemoteBranches, gui.State.Modes.Diffing.Ref)
},
SelectedItem: func() (ListItem, bool) {
@@ -120,7 +120,7 @@ func (gui *Gui) remoteBranchesListContext() *ListContext {
}
}
-func (gui *Gui) tagsListContext() *ListContext {
+func (gui *Gui) tagsListContext() IListContext {
return &ListContext{
BasicContext: &BasicContext{
ViewName: "branches",
@@ -128,11 +128,11 @@ func (gui *Gui) tagsListContext() *ListContext {
Key: TAGS_CONTEXT_KEY,
Kind: SIDE_CONTEXT,
},
- GetItemsLength: func() int { return len(gui.State.Tags) },
- GetPanelState: func() IListPanelState { return gui.State.Panels.Tags },
- OnFocus: gui.handleTagSelect,
- Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetItemsLength: func() int { return len(gui.State.Tags) },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.Tags },
+ OnFocus: gui.handleTagSelect,
+ Gui: gui,
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
return presentation.GetTagListDisplayStrings(gui.State.Tags, gui.State.Modes.Diffing.Ref)
},
SelectedItem: func() (ListItem, bool) {
@@ -142,7 +142,7 @@ func (gui *Gui) tagsListContext() *ListContext {
}
}
-func (gui *Gui) branchCommitsListContext() *ListContext {
+func (gui *Gui) branchCommitsListContext() IListContext {
parseEmoji := gui.Config.GetUserConfig().Git.ParseEmoji
return &ListContext{
BasicContext: &BasicContext{
@@ -152,11 +152,11 @@ func (gui *Gui) branchCommitsListContext() *ListContext {
Kind: SIDE_CONTEXT,
},
GetItemsLength: func() int { return len(gui.State.Commits) },
- GetPanelState: func() IListPanelState { return gui.State.Panels.Commits },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.Commits },
OnFocus: gui.handleCommitSelect,
OnClickSelectedItem: gui.handleViewCommitFiles,
Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
return presentation.GetCommitListDisplayStrings(
gui.State.Commits,
gui.State.ScreenMode != SCREEN_NORMAL,
@@ -172,7 +172,7 @@ func (gui *Gui) branchCommitsListContext() *ListContext {
}
}
-func (gui *Gui) reflogCommitsListContext() *ListContext {
+func (gui *Gui) reflogCommitsListContext() IListContext {
parseEmoji := gui.Config.GetUserConfig().Git.ParseEmoji
return &ListContext{
BasicContext: &BasicContext{
@@ -181,11 +181,11 @@ func (gui *Gui) reflogCommitsListContext() *ListContext {
Key: REFLOG_COMMITS_CONTEXT_KEY,
Kind: SIDE_CONTEXT,
},
- GetItemsLength: func() int { return len(gui.State.FilteredReflogCommits) },
- GetPanelState: func() IListPanelState { return gui.State.Panels.ReflogCommits },
- OnFocus: gui.handleReflogCommitSelect,
- Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetItemsLength: func() int { return len(gui.State.FilteredReflogCommits) },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.ReflogCommits },
+ OnFocus: gui.handleReflogCommitSelect,
+ Gui: gui,
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
return presentation.GetReflogCommitListDisplayStrings(
gui.State.FilteredReflogCommits,
gui.State.ScreenMode != SCREEN_NORMAL,
@@ -201,7 +201,7 @@ func (gui *Gui) reflogCommitsListContext() *ListContext {
}
}
-func (gui *Gui) subCommitsListContext() *ListContext {
+func (gui *Gui) subCommitsListContext() IListContext {
parseEmoji := gui.Config.GetUserConfig().Git.ParseEmoji
return &ListContext{
BasicContext: &BasicContext{
@@ -210,11 +210,11 @@ func (gui *Gui) subCommitsListContext() *ListContext {
Key: SUB_COMMITS_CONTEXT_KEY,
Kind: SIDE_CONTEXT,
},
- GetItemsLength: func() int { return len(gui.State.SubCommits) },
- GetPanelState: func() IListPanelState { return gui.State.Panels.SubCommits },
- OnFocus: gui.handleSubCommitSelect,
- Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetItemsLength: func() int { return len(gui.State.SubCommits) },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.SubCommits },
+ OnFocus: gui.handleSubCommitSelect,
+ Gui: gui,
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
return presentation.GetCommitListDisplayStrings(
gui.State.SubCommits,
gui.State.ScreenMode != SCREEN_NORMAL,
@@ -230,7 +230,7 @@ func (gui *Gui) subCommitsListContext() *ListContext {
}
}
-func (gui *Gui) stashListContext() *ListContext {
+func (gui *Gui) stashListContext() IListContext {
return &ListContext{
BasicContext: &BasicContext{
ViewName: "stash",
@@ -238,11 +238,11 @@ func (gui *Gui) stashListContext() *ListContext {
Key: STASH_CONTEXT_KEY,
Kind: SIDE_CONTEXT,
},
- GetItemsLength: func() int { return len(gui.State.StashEntries) },
- GetPanelState: func() IListPanelState { return gui.State.Panels.Stash },
- OnFocus: gui.handleStashEntrySelect,
- Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetItemsLength: func() int { return len(gui.State.StashEntries) },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.Stash },
+ OnFocus: gui.handleStashEntrySelect,
+ Gui: gui,
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
return presentation.GetStashEntryListDisplayStrings(gui.State.StashEntries, gui.State.Modes.Diffing.Ref)
},
SelectedItem: func() (ListItem, bool) {
@@ -252,7 +252,7 @@ func (gui *Gui) stashListContext() *ListContext {
}
}
-func (gui *Gui) commitFilesListContext() *ListContext {
+func (gui *Gui) commitFilesListContext() IListContext {
return &ListContext{
BasicContext: &BasicContext{
ViewName: "commitFiles",
@@ -260,11 +260,11 @@ func (gui *Gui) commitFilesListContext() *ListContext {
Key: COMMIT_FILES_CONTEXT_KEY,
Kind: SIDE_CONTEXT,
},
- GetItemsLength: func() int { return gui.State.CommitFileManager.GetItemsLength() },
- GetPanelState: func() IListPanelState { return gui.State.Panels.CommitFiles },
- OnFocus: gui.handleCommitFileSelect,
- Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetItemsLength: func() int { return gui.State.CommitFileManager.GetItemsLength() },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.CommitFiles },
+ OnFocus: gui.handleCommitFileSelect,
+ Gui: gui,
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
if gui.State.CommitFileManager.GetItemsLength() == 0 {
return [][]string{{style.FgRed.Sprint("(none)")}}
}
@@ -284,7 +284,7 @@ func (gui *Gui) commitFilesListContext() *ListContext {
}
}
-func (gui *Gui) submodulesListContext() *ListContext {
+func (gui *Gui) submodulesListContext() IListContext {
return &ListContext{
BasicContext: &BasicContext{
ViewName: "files",
@@ -292,11 +292,11 @@ func (gui *Gui) submodulesListContext() *ListContext {
Key: SUBMODULES_CONTEXT_KEY,
Kind: SIDE_CONTEXT,
},
- GetItemsLength: func() int { return len(gui.State.Submodules) },
- GetPanelState: func() IListPanelState { return gui.State.Panels.Submodules },
- OnFocus: gui.handleSubmoduleSelect,
- Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetItemsLength: func() int { return len(gui.State.Submodules) },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.Submodules },
+ OnFocus: gui.handleSubmoduleSelect,
+ Gui: gui,
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
return presentation.GetSubmoduleListDisplayStrings(gui.State.Submodules)
},
SelectedItem: func() (ListItem, bool) {
@@ -306,7 +306,7 @@ func (gui *Gui) submodulesListContext() *ListContext {
}
}
-func (gui *Gui) suggestionsListContext() *ListContext {
+func (gui *Gui) suggestionsListContext() IListContext {
return &ListContext{
BasicContext: &BasicContext{
ViewName: "suggestions",
@@ -314,18 +314,18 @@ func (gui *Gui) suggestionsListContext() *ListContext {
Key: SUGGESTIONS_CONTEXT_KEY,
Kind: PERSISTENT_POPUP,
},
- GetItemsLength: func() int { return len(gui.State.Suggestions) },
- GetPanelState: func() IListPanelState { return gui.State.Panels.Suggestions },
- OnFocus: func() error { return nil },
- Gui: gui,
- GetDisplayStrings: func() [][]string {
+ GetItemsLength: func() int { return len(gui.State.Suggestions) },
+ OnGetPanelState: func() IListPanelState { return gui.State.Panels.Suggestions },
+ OnFocus: func() error { return nil },
+ Gui: gui,
+ GetDisplayStrings: func(startIdx int, length int) [][]string {
return presentation.GetSuggestionListDisplayStrings(gui.State.Suggestions)
},
}
}
-func (gui *Gui) getListContexts() []*ListContext {
- return []*ListContext{
+func (gui *Gui) getListContexts() []IListContext {
+ return []IListContext{
gui.State.Contexts.Menu,
gui.State.Contexts.Files,
gui.State.Contexts.Branches,
@@ -333,7 +333,6 @@ func (gui *Gui) getListContexts() []*ListContext {
gui.State.Contexts.RemoteBranches,
gui.State.Contexts.Tags,
gui.State.Contexts.BranchCommits,
- gui.State.Contexts.BranchCommits,
gui.State.Contexts.ReflogCommits,
gui.State.Contexts.SubCommits,
gui.State.Contexts.Stash,
@@ -352,38 +351,38 @@ func (gui *Gui) getListContextKeyBindings() []*Binding {
listContext := listContext
bindings = append(bindings, []*Binding{
- {ViewName: listContext.ViewName, Tag: "navigation", Contexts: []string{string(listContext.Key)}, Key: gui.getKey(keybindingConfig.Universal.PrevItemAlt), Modifier: gocui.ModNone, Handler: listContext.handlePrevLine},
- {ViewName: listContext.ViewName, Tag: "navigation", Contexts: []string{string(listContext.Key)}, Key: gui.getKey(keybindingConfig.Universal.PrevItem), Modifier: gocui.ModNone, Handler: listContext.handlePrevLine},
- {ViewName: listContext.ViewName, Tag: "navigation", Contexts: []string{string(listContext.Key)}, Key: gocui.MouseWheelUp, Modifier: gocui.ModNone, Handler: listContext.handlePrevLine},
- {ViewName: listContext.ViewName, Tag: "navigation", Contexts: []string{string(listContext.Key)}, Key: gui.getKey(keybindingConfig.Universal.NextItemAlt), Modifier: gocui.ModNone, Handler: listContext.handleNextLine},
- {ViewName: listContext.ViewName, Tag: "navigation", Contexts: []string{string(listContext.Key)}, Key: gui.getKey(keybindingConfig.Universal.NextItem), Modifier: gocui.ModNone, Handler: listContext.handleNextLine},
- {ViewName: listContext.ViewName,