mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-07-17 01:42:45 +02:00
Collapse selection after deleting a range of branches or stashes (#4661)
- **PR Description** Fixes selection state persistence after deletion by resetting selection mode. Resolves [#4612](https://github.com/jesseduffield/lazygit/issues/4612)
This commit is contained in:
@ -133,10 +133,19 @@ func (self *ListCursor) GetRangeStartIdx() (int, bool) {
|
|||||||
return 0, false
|
return 0, false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cancel range select mode, but keep the "moving end" of the range selected.
|
||||||
|
// Used when pressing 'v' or escape to toggle range select mode, for example.
|
||||||
func (self *ListCursor) CancelRangeSelect() {
|
func (self *ListCursor) CancelRangeSelect() {
|
||||||
self.rangeSelectMode = RangeSelectModeNone
|
self.rangeSelectMode = RangeSelectModeNone
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cancel range select mode, but keep the top of the range selected. Note that
|
||||||
|
// this is different from CancelRangeSelect. Useful after deleting a range of items.
|
||||||
|
func (self *ListCursor) CollapseRangeSelectionToTop() {
|
||||||
|
start, _ := self.GetSelectionRange()
|
||||||
|
self.SetSelection(start)
|
||||||
|
}
|
||||||
|
|
||||||
// Returns true if we are in range select mode. Note that we may be in range select
|
// Returns true if we are in range select mode. Note that we may be in range select
|
||||||
// mode and still only selecting a single item. See AreMultipleItemsSelected below.
|
// mode and still only selecting a single item. See AreMultipleItemsSelected below.
|
||||||
func (self *ListCursor) IsSelectingRange() bool {
|
func (self *ListCursor) IsSelectingRange() bool {
|
||||||
|
@ -535,7 +535,7 @@ func (self *BranchesController) remoteDelete(branches []*models.Branch) error {
|
|||||||
remoteBranches := lo.Map(branches, func(branch *models.Branch, _ int) *models.RemoteBranch {
|
remoteBranches := lo.Map(branches, func(branch *models.Branch, _ int) *models.RemoteBranch {
|
||||||
return &models.RemoteBranch{Name: branch.UpstreamBranch, RemoteName: branch.UpstreamRemote}
|
return &models.RemoteBranch{Name: branch.UpstreamBranch, RemoteName: branch.UpstreamRemote}
|
||||||
})
|
})
|
||||||
return self.c.Helpers().BranchesHelper.ConfirmDeleteRemote(remoteBranches)
|
return self.c.Helpers().BranchesHelper.ConfirmDeleteRemote(remoteBranches, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *BranchesController) localAndRemoteDelete(branches []*models.Branch) error {
|
func (self *BranchesController) localAndRemoteDelete(branches []*models.Branch) error {
|
||||||
|
@ -47,8 +47,8 @@ func (self *BranchesHelper) ConfirmLocalDelete(branches []*models.Branch) error
|
|||||||
if err := self.c.Git().Branch.LocalDelete(branchNames, true); err != nil {
|
if err := self.c.Git().Branch.LocalDelete(branchNames, true); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
selectionStart, _ := self.c.Contexts().Branches.GetSelectionRange()
|
|
||||||
self.c.Contexts().Branches.SetSelectedLineIdx(selectionStart)
|
self.c.Contexts().Branches.CollapseRangeSelectionToTop()
|
||||||
self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.BRANCHES}})
|
self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.BRANCHES}})
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
@ -82,7 +82,7 @@ func (self *BranchesHelper) ConfirmLocalDelete(branches []*models.Branch) error
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *BranchesHelper) ConfirmDeleteRemote(remoteBranches []*models.RemoteBranch) error {
|
func (self *BranchesHelper) ConfirmDeleteRemote(remoteBranches []*models.RemoteBranch, resetRemoteBranchesSelection bool) error {
|
||||||
var title string
|
var title string
|
||||||
if len(remoteBranches) == 1 {
|
if len(remoteBranches) == 1 {
|
||||||
title = utils.ResolvePlaceholderString(
|
title = utils.ResolvePlaceholderString(
|
||||||
@ -115,6 +115,9 @@ func (self *BranchesHelper) ConfirmDeleteRemote(remoteBranches []*models.RemoteB
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.BRANCHES, types.REMOTES}})
|
self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.BRANCHES, types.REMOTES}})
|
||||||
|
if resetRemoteBranchesSelection {
|
||||||
|
self.c.Contexts().RemoteBranches.CollapseRangeSelectionToTop()
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@ -180,9 +183,7 @@ func (self *BranchesHelper) ConfirmLocalAndRemoteDelete(branches []*models.Branc
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
selectionStart, _ := self.c.Contexts().Branches.GetSelectionRange()
|
self.c.Contexts().Branches.CollapseRangeSelectionToTop()
|
||||||
self.c.Contexts().Branches.SetSelectedLineIdx(selectionStart)
|
|
||||||
|
|
||||||
self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.BRANCHES, types.REMOTES}})
|
self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.BRANCHES, types.REMOTES}})
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
@ -133,7 +133,7 @@ func (self *RemoteBranchesController) context() *context.RemoteBranchesContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *RemoteBranchesController) delete(selectedBranches []*models.RemoteBranch) error {
|
func (self *RemoteBranchesController) delete(selectedBranches []*models.RemoteBranch) error {
|
||||||
return self.c.Helpers().BranchesHelper.ConfirmDeleteRemote(selectedBranches)
|
return self.c.Helpers().BranchesHelper.ConfirmDeleteRemote(selectedBranches, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *RemoteBranchesController) merge(selectedBranch *models.RemoteBranch) error {
|
func (self *RemoteBranchesController) merge(selectedBranch *models.RemoteBranch) error {
|
||||||
|
@ -178,6 +178,7 @@ func (self *StashController) handleStashDrop(stashEntries []*models.StashEntry)
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
self.context().CollapseRangeSelectionToTop()
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user