diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2019-11-16 16:38:38 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2019-11-21 22:07:14 +1100 |
commit | 61dac10bb94874800d7b955c875cbcc3b3efa546 (patch) | |
tree | 8a70a7645b60eeaf31b4725525dff112af581bb3 /pkg/gui/remotes_panel.go | |
parent | b5385f2560d10fe74af34d9b09c7ebbfe0a46424 (diff) |
support navigating remotes view
Diffstat (limited to 'pkg/gui/remotes_panel.go')
-rw-r--r-- | pkg/gui/remotes_panel.go | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/pkg/gui/remotes_panel.go b/pkg/gui/remotes_panel.go new file mode 100644 index 000000000..d40515716 --- /dev/null +++ b/pkg/gui/remotes_panel.go @@ -0,0 +1,70 @@ +package gui + +import ( + "fmt" + "strings" + + "github.com/fatih/color" + "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/commands" + "github.com/jesseduffield/lazygit/pkg/utils" +) + +// list panel functions + +func (gui *Gui) getSelectedRemote() *commands.Remote { + selectedLine := gui.State.Panels.Remotes.SelectedLine + if selectedLine == -1 { + return nil + } + + return gui.State.Remotes[selectedLine] +} + +func (gui *Gui) handleRemotesClick(g *gocui.Gui, v *gocui.View) error { + itemCount := len(gui.State.Remotes) + handleSelect := gui.handleRemoteSelect + selectedLine := &gui.State.Panels.Remotes.SelectedLine + + return gui.handleClick(v, itemCount, selectedLine, handleSelect) +} + +func (gui *Gui) handleRemoteSelect(g *gocui.Gui, v *gocui.View) error { + if gui.popupPanelFocused() { + return nil + } + + gui.State.SplitMainPanel = false + + if _, err := gui.g.SetCurrentView(v.Name()); err != nil { + return err + } + + gui.getMainView().Title = "Remote" + + remote := gui.getSelectedRemote() + gui.focusPoint(0, gui.State.Panels.Menu.SelectedLine, gui.State.MenuItemCount, v) + if err := gui.focusPoint(0, gui.State.Panels.Remotes.SelectedLine, len(gui.State.Remotes), v); err != nil { + return err + } + + return gui.renderString(g, "main", fmt.Sprintf("%s\nUrls:\n%s", utils.ColoredString(remote.Name, color.FgGreen), strings.Join(remote.Urls, "\n"))) +} + +// gui.refreshStatus is called at the end of this because that's when we can +// be sure there is a state.Remotes array to pick the current remote from +func (gui *Gui) refreshRemotes() error { + remotes, err := gui.GitCommand.GetRemotes() + if err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } + + gui.State.Remotes = remotes + + gui.g.Update(func(g *gocui.Gui) error { + gui.refreshSelectedLine(&gui.State.Panels.Remotes.SelectedLine, len(gui.State.Remotes)) + return nil + }) + + return nil +} |