From c57461a1e652cd0b3e7be91cb502e1b1ea8e8b46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=BCseyin=20Akba=C5=9F?= Date: Wed, 6 May 2026 15:33:11 +0300 Subject: [PATCH] Add unstaged, staged tabs on [2] Files section --- pkg/gui/gui.go | 8 +++++++ pkg/gui/view_helpers.go | 52 +++++++++++++++++++++++++++++++++++++++++ pkg/gui/views.go | 4 ++++ 3 files changed, 64 insertions(+) diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index ce22f4240..236debabb 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -862,6 +862,14 @@ func (gui *Gui) viewTabMap() map[string][]context.TabView { Tab: gui.c.Tr.FilesTitle, ViewName: "files", }, + { + Tab: gui.c.Tr.UnstagedChanges, + ViewName: "files", + }, + { + Tab: gui.c.Tr.StagedChanges, + ViewName: "files", + }, context.TabView{ Tab: gui.c.Tr.WorktreesTitle, ViewName: "worktrees", diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index 453ccd6c9..7a1c7e543 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -5,6 +5,7 @@ import ( "github.com/jesseduffield/lazygit/pkg/gocui" "github.com/jesseduffield/lazygit/pkg/gui/context" + "github.com/jesseduffield/lazygit/pkg/gui/filetree" "github.com/jesseduffield/lazygit/pkg/gui/types" "github.com/jesseduffield/lazygit/pkg/tasks" "github.com/jesseduffield/lazygit/pkg/utils" @@ -63,6 +64,12 @@ func (gui *Gui) onViewTabClick(windowName string, tabIndex int) error { return nil } + if windowName == "files" { + if err := gui.applyFilesTab(tabs[tabIndex].Tab); err != nil { + return err + } + } + viewName := tabs[tabIndex].ViewName context, ok := gui.helpers.View.ContextForView(viewName) @@ -114,9 +121,54 @@ func getTabbedView(gui *Gui) *gocui.View { // It safe assumption that only static contexts have tabs context := gui.c.Context().CurrentStatic() view, _ := gui.g.View(context.GetViewName()) + if view != nil && view.Name() == "files" { + view.TabIndex = gui.filesTabIndex() + } return view } +func (gui *Gui) filesTabIndex() int { + if gui.State == nil || gui.State.Contexts == nil || gui.State.Contexts.Files == nil { + return 0 + } + + filter := gui.State.Contexts.Files.GetStatusFilter() + switch filter { + case filetree.DisplayUnstaged: + return 1 + case filetree.DisplayStaged: + return 2 + default: + return 0 + } +} + +func (gui *Gui) applyFilesTab(tabName string) error { + if gui.State == nil || gui.State.Contexts == nil || gui.State.Contexts.Files == nil { + return nil + } + + filesContext := gui.State.Contexts.Files + desiredFilter := filetree.DisplayAll + + switch tabName { + case gui.c.Tr.UnstagedChanges: + desiredFilter = filetree.DisplayUnstaged + case gui.c.Tr.StagedChanges: + desiredFilter = filetree.DisplayStaged + case gui.c.Tr.FilesTitle: + desiredFilter = filetree.DisplayAll + default: + return nil + } + + filesContext.FileTreeViewModel.SetStatusFilter(desiredFilter) + filesContext.GetView().Subtitle = "" + filesContext.GetView().TabIndex = gui.filesTabIndex() + gui.postRefreshUpdate(filesContext) + return nil +} + func (gui *Gui) render() { gui.c.OnUIThread(func() error { return nil }) } diff --git a/pkg/gui/views.go b/pkg/gui/views.go index 093257998..702d2b8d1 100644 --- a/pkg/gui/views.go +++ b/pkg/gui/views.go @@ -271,4 +271,8 @@ func (gui *Gui) configureViewProperties() { } } } + + if gui.Views.Files != nil { + gui.Views.Files.TabIndex = gui.filesTabIndex() + } }