1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-10-30 23:57:43 +02:00

Add user config gui.showSelectionInFocusedMainView

This commit is contained in:
Stefan Haller
2025-04-01 16:14:10 +02:00
parent 6a5672a7ad
commit 833d7f2e33
8 changed files with 69 additions and 25 deletions

View File

@@ -137,6 +137,9 @@ gui:
# staging view.
useHunkModeInStagingView: true
# If true, show a selection when the main view is focused.
showSelectionInFocusedMainView: false
# One of 'auto' (default) | 'en' | 'zh-CN' | 'zh-TW' | 'pl' | 'nl' | 'ja' | 'ko'
# | 'ru' | 'pt'
language: auto

View File

@@ -108,6 +108,8 @@ type GuiConfig struct {
WrapLinesInStagingView bool `yaml:"wrapLinesInStagingView"`
// If true, hunk selection mode will be enabled by default when entering the staging view.
UseHunkModeInStagingView bool `yaml:"useHunkModeInStagingView"`
// If true, show a selection when the main view is focused.
ShowSelectionInFocusedMainView bool `yaml:"showSelectionInFocusedMainView"`
// One of 'auto' (default) | 'en' | 'zh-CN' | 'zh-TW' | 'pl' | 'nl' | 'ja' | 'ko' | 'ru' | 'pt'
Language string `yaml:"language" jsonschema:"enum=auto,enum=en,enum=zh-TW,enum=zh-CN,enum=pl,enum=nl,enum=ja,enum=ko,enum=ru"`
// Format used when displaying time e.g. commit time.
@@ -741,25 +743,26 @@ type IconProperties struct {
func GetDefaultConfig() *UserConfig {
return &UserConfig{
Gui: GuiConfig{
ScrollHeight: 2,
ScrollPastBottom: true,
ScrollOffMargin: 2,
ScrollOffBehavior: "margin",
TabWidth: 4,
MouseEvents: true,
SkipAmendWarning: false,
SkipDiscardChangeWarning: false,
SkipStashWarning: false,
SidePanelWidth: 0.3333,
ExpandFocusedSidePanel: false,
ExpandedSidePanelWeight: 2,
MainPanelSplitMode: "flexible",
EnlargedSideViewLocation: "left",
WrapLinesInStagingView: true,
UseHunkModeInStagingView: true,
Language: "auto",
TimeFormat: "02 Jan 06",
ShortTimeFormat: time.Kitchen,
ScrollHeight: 2,
ScrollPastBottom: true,
ScrollOffMargin: 2,
ScrollOffBehavior: "margin",
TabWidth: 4,
MouseEvents: true,
SkipAmendWarning: false,
SkipDiscardChangeWarning: false,
SkipStashWarning: false,
SidePanelWidth: 0.3333,
ExpandFocusedSidePanel: false,
ExpandedSidePanelWeight: 2,
MainPanelSplitMode: "flexible",
EnlargedSideViewLocation: "left",
WrapLinesInStagingView: true,
UseHunkModeInStagingView: true,
ShowSelectionInFocusedMainView: false,
Language: "auto",
TimeFormat: "02 Jan 06",
ShortTimeFormat: time.Kitchen,
Theme: ThemeConfig{
ActiveBorderColor: []string{"green", "bold"},
SearchingActiveBorderColor: []string{"cyan", "bold"},

View File

@@ -230,3 +230,7 @@ func (self *BaseContext) Title() string {
func (self *BaseContext) TotalContentHeight() int {
return self.view.ViewLinesHeight()
}
func (self *BaseContext) SetHighlightOnFocus(value bool) {
self.highlightOnFocus = value
}

View File

@@ -26,7 +26,7 @@ func NewMainContext(
WindowName: windowName,
Key: key,
Focusable: true,
HighlightOnFocus: false,
HighlightOnFocus: c.UserConfig().Gui.ShowSelectionInFocusedMainView,
})),
SearchTrait: NewSearchTrait(c),
}

View File

@@ -89,6 +89,10 @@ func (self *MainViewController) escape() error {
}
func (self *MainViewController) onClickInAlreadyFocusedView(opts gocui.ViewMouseBindingOpts) error {
if self.context.GetView().Highlight && !opts.IsDoubleClick {
return nil
}
sidePanelContext := self.c.Context().NextInStack(self.context)
if sidePanelContext != nil && sidePanelContext.GetOnClickFocusedMainView() != nil {
return sidePanelContext.GetOnClickFocusedMainView()(self.context.GetViewName(), opts.Y)

View File

@@ -3,6 +3,7 @@ package controllers
import (
"github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/gui/types"
"github.com/samber/lo"
)
type ViewSelectionControllerFactory struct {
@@ -61,10 +62,21 @@ func (self *ViewSelectionController) handleLineChange(delta int) {
}
v := self.Context().GetView()
if delta < 0 {
v.ScrollUp(-delta)
if self.context.GetView().Highlight {
lineIdxBefore := v.CursorY() + v.OriginY()
lineIdxAfter := lo.Clamp(lineIdxBefore+delta, 0, v.ViewLinesHeight()-1)
if delta == -1 {
checkScrollUp(self.Context().GetViewTrait(), self.c.UserConfig(), lineIdxBefore, lineIdxAfter)
} else if delta == 1 {
checkScrollDown(self.Context().GetViewTrait(), self.c.UserConfig(), lineIdxBefore, lineIdxAfter)
}
v.FocusPoint(0, lineIdxAfter)
} else {
v.ScrollDown(delta)
if delta < 0 {
v.ScrollUp(-delta)
} else {
v.ScrollDown(delta)
}
}
}
@@ -90,7 +102,11 @@ func (self *ViewSelectionController) handleNextPage() error {
func (self *ViewSelectionController) handleGotoTop() error {
v := self.Context().GetView()
self.handleLineChange(-v.ViewLinesHeight())
if self.context.GetView().Highlight {
v.FocusPoint(0, 0)
} else {
self.handleLineChange(-v.ViewLinesHeight())
}
return nil
}
@@ -99,7 +115,11 @@ func (self *ViewSelectionController) handleGotoBottom() error {
manager.ReadToEnd(func() {
self.c.OnUIThread(func() error {
v := self.Context().GetView()
self.handleLineChange(v.ViewLinesHeight())
if self.context.GetView().Highlight {
v.FocusPoint(0, v.ViewLinesHeight()-1)
} else {
self.handleLineChange(v.ViewLinesHeight())
}
return nil
})
})

View File

@@ -449,6 +449,11 @@ func (gui *Gui) onUserConfigLoaded() error {
gui.g.Mouse = userConfig.Gui.MouseEvents
if gui.State != nil {
gui.Contexts().Normal.SetHighlightOnFocus(userConfig.Gui.ShowSelectionInFocusedMainView)
gui.Contexts().NormalSecondary.SetHighlightOnFocus(userConfig.Gui.ShowSelectionInFocusedMainView)
}
// originally we could only hide the command log permanently via the config
// but now we do it via state. So we need to still support the config for the
// sake of backwards compatibility. We're making use of short circuiting here

View File

@@ -579,6 +579,11 @@
"description": "If true, hunk selection mode will be enabled by default when entering the staging view.",
"default": true
},
"showSelectionInFocusedMainView": {
"type": "boolean",
"description": "If true, show a selection when the main view is focused.",
"default": false
},
"language": {
"type": "string",
"enum": [