mirror of
				https://github.com/jesseduffield/lazygit.git
				synced 2025-10-31 02:25:35 +03:00 
			
		
		
		
	There are two ways to jump to the editor on a specific line: pressing `e` in the staging or patch building panels, or clicking on a hyperlink in a delta diff. In both cases, this works perfectly in the unstaged changes view, but in other views (either staged changes, or an older commit) it can often jump to the wrong line; this happens when there are further changes to the file being viewed in later commits or in unstaged changes. This commit fixes this so that you end up on the right line in these cases.
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package context
 | |
| 
 | |
| import (
 | |
| 	"github.com/jesseduffield/lazygit/pkg/commands/models"
 | |
| 	"github.com/jesseduffield/lazygit/pkg/gui/presentation"
 | |
| 	"github.com/jesseduffield/lazygit/pkg/gui/types"
 | |
| 	"github.com/samber/lo"
 | |
| )
 | |
| 
 | |
| type RemoteBranchesContext struct {
 | |
| 	*FilteredListViewModel[*models.RemoteBranch]
 | |
| 	*ListContextTrait
 | |
| 	*DynamicTitleBuilder
 | |
| }
 | |
| 
 | |
| var (
 | |
| 	_ types.IListContext    = (*RemoteBranchesContext)(nil)
 | |
| 	_ types.DiffableContext = (*RemoteBranchesContext)(nil)
 | |
| )
 | |
| 
 | |
| func NewRemoteBranchesContext(
 | |
| 	c *ContextCommon,
 | |
| ) *RemoteBranchesContext {
 | |
| 	viewModel := NewFilteredListViewModel(
 | |
| 		func() []*models.RemoteBranch { return c.Model().RemoteBranches },
 | |
| 		func(remoteBranch *models.RemoteBranch) []string {
 | |
| 			return []string{remoteBranch.Name}
 | |
| 		},
 | |
| 	)
 | |
| 
 | |
| 	getDisplayStrings := func(_ int, _ int) [][]string {
 | |
| 		return presentation.GetRemoteBranchListDisplayStrings(viewModel.GetItems(), c.Modes().Diffing.Ref)
 | |
| 	}
 | |
| 
 | |
| 	return &RemoteBranchesContext{
 | |
| 		FilteredListViewModel: viewModel,
 | |
| 		DynamicTitleBuilder:   NewDynamicTitleBuilder(c.Tr.RemoteBranchesDynamicTitle),
 | |
| 		ListContextTrait: &ListContextTrait{
 | |
| 			Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{
 | |
| 				View:                        c.Views().RemoteBranches,
 | |
| 				WindowName:                  "branches",
 | |
| 				Key:                         REMOTE_BRANCHES_CONTEXT_KEY,
 | |
| 				Kind:                        types.SIDE_CONTEXT,
 | |
| 				Focusable:                   true,
 | |
| 				Transient:                   true,
 | |
| 				NeedsRerenderOnHeightChange: true,
 | |
| 			})),
 | |
| 			ListRenderer: ListRenderer{
 | |
| 				list:              viewModel,
 | |
| 				getDisplayStrings: getDisplayStrings,
 | |
| 			},
 | |
| 			c: c,
 | |
| 		},
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (self *RemoteBranchesContext) GetSelectedRef() types.Ref {
 | |
| 	remoteBranch := self.GetSelected()
 | |
| 	if remoteBranch == nil {
 | |
| 		return nil
 | |
| 	}
 | |
| 	return remoteBranch
 | |
| }
 | |
| 
 | |
| func (self *RemoteBranchesContext) GetSelectedRefs() ([]types.Ref, int, int) {
 | |
| 	items, startIdx, endIdx := self.GetSelectedItems()
 | |
| 
 | |
| 	refs := lo.Map(items, func(item *models.RemoteBranch, _ int) types.Ref {
 | |
| 		return item
 | |
| 	})
 | |
| 
 | |
| 	return refs, startIdx, endIdx
 | |
| }
 | |
| 
 | |
| func (self *RemoteBranchesContext) GetDiffTerminals() []string {
 | |
| 	itemId := self.GetSelectedItemId()
 | |
| 
 | |
| 	return []string{itemId}
 | |
| }
 | |
| 
 | |
| func (self *RemoteBranchesContext) RefForAdjustingLineNumberInDiff() string {
 | |
| 	return self.GetSelectedItemId()
 | |
| }
 | |
| 
 | |
| func (self *RemoteBranchesContext) ShowBranchHeadsInSubCommits() bool {
 | |
| 	return true
 | |
| }
 |