Skip to content

Commit 182cefc

Browse files
authored
Fix changing language while lazygit is running (#4361)
- **PR Description** When changing the language in the config file while lazygit is running, the panel titles and tab titles weren't properly updated. I noticed this while working on #4359. Probably not an important feature for users, because they are unlikely to change the language all the time; but it's still nice if this isn't broken.
2 parents 26cb406 + 20ab6c8 commit 182cefc

File tree

3 files changed

+50
-65
lines changed

3 files changed

+50
-65
lines changed

pkg/gui/gui.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,15 @@ func (gui *Gui) onUserConfigLoaded() error {
424424
userConfig := gui.Config.GetUserConfig()
425425
gui.Common.SetUserConfig(userConfig)
426426

427+
if gui.previousLanguageConfig != userConfig.Gui.Language {
428+
tr, err := i18n.NewTranslationSetFromConfig(gui.Log, userConfig.Gui.Language)
429+
if err != nil {
430+
return err
431+
}
432+
gui.c.Tr = tr
433+
gui.previousLanguageConfig = userConfig.Gui.Language
434+
}
435+
427436
gui.setColorScheme()
428437
gui.configureViewProperties()
429438

@@ -435,15 +444,6 @@ func (gui *Gui) onUserConfigLoaded() error {
435444

436445
gui.g.Mouse = userConfig.Gui.MouseEvents
437446

438-
if gui.previousLanguageConfig != userConfig.Gui.Language {
439-
tr, err := i18n.NewTranslationSetFromConfig(gui.Log, userConfig.Gui.Language)
440-
if err != nil {
441-
return err
442-
}
443-
gui.c.Tr = tr
444-
gui.previousLanguageConfig = userConfig.Gui.Language
445-
}
446-
447447
// originally we could only hide the command log permanently via the config
448448
// but now we do it via state. So we need to still support the config for the
449449
// sake of backwards compatibility. We're making use of short circuiting here

pkg/gui/layout.go

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ package gui
22

33
import (
44
"github.com/jesseduffield/gocui"
5-
"github.com/jesseduffield/lazygit/pkg/gui/context"
65
"github.com/jesseduffield/lazygit/pkg/gui/types"
76
"github.com/samber/lo"
8-
"golang.org/x/exp/slices"
97
)
108

119
// layout is called for every screen re-render e.g. when the screen is resized
@@ -244,25 +242,6 @@ func (gui *Gui) onRepoViewReset() error {
244242
}
245243
}
246244

247-
gui.g.Mutexes.ViewsMutex.Lock()
248-
// add tabs to views
249-
for _, view := range gui.g.Views() {
250-
// if the view is in our mapping, we'll set the tabs and the tab index
251-
for _, values := range gui.viewTabMap() {
252-
index := slices.IndexFunc(values, func(tabContext context.TabView) bool {
253-
return tabContext.ViewName == view.Name()
254-
})
255-
256-
if index != -1 {
257-
view.Tabs = lo.Map(values, func(tabContext context.TabView, _ int) string {
258-
return tabContext.Tab
259-
})
260-
view.TabIndex = index
261-
}
262-
}
263-
}
264-
gui.g.Mutexes.ViewsMutex.Unlock()
265-
266245
return nil
267246
}
268247

pkg/gui/views.go

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import (
44
"fmt"
55

66
"github.com/jesseduffield/gocui"
7+
"github.com/jesseduffield/lazygit/pkg/gui/context"
78
"github.com/jesseduffield/lazygit/pkg/theme"
89
"github.com/samber/lo"
10+
"golang.org/x/exp/slices"
911
)
1012

1113
type viewNameMapping struct {
@@ -86,7 +88,6 @@ func (gui *Gui) createAllViews() error {
8688
gui.Views.SearchPrefix.BgColor = gocui.ColorDefault
8789
gui.Views.SearchPrefix.FgColor = gocui.ColorCyan
8890
gui.Views.SearchPrefix.Frame = false
89-
gui.c.SetViewContent(gui.Views.SearchPrefix, gui.Tr.SearchPrefix)
9091

9192
gui.Views.StatusSpacer1.Frame = false
9293
gui.Views.StatusSpacer2.Frame = false
@@ -97,62 +98,30 @@ func (gui *Gui) createAllViews() error {
9798
gui.Views.Search.Frame = false
9899
gui.Views.Search.Editor = gocui.EditorFunc(gui.searchEditor)
99100

100-
gui.Views.Stash.Title = gui.c.Tr.StashTitle
101-
102-
gui.Views.Commits.Title = gui.c.Tr.CommitsTitle
103-
104-
gui.Views.CommitFiles.Title = gui.c.Tr.CommitFiles
105-
106-
gui.Views.Branches.Title = gui.c.Tr.BranchesTitle
107-
108-
gui.Views.Remotes.Title = gui.c.Tr.RemotesTitle
109-
110-
gui.Views.Worktrees.Title = gui.c.Tr.WorktreesTitle
111-
112-
gui.Views.Tags.Title = gui.c.Tr.TagsTitle
113-
114-
gui.Views.Files.Title = gui.c.Tr.FilesTitle
115-
116101
for _, view := range []*gocui.View{gui.Views.Main, gui.Views.Secondary, gui.Views.Staging, gui.Views.StagingSecondary, gui.Views.PatchBuilding, gui.Views.PatchBuildingSecondary, gui.Views.MergeConflicts} {
117-
view.Title = gui.c.Tr.DiffTitle
118102
view.Wrap = true
119103
view.IgnoreCarriageReturns = true
120104
view.UnderlineHyperLinksOnlyOnHover = true
121105
view.AutoRenderHyperLinks = true
122106
}
123107

124-
gui.Views.Staging.Title = gui.c.Tr.UnstagedChanges
125108
gui.Views.Staging.Wrap = true
126-
127-
gui.Views.StagingSecondary.Title = gui.c.Tr.StagedChanges
128109
gui.Views.StagingSecondary.Wrap = true
129-
130-
gui.Views.PatchBuilding.Title = gui.Tr.Patch
131110
gui.Views.PatchBuilding.Wrap = true
132-
133-
gui.Views.PatchBuildingSecondary.Title = gui.Tr.CustomPatch
134111
gui.Views.PatchBuildingSecondary.Wrap = true
135-
136-
gui.Views.MergeConflicts.Title = gui.c.Tr.MergeConflictsTitle
137112
gui.Views.MergeConflicts.Wrap = false
138-
139-
gui.Views.Limit.Title = gui.c.Tr.NotEnoughSpace
140113
gui.Views.Limit.Wrap = true
141114

142-
gui.Views.Status.Title = gui.c.Tr.StatusTitle
143-
144115
gui.Views.AppStatus.BgColor = gocui.ColorDefault
145116
gui.Views.AppStatus.FgColor = gocui.ColorCyan
146117
gui.Views.AppStatus.Visible = false
147118
gui.Views.AppStatus.Frame = false
148119

149120
gui.Views.CommitMessage.Visible = false
150-
gui.Views.CommitMessage.Title = gui.c.Tr.CommitSummary
151121
gui.Views.CommitMessage.Editable = true
152122
gui.Views.CommitMessage.Editor = gocui.EditorFunc(gui.commitMessageEditor)
153123

154124
gui.Views.CommitDescription.Visible = false
155-
gui.Views.CommitDescription.Title = gui.c.Tr.CommitDescriptionTitle
156125
gui.Views.CommitDescription.Editable = true
157126
gui.Views.CommitDescription.Editor = gocui.EditorFunc(gui.commitDescriptionEditor)
158127

@@ -170,12 +139,10 @@ func (gui *Gui) createAllViews() error {
170139
gui.Views.Information.FgColor = gocui.ColorGreen
171140
gui.Views.Information.Frame = false
172141

173-
gui.Views.Extras.Title = gui.c.Tr.CommandLog
174142
gui.Views.Extras.Autoscroll = true
175143
gui.Views.Extras.Wrap = true
176144
gui.Views.Extras.AutoRenderHyperLinks = true
177145

178-
gui.Views.Snake.Title = gui.c.Tr.SnakeTitle
179146
gui.Views.Snake.FgColor = gocui.ColorGreen
180147

181148
return nil
@@ -201,7 +168,30 @@ func (gui *Gui) configureViewProperties() {
201168
(*mapping.viewPtr).InactiveViewSelBgColor = theme.GocuiInactiveViewSelectedLineBgColor
202169
}
203170

171+
gui.c.SetViewContent(gui.Views.SearchPrefix, gui.c.Tr.SearchPrefix)
172+
173+
gui.Views.Stash.Title = gui.c.Tr.StashTitle
174+
gui.Views.Commits.Title = gui.c.Tr.CommitsTitle
175+
gui.Views.CommitFiles.Title = gui.c.Tr.CommitFiles
176+
gui.Views.Branches.Title = gui.c.Tr.BranchesTitle
177+
gui.Views.Remotes.Title = gui.c.Tr.RemotesTitle
178+
gui.Views.Worktrees.Title = gui.c.Tr.WorktreesTitle
179+
gui.Views.Tags.Title = gui.c.Tr.TagsTitle
180+
gui.Views.Files.Title = gui.c.Tr.FilesTitle
181+
gui.Views.PatchBuilding.Title = gui.c.Tr.Patch
182+
gui.Views.PatchBuildingSecondary.Title = gui.c.Tr.CustomPatch
183+
gui.Views.MergeConflicts.Title = gui.c.Tr.MergeConflictsTitle
184+
gui.Views.Limit.Title = gui.c.Tr.NotEnoughSpace
185+
gui.Views.Status.Title = gui.c.Tr.StatusTitle
186+
gui.Views.Staging.Title = gui.c.Tr.UnstagedChanges
187+
gui.Views.StagingSecondary.Title = gui.c.Tr.StagedChanges
188+
gui.Views.CommitMessage.Title = gui.c.Tr.CommitSummary
189+
gui.Views.CommitDescription.Title = gui.c.Tr.CommitDescriptionTitle
190+
gui.Views.Extras.Title = gui.c.Tr.CommandLog
191+
gui.Views.Snake.Title = gui.c.Tr.SnakeTitle
192+
204193
for _, view := range []*gocui.View{gui.Views.Main, gui.Views.Secondary, gui.Views.Staging, gui.Views.StagingSecondary, gui.Views.PatchBuilding, gui.Views.PatchBuildingSecondary, gui.Views.MergeConflicts} {
194+
view.Title = gui.c.Tr.DiffTitle
205195
view.CanScrollPastBottom = gui.c.UserConfig().Gui.ScrollPastBottom
206196
view.TabWidth = gui.c.UserConfig().Gui.TabWidth
207197
}
@@ -246,4 +236,20 @@ func (gui *Gui) configureViewProperties() {
246236

247237
gui.Views.Stash.TitlePrefix = ""
248238
}
239+
240+
for _, view := range gui.g.Views() {
241+
// if the view is in our mapping, we'll set the tabs and the tab index
242+
for _, values := range gui.viewTabMap() {
243+
index := slices.IndexFunc(values, func(tabContext context.TabView) bool {
244+
return tabContext.ViewName == view.Name()
245+
})
246+
247+
if index != -1 {
248+
view.Tabs = lo.Map(values, func(tabContext context.TabView, _ int) string {
249+
return tabContext.Tab
250+
})
251+
view.TabIndex = index
252+
}
253+
}
254+
}
249255
}

0 commit comments

Comments
 (0)