mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-07-31 14:24:25 +03:00
Add user config gui.showSelectionInFocusedMainView
This commit is contained in:
@ -116,6 +116,9 @@ gui:
|
|||||||
# paragraphs of markdown text.
|
# paragraphs of markdown text.
|
||||||
wrapLinesInStagingView: true
|
wrapLinesInStagingView: 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'
|
# One of 'auto' (default) | 'en' | 'zh-CN' | 'zh-TW' | 'pl' | 'nl' | 'ja' | 'ko' | 'ru'
|
||||||
language: auto
|
language: auto
|
||||||
|
|
||||||
|
@ -107,6 +107,8 @@ type GuiConfig struct {
|
|||||||
// makes it much easier to work with diffs that have long lines, e.g.
|
// makes it much easier to work with diffs that have long lines, e.g.
|
||||||
// paragraphs of markdown text.
|
// paragraphs of markdown text.
|
||||||
WrapLinesInStagingView bool `yaml:"wrapLinesInStagingView"`
|
WrapLinesInStagingView bool `yaml:"wrapLinesInStagingView"`
|
||||||
|
// 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'
|
// One of 'auto' (default) | 'en' | 'zh-CN' | 'zh-TW' | 'pl' | 'nl' | 'ja' | 'ko' | 'ru'
|
||||||
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"`
|
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.
|
// Format used when displaying time e.g. commit time.
|
||||||
@ -730,24 +732,25 @@ type IconProperties struct {
|
|||||||
func GetDefaultConfig() *UserConfig {
|
func GetDefaultConfig() *UserConfig {
|
||||||
return &UserConfig{
|
return &UserConfig{
|
||||||
Gui: GuiConfig{
|
Gui: GuiConfig{
|
||||||
ScrollHeight: 2,
|
ScrollHeight: 2,
|
||||||
ScrollPastBottom: true,
|
ScrollPastBottom: true,
|
||||||
ScrollOffMargin: 2,
|
ScrollOffMargin: 2,
|
||||||
ScrollOffBehavior: "margin",
|
ScrollOffBehavior: "margin",
|
||||||
TabWidth: 4,
|
TabWidth: 4,
|
||||||
MouseEvents: true,
|
MouseEvents: true,
|
||||||
SkipAmendWarning: false,
|
SkipAmendWarning: false,
|
||||||
SkipDiscardChangeWarning: false,
|
SkipDiscardChangeWarning: false,
|
||||||
SkipStashWarning: false,
|
SkipStashWarning: false,
|
||||||
SidePanelWidth: 0.3333,
|
SidePanelWidth: 0.3333,
|
||||||
ExpandFocusedSidePanel: false,
|
ExpandFocusedSidePanel: false,
|
||||||
ExpandedSidePanelWeight: 2,
|
ExpandedSidePanelWeight: 2,
|
||||||
MainPanelSplitMode: "flexible",
|
MainPanelSplitMode: "flexible",
|
||||||
EnlargedSideViewLocation: "left",
|
EnlargedSideViewLocation: "left",
|
||||||
WrapLinesInStagingView: true,
|
WrapLinesInStagingView: true,
|
||||||
Language: "auto",
|
ShowSelectionInFocusedMainView: false,
|
||||||
TimeFormat: "02 Jan 06",
|
Language: "auto",
|
||||||
ShortTimeFormat: time.Kitchen,
|
TimeFormat: "02 Jan 06",
|
||||||
|
ShortTimeFormat: time.Kitchen,
|
||||||
Theme: ThemeConfig{
|
Theme: ThemeConfig{
|
||||||
ActiveBorderColor: []string{"green", "bold"},
|
ActiveBorderColor: []string{"green", "bold"},
|
||||||
SearchingActiveBorderColor: []string{"cyan", "bold"},
|
SearchingActiveBorderColor: []string{"cyan", "bold"},
|
||||||
|
@ -228,3 +228,7 @@ func (self *BaseContext) Title() string {
|
|||||||
func (self *BaseContext) TotalContentHeight() int {
|
func (self *BaseContext) TotalContentHeight() int {
|
||||||
return self.view.ViewLinesHeight()
|
return self.view.ViewLinesHeight()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *BaseContext) SetHighlightOnFocus(value bool) {
|
||||||
|
self.highlightOnFocus = value
|
||||||
|
}
|
||||||
|
@ -26,7 +26,7 @@ func NewMainContext(
|
|||||||
WindowName: windowName,
|
WindowName: windowName,
|
||||||
Key: key,
|
Key: key,
|
||||||
Focusable: true,
|
Focusable: true,
|
||||||
HighlightOnFocus: false,
|
HighlightOnFocus: c.UserConfig().Gui.ShowSelectionInFocusedMainView,
|
||||||
})),
|
})),
|
||||||
SearchTrait: NewSearchTrait(c),
|
SearchTrait: NewSearchTrait(c),
|
||||||
}
|
}
|
||||||
|
@ -88,6 +88,10 @@ func (self *MainViewController) escape() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *MainViewController) onClickInAlreadyFocusedView(opts gocui.ViewMouseBindingOpts) error {
|
func (self *MainViewController) onClickInAlreadyFocusedView(opts gocui.ViewMouseBindingOpts) error {
|
||||||
|
if self.context.GetView().Highlight && opts.Y != opts.PreviousY {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
sidePanelContext := self.c.Context().NextInStack(self.context)
|
sidePanelContext := self.c.Context().NextInStack(self.context)
|
||||||
if sidePanelContext != nil && sidePanelContext.GetOnClickFocusedMainView() != nil {
|
if sidePanelContext != nil && sidePanelContext.GetOnClickFocusedMainView() != nil {
|
||||||
return sidePanelContext.GetOnClickFocusedMainView()(self.context.GetViewName(), opts.Y)
|
return sidePanelContext.GetOnClickFocusedMainView()(self.context.GetViewName(), opts.Y)
|
||||||
|
@ -3,6 +3,7 @@ package controllers
|
|||||||
import (
|
import (
|
||||||
"github.com/jesseduffield/gocui"
|
"github.com/jesseduffield/gocui"
|
||||||
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||||||
|
"github.com/samber/lo"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ViewSelectionControllerFactory struct {
|
type ViewSelectionControllerFactory struct {
|
||||||
@ -61,10 +62,21 @@ func (self *ViewSelectionController) handleLineChange(delta int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
v := self.Context().GetView()
|
v := self.Context().GetView()
|
||||||
if delta < 0 {
|
if self.context.GetView().Highlight {
|
||||||
v.ScrollUp(-delta)
|
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 {
|
} 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 {
|
func (self *ViewSelectionController) handleGotoTop() error {
|
||||||
v := self.Context().GetView()
|
v := self.Context().GetView()
|
||||||
self.handleLineChange(-v.ViewLinesHeight())
|
if self.context.GetView().Highlight {
|
||||||
|
v.FocusPoint(0, 0)
|
||||||
|
} else {
|
||||||
|
self.handleLineChange(-v.ViewLinesHeight())
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +115,11 @@ func (self *ViewSelectionController) handleGotoBottom() error {
|
|||||||
manager.ReadToEnd(func() {
|
manager.ReadToEnd(func() {
|
||||||
self.c.OnUIThread(func() error {
|
self.c.OnUIThread(func() error {
|
||||||
v := self.Context().GetView()
|
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
|
return nil
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -446,6 +446,11 @@ func (gui *Gui) onUserConfigLoaded() error {
|
|||||||
|
|
||||||
gui.g.Mouse = userConfig.Gui.MouseEvents
|
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
|
// 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
|
// 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
|
// sake of backwards compatibility. We're making use of short circuiting here
|
||||||
|
@ -530,6 +530,11 @@
|
|||||||
"description": "If true, wrap lines in the staging view to the width of the view. This\nmakes it much easier to work with diffs that have long lines, e.g.\nparagraphs of markdown text.",
|
"description": "If true, wrap lines in the staging view to the width of the view. This\nmakes it much easier to work with diffs that have long lines, e.g.\nparagraphs of markdown text.",
|
||||||
"default": true
|
"default": true
|
||||||
},
|
},
|
||||||
|
"showSelectionInFocusedMainView": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "If true, show a selection when the main view is focused.",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
|
Reference in New Issue
Block a user