mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-04-13 11:50:28 +02:00
support scrolling extras view
This commit is contained in:
parent
8969464b00
commit
f2007f4d95
@ -146,7 +146,7 @@ func (gui *Gui) getWindowDimensions(informationStr string, appStatus string) map
|
|||||||
mainPanelsDirection = boxlayout.COLUMN
|
mainPanelsDirection = boxlayout.COLUMN
|
||||||
}
|
}
|
||||||
|
|
||||||
cmdLogSize := 40 // TODO: make configurable
|
extrasWindowSize := 40 // TODO: make configurable
|
||||||
|
|
||||||
root := &boxlayout.Box{
|
root := &boxlayout.Box{
|
||||||
Direction: boxlayout.ROW,
|
Direction: boxlayout.ROW,
|
||||||
@ -170,8 +170,8 @@ func (gui *Gui) getWindowDimensions(informationStr string, appStatus string) map
|
|||||||
Weight: 1,
|
Weight: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Window: "cmdLog",
|
Window: "extras",
|
||||||
Size: cmdLogSize,
|
Size: extrasWindowSize,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -68,6 +68,21 @@ func (gui *Gui) scrollUpView(view *gocui.View) error {
|
|||||||
|
|
||||||
func (gui *Gui) scrollDownView(view *gocui.View) error {
|
func (gui *Gui) scrollDownView(view *gocui.View) error {
|
||||||
ox, oy := view.Origin()
|
ox, oy := view.Origin()
|
||||||
|
scrollHeight := gui.linesToScrollDown(view)
|
||||||
|
if scrollHeight > 0 {
|
||||||
|
if err := view.SetOrigin(ox, oy+scrollHeight); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if manager, ok := gui.viewBufferManagerMap[view.Name()]; ok {
|
||||||
|
manager.ReadLines(scrollHeight)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) linesToScrollDown(view *gocui.View) int {
|
||||||
|
_, oy := view.Origin()
|
||||||
y := oy
|
y := oy
|
||||||
canScrollPastBottom := gui.Config.GetUserConfig().Gui.ScrollPastBottom
|
canScrollPastBottom := gui.Config.GetUserConfig().Gui.ScrollPastBottom
|
||||||
if !canScrollPastBottom {
|
if !canScrollPastBottom {
|
||||||
@ -76,27 +91,29 @@ func (gui *Gui) scrollDownView(view *gocui.View) error {
|
|||||||
}
|
}
|
||||||
scrollHeight := gui.Config.GetUserConfig().Gui.ScrollHeight
|
scrollHeight := gui.Config.GetUserConfig().Gui.ScrollHeight
|
||||||
scrollableLines := view.ViewLinesHeight() - y
|
scrollableLines := view.ViewLinesHeight() - y
|
||||||
if scrollableLines > 0 {
|
if scrollableLines < 0 {
|
||||||
// margin is about how many lines must still appear if you scroll
|
return 0
|
||||||
// all the way down. In practice every file ends in a newline so it will really
|
|
||||||
// just show a single line
|
|
||||||
margin := 1
|
|
||||||
if canScrollPastBottom {
|
|
||||||
margin = 2
|
|
||||||
}
|
|
||||||
if scrollableLines-margin < scrollHeight {
|
|
||||||
scrollHeight = scrollableLines - margin
|
|
||||||
}
|
|
||||||
if oy+scrollHeight >= 0 {
|
|
||||||
if err := view.SetOrigin(ox, oy+scrollHeight); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if manager, ok := gui.viewBufferManagerMap[view.Name()]; ok {
|
|
||||||
manager.ReadLines(scrollHeight)
|
// margin is about how many lines must still appear if you scroll
|
||||||
|
// all the way down. In practice every file ends in a newline so it will really
|
||||||
|
// just show a single line
|
||||||
|
margin := 1
|
||||||
|
if canScrollPastBottom {
|
||||||
|
margin = 2
|
||||||
}
|
}
|
||||||
return nil
|
if scrollableLines-margin < scrollHeight {
|
||||||
|
scrollHeight = scrollableLines - margin
|
||||||
|
}
|
||||||
|
if oy+scrollHeight < 0 {
|
||||||
|
return 0
|
||||||
|
} else {
|
||||||
|
return scrollHeight
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) atScrollBottom(view *gocui.View) bool {
|
||||||
|
return gui.linesToScrollDown(view) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) scrollUpMain() error {
|
func (gui *Gui) scrollUpMain() error {
|
||||||
@ -123,6 +140,24 @@ func (gui *Gui) scrollDownSecondary() error {
|
|||||||
return gui.scrollDownView(gui.Views.Secondary)
|
return gui.scrollDownView(gui.Views.Secondary)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) scrollUpExtra() error {
|
||||||
|
gui.Views.Extras.Autoscroll = false
|
||||||
|
|
||||||
|
return gui.scrollUpView(gui.Views.Extras)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) scrollDownExtra() error {
|
||||||
|
if err := gui.scrollDownView(gui.Views.Extras); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if gui.atScrollBottom(gui.Views.Extras) {
|
||||||
|
gui.Views.Extras.Autoscroll = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (gui *Gui) scrollUpConfirmationPanel() error {
|
func (gui *Gui) scrollUpConfirmationPanel() error {
|
||||||
if gui.Views.Confirmation.Editable {
|
if gui.Views.Confirmation.Editable {
|
||||||
return nil
|
return nil
|
||||||
|
@ -254,7 +254,7 @@ type Views struct {
|
|||||||
SearchPrefix *gocui.View
|
SearchPrefix *gocui.View
|
||||||
Limit *gocui.View
|
Limit *gocui.View
|
||||||
Suggestions *gocui.View
|
Suggestions *gocui.View
|
||||||
CmdLog *gocui.View
|
Extras *gocui.View
|
||||||
}
|
}
|
||||||
|
|
||||||
type searchingState struct {
|
type searchingState struct {
|
||||||
@ -475,12 +475,12 @@ func NewGui(log *logrus.Entry, gitCommand *commands.GitCommand, oSCommand *oscom
|
|||||||
currentSpan := ""
|
currentSpan := ""
|
||||||
|
|
||||||
return func(entry oscommands.CmdLogEntry) {
|
return func(entry oscommands.CmdLogEntry) {
|
||||||
if gui.Views.CmdLog == nil {
|
if gui.Views.Extras == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if entry.GetSpan() != currentSpan {
|
if entry.GetSpan() != currentSpan {
|
||||||
fmt.Fprintln(gui.Views.CmdLog, utils.ColoredString(entry.GetSpan(), color.FgYellow))
|
fmt.Fprintln(gui.Views.Extras, utils.ColoredString(entry.GetSpan(), color.FgYellow))
|
||||||
currentSpan = entry.GetSpan()
|
currentSpan = entry.GetSpan()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,7 +489,8 @@ func NewGui(log *logrus.Entry, gitCommand *commands.GitCommand, oSCommand *oscom
|
|||||||
clrAttr = color.FgMagenta
|
clrAttr = color.FgMagenta
|
||||||
}
|
}
|
||||||
gui.CmdLog = append(gui.CmdLog, entry.GetCmdStr())
|
gui.CmdLog = append(gui.CmdLog, entry.GetCmdStr())
|
||||||
fmt.Fprintln(gui.Views.CmdLog, " "+utils.ColoredString(entry.GetCmdStr(), clrAttr))
|
indentedCmdStr := " " + strings.Replace(entry.GetCmdStr(), "\n", "\n ", -1)
|
||||||
|
fmt.Fprintln(gui.Views.Extras, utils.ColoredString(indentedCmdStr, clrAttr))
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -1702,6 +1702,16 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
|
|||||||
Description: gui.Tr.LcViewBulkSubmoduleOptions,
|
Description: gui.Tr.LcViewBulkSubmoduleOptions,
|
||||||
OpensMenu: true,
|
OpensMenu: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ViewName: "extras",
|
||||||
|
Key: gocui.MouseWheelUp,
|
||||||
|
Handler: gui.scrollUpExtra,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ViewName: "extras",
|
||||||
|
Key: gocui.MouseWheelDown,
|
||||||
|
Handler: gui.scrollDownExtra,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, viewName := range []string{"status", "branches", "files", "commits", "commitFiles", "stash", "menu"} {
|
for _, viewName := range []string{"status", "branches", "files", "commits", "commitFiles", "stash", "menu"} {
|
||||||
|
@ -48,7 +48,7 @@ func (gui *Gui) createAllViews() error {
|
|||||||
{viewPtr: &gui.Views.Suggestions, name: "suggestions"},
|
{viewPtr: &gui.Views.Suggestions, name: "suggestions"},
|
||||||
{viewPtr: &gui.Views.Confirmation, name: "confirmation"},
|
{viewPtr: &gui.Views.Confirmation, name: "confirmation"},
|
||||||
{viewPtr: &gui.Views.Limit, name: "limit"},
|
{viewPtr: &gui.Views.Limit, name: "limit"},
|
||||||
{viewPtr: &gui.Views.CmdLog, name: "cmdLog"},
|
{viewPtr: &gui.Views.Extras, name: "extras"},
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@ -135,9 +135,9 @@ func (gui *Gui) createAllViews() error {
|
|||||||
gui.Views.Information.FgColor = gocui.ColorGreen
|
gui.Views.Information.FgColor = gocui.ColorGreen
|
||||||
gui.Views.Information.Frame = false
|
gui.Views.Information.Frame = false
|
||||||
|
|
||||||
gui.Views.CmdLog.Title = gui.Tr.CommandLog
|
gui.Views.Extras.Title = gui.Tr.CommandLog
|
||||||
gui.Views.CmdLog.FgColor = theme.GocuiDefaultTextColor
|
gui.Views.Extras.FgColor = theme.GocuiDefaultTextColor
|
||||||
gui.Views.CmdLog.Autoscroll = true
|
gui.Views.Extras.Autoscroll = true
|
||||||
|
|
||||||
if _, err := gui.g.SetCurrentView(gui.defaultSideContext().GetViewName()); err != nil {
|
if _, err := gui.g.SetCurrentView(gui.defaultSideContext().GetViewName()); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -240,7 +240,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
|
|||||||
{viewName: "search", windowName: "search", frame: false},
|
{viewName: "search", windowName: "search", frame: false},
|
||||||
{viewName: "appStatus", windowName: "appStatus", frame: false},
|
{viewName: "appStatus", windowName: "appStatus", frame: false},
|
||||||
{viewName: "information", windowName: "information", frame: false},
|
{viewName: "information", windowName: "information", frame: false},
|
||||||
{viewName: "cmdLog", windowName: "cmdLog", frame: true},
|
{viewName: "extras", windowName: "extras", frame: true},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, arg := range args {
|
for _, arg := range args {
|
||||||
@ -350,7 +350,7 @@ func (gui *Gui) onInitialViewsCreation() error {
|
|||||||
gui.Views.CommitFiles,
|
gui.Views.CommitFiles,
|
||||||
gui.Views.Main,
|
gui.Views.Main,
|
||||||
gui.Views.Secondary,
|
gui.Views.Secondary,
|
||||||
gui.Views.CmdLog,
|
gui.Views.Extras,
|
||||||
|
|
||||||
// bottom line
|
// bottom line
|
||||||
gui.Views.Options,
|
gui.Views.Options,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user