mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-07-30 03:23:08 +03:00
Add a sort order menu for local branches
This commit is contained in:
committed by
Stefan Haller
parent
1e85c4379f
commit
36a29f225b
@ -97,6 +97,12 @@ func (self *BranchesController) GetKeybindings(opts types.KeybindingsOpts) []*ty
|
||||
Handler: self.checkSelected(self.createTag),
|
||||
Description: self.c.Tr.CreateTag,
|
||||
},
|
||||
{
|
||||
Key: opts.GetKey(opts.Config.Branches.SortOrder),
|
||||
Handler: self.createSortMenu,
|
||||
Description: self.c.Tr.SortOrder,
|
||||
OpensMenu: true,
|
||||
},
|
||||
{
|
||||
Key: opts.GetKey(opts.Config.Commits.ViewResetOptions),
|
||||
Handler: self.checkSelected(self.createResetMenu),
|
||||
@ -617,6 +623,18 @@ func (self *BranchesController) createTag(branch *models.Branch) error {
|
||||
return self.c.Helpers().Tags.OpenCreateTagPrompt(branch.FullRefName(), func() {})
|
||||
}
|
||||
|
||||
func (self *BranchesController) createSortMenu() error {
|
||||
return self.c.Helpers().Refs.CreateSortOrderMenu([]string{"recency", "alphabetical", "date"}, func(sortOrder string) error {
|
||||
if self.c.GetAppState().LocalBranchSortOrder != sortOrder {
|
||||
self.c.GetAppState().LocalBranchSortOrder = sortOrder
|
||||
self.c.SaveAppStateAndLogError()
|
||||
self.c.Contexts().Branches.SetSelectedLineIdx(0)
|
||||
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.BRANCHES}})
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (self *BranchesController) createResetMenu(selectedBranch *models.Branch) error {
|
||||
return self.c.Helpers().Refs.CreateGitResetMenu(selectedBranch.Name)
|
||||
}
|
||||
|
@ -430,7 +430,7 @@ func (self *RefreshHelper) refreshBranches(refreshWorktrees bool) {
|
||||
defer self.c.Mutexes().RefreshingBranchesMutex.Unlock()
|
||||
|
||||
reflogCommits := self.c.Model().FilteredReflogCommits
|
||||
if self.c.Modes().Filtering.Active() {
|
||||
if self.c.Modes().Filtering.Active() && self.c.AppState.LocalBranchSortOrder == "recency" {
|
||||
// in filter mode we filter our reflog commits to just those containing the path
|
||||
// however we need all the reflog entries to populate the recencies of our branches
|
||||
// which allows us to order them correctly. So if we're filtering we'll just
|
||||
|
@ -119,31 +119,40 @@ func (self *RefsHelper) ResetToRef(ref string, strength string, envVars []string
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *RefsHelper) CreateSortOrderMenu(onSelected func(sortOrder string) error) error {
|
||||
type sortOrderWithKey struct {
|
||||
key types.Key
|
||||
label string
|
||||
sortKey string
|
||||
sortOrder string
|
||||
func (self *RefsHelper) CreateSortOrderMenu(sortOptionsOrder []string, onSelected func(sortOrder string) error) error {
|
||||
type sortMenuOption struct {
|
||||
key types.Key
|
||||
label string
|
||||
description string
|
||||
sortOrder string
|
||||
}
|
||||
sortKeys := []sortOrderWithKey{
|
||||
{label: self.c.Tr.SortAlphabetical, sortKey: "refname", sortOrder: "alphabetical", key: 'a'},
|
||||
{label: self.c.Tr.SortByDate, sortKey: "-committerdate", sortOrder: "date", key: 'd'},
|
||||
availableSortOptions := map[string]sortMenuOption{
|
||||
"recency": {label: self.c.Tr.SortByRecency, description: self.c.Tr.SortBasedOnReflog, key: 'r'},
|
||||
"alphabetical": {label: self.c.Tr.SortAlphabetical, description: "--sort=refname", key: 'a'},
|
||||
"date": {label: self.c.Tr.SortByDate, description: "--sort=-committerdate", key: 'd'},
|
||||
}
|
||||
sortOptions := make([]sortMenuOption, 0, len(sortOptionsOrder))
|
||||
for _, key := range sortOptionsOrder {
|
||||
sortOption, ok := availableSortOptions[key]
|
||||
if !ok {
|
||||
panic(fmt.Sprintf("unexpected sort order: %s", key))
|
||||
}
|
||||
sortOption.sortOrder = key
|
||||
sortOptions = append(sortOptions, sortOption)
|
||||
}
|
||||
|
||||
menuItems := lo.Map(sortKeys, func(row sortOrderWithKey, _ int) *types.MenuItem {
|
||||
menuItems := lo.Map(sortOptions, func(opt sortMenuOption, _ int) *types.MenuItem {
|
||||
return &types.MenuItem{
|
||||
LabelColumns: []string{
|
||||
row.label,
|
||||
style.FgYellow.Sprintf("--sort=%s", row.sortKey),
|
||||
opt.label,
|
||||
style.FgYellow.Sprint(opt.description),
|
||||
},
|
||||
OnPress: func() error {
|
||||
return onSelected(row.sortOrder)
|
||||
return onSelected(opt.sortOrder)
|
||||
},
|
||||
Key: row.key,
|
||||
Key: opt.key,
|
||||
}
|
||||
})
|
||||
|
||||
return self.c.Menu(types.CreateMenuOptions{
|
||||
Title: self.c.Tr.SortOrder,
|
||||
Items: menuItems,
|
||||
|
@ -128,7 +128,7 @@ func (self *RemoteBranchesController) rebase(selectedBranch *models.RemoteBranch
|
||||
}
|
||||
|
||||
func (self *RemoteBranchesController) createSortMenu() error {
|
||||
return self.c.Helpers().Refs.CreateSortOrderMenu(func(sortOrder string) error {
|
||||
return self.c.Helpers().Refs.CreateSortOrderMenu([]string{"alphabetical", "date"}, func(sortOrder string) error {
|
||||
if self.c.GetAppState().RemoteBranchSortOrder != sortOrder {
|
||||
self.c.GetAppState().RemoteBranchSortOrder = sortOrder
|
||||
self.c.SaveAppStateAndLogError()
|
||||
|
Reference in New Issue
Block a user