diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index 01447a67b..8248e5e99 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -1287,6 +1287,14 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Handler: gui.handleCheckoutRemoteBranch, Description: gui.Tr.SLocalize("checkout"), }, + { + ViewName: "branches", + Contexts: []string{"remote-branches"}, + Key: gui.getKey("universal.new"), + Handler: gui.handleNewBranchOffRemote, + Description: gui.Tr.SLocalize("newBranch"), + }, + { ViewName: "branches", Contexts: []string{"remote-branches"}, diff --git a/pkg/gui/remote_branches_panel.go b/pkg/gui/remote_branches_panel.go index 0b0349da0..b5cc102b9 100644 --- a/pkg/gui/remote_branches_panel.go +++ b/pkg/gui/remote_branches_panel.go @@ -139,3 +139,26 @@ func (gui *Gui) handleCreateResetToRemoteBranchMenu(g *gocui.Gui, v *gocui.View) return gui.createResetMenu(fmt.Sprintf("%s/%s", selectedBranch.RemoteName, selectedBranch.Name)) } + +func (gui *Gui) handleNewBranchOffRemote(g *gocui.Gui, v *gocui.View) error { + branch := gui.getSelectedRemoteBranch() + if branch == nil { + return nil + } + message := gui.Tr.TemplateLocalize( + "NewBranchNameBranchOff", + Teml{ + "branchName": branch.FullName(), + }, + ) + return gui.createPromptPanel(g, v, message, branch.FullName(), func(g *gocui.Gui, v *gocui.View) error { + if err := gui.GitCommand.NewBranch(gui.trimmedContent(v), branch.FullName()); err != nil { + return gui.surfaceError(err) + } + gui.State.Panels.Branches.SelectedLine = 0 + if err := gui.switchBranchesPanelContext("local-branches"); err != nil { + return err + } + return gui.refreshSidePanels(refreshOptions{mode: ASYNC}) + }) +}