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:
		| @@ -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 | ||||
|   | ||||
| @@ -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"}, | ||||
|   | ||||
| @@ -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 | ||||
| } | ||||
|   | ||||
| @@ -26,7 +26,7 @@ func NewMainContext( | ||||
| 				WindowName:       windowName, | ||||
| 				Key:              key, | ||||
| 				Focusable:        true, | ||||
| 				HighlightOnFocus: false, | ||||
| 				HighlightOnFocus: c.UserConfig().Gui.ShowSelectionInFocusedMainView, | ||||
| 			})), | ||||
| 		SearchTrait: NewSearchTrait(c), | ||||
| 	} | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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 | ||||
| 			}) | ||||
| 		}) | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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": [ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user