mirror of
https://github.com/jesseduffield/lazynpm.git
synced 2026-01-09 06:21:11 +08:00
support paging and jumping in main view
This commit is contained in:
parent
c803e7d080
commit
885c32589a
@ -51,8 +51,7 @@ func (gui *Gui) scrollDownView(viewName string) error {
|
||||
}
|
||||
|
||||
func (gui *Gui) currentContextViewID() string {
|
||||
currentView := gui.g.CurrentView()
|
||||
switch currentView.Name() {
|
||||
switch gui.State.CurrentSideView {
|
||||
case "packages":
|
||||
return gui.selectedPackageID()
|
||||
case "deps":
|
||||
|
||||
@ -539,6 +539,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
|
||||
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.prevPage"), Handler: listView.handlePrevPage, Description: gui.Tr.SLocalize("prevPage")},
|
||||
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.nextPage"), Handler: listView.handleNextPage, Description: gui.Tr.SLocalize("nextPage")},
|
||||
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.gotoTop"), Handler: listView.handleGotoTop, Description: gui.Tr.SLocalize("gotoTop")},
|
||||
{
|
||||
ViewName: listView.viewName,
|
||||
Contexts: []string{listView.context},
|
||||
Key: gui.getKey("universal.gotoBottom"),
|
||||
Handler: listView.handleGotoBottom,
|
||||
Description: gui.Tr.SLocalize("gotoBottom"),
|
||||
},
|
||||
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gocui.MouseWheelDown, Handler: listView.handleNextLine},
|
||||
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gocui.MouseLeft, Handler: listView.handleClick},
|
||||
{
|
||||
@ -548,13 +555,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
|
||||
Handler: gui.handleOpenSearch,
|
||||
Description: gui.Tr.SLocalize("startSearch"),
|
||||
},
|
||||
{
|
||||
ViewName: listView.viewName,
|
||||
Contexts: []string{listView.context},
|
||||
Key: gui.getKey("universal.gotoBottom"),
|
||||
Handler: listView.handleGotoBottom,
|
||||
Description: gui.Tr.SLocalize("gotoBottom"),
|
||||
},
|
||||
}...)
|
||||
}
|
||||
|
||||
|
||||
@ -44,7 +44,10 @@ func (lv *listView) handleLineChange(change int) error {
|
||||
}
|
||||
}
|
||||
|
||||
return lv.handleItemSelect(lv.gui.g, view)
|
||||
if lv.handleItemSelect != nil {
|
||||
return lv.handleItemSelect(lv.gui.g, view)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (lv *listView) handleNextPage(g *gocui.Gui, v *gocui.View) error {
|
||||
@ -114,7 +117,10 @@ func (lv *listView) handleClick(g *gocui.Gui, v *gocui.View) error {
|
||||
if prevSelectedLineIdx == newSelectedLineIdx && prevViewName == lv.viewName && lv.handleClickSelectedItem != nil {
|
||||
return lv.handleClickSelectedItem(lv.gui.g, v)
|
||||
}
|
||||
return lv.handleItemSelect(lv.gui.g, v)
|
||||
if lv.handleItemSelect != nil {
|
||||
return lv.handleItemSelect(lv.gui.g, v)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (lv *listView) onSearchSelect(selectedLineIdx int) error {
|
||||
@ -124,7 +130,10 @@ func (lv *listView) onSearchSelect(selectedLineIdx int) error {
|
||||
}
|
||||
|
||||
*lv.getSelectedLineIdxPtr() = selectedLineIdx
|
||||
return lv.handleItemSelect(lv.gui.g, view)
|
||||
if lv.handleItemSelect != nil {
|
||||
return lv.handleItemSelect(lv.gui.g, view)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (gui *Gui) menuListView() *listView {
|
||||
|
||||
@ -30,6 +30,22 @@ func (gui *Gui) newMainCommand(cmdStr string, contextKey string) error {
|
||||
v.Wrap = true
|
||||
v.FgColor = theme.GocuiDefaultTextColor
|
||||
|
||||
selectedLine := 0
|
||||
|
||||
lv := &listView{
|
||||
viewName: contextKey,
|
||||
getItemsLength: func() int { return len(v.BufferLines()) },
|
||||
getSelectedLineIdxPtr: func() *int { return &selectedLine },
|
||||
handleItemSelect: gui.wrappedHandler(func() error {
|
||||
if selectedLine >= len(v.BufferLines())-1 {
|
||||
v.Autoscroll = true
|
||||
}
|
||||
return nil
|
||||
}),
|
||||
gui: gui,
|
||||
rendersToMainView: false,
|
||||
}
|
||||
|
||||
bindings := []*Binding{
|
||||
{
|
||||
ViewName: contextKey,
|
||||
@ -59,6 +75,30 @@ func (gui *Gui) newMainCommand(cmdStr string, contextKey string) error {
|
||||
Modifier: gocui.ModNone,
|
||||
Handler: gui.wrappedHandler(gui.handleEscapeMain),
|
||||
},
|
||||
{
|
||||
ViewName: contextKey,
|
||||
Key: gui.getKey("universal.return"),
|
||||
Handler: gui.handleSearchEscape,
|
||||
},
|
||||
{
|
||||
ViewName: contextKey,
|
||||
Key: gui.getKey("universal.startSearch"),
|
||||
Handler: gui.handleOpenSearch,
|
||||
Description: gui.Tr.SLocalize("startSearch"),
|
||||
},
|
||||
{ViewName: contextKey, Key: gui.getKey("universal.prevItem-alt"), Handler: gui.unsetAutoScrollWrapper(gui.scrollUpMain)},
|
||||
{ViewName: contextKey, Key: gui.getKey("universal.prevItem"), Handler: gui.unsetAutoScrollWrapper(gui.scrollUpMain)},
|
||||
{ViewName: contextKey, Key: gui.getKey("universal.nextItem-alt"), Handler: gui.scrollDownMain},
|
||||
{ViewName: contextKey, Key: gui.getKey("universal.nextItem"), Handler: gui.scrollDownMain},
|
||||
{ViewName: contextKey, Key: gui.getKey("universal.prevPage"), Handler: gui.unsetAutoScrollWrapper(lv.handlePrevPage), Description: gui.Tr.SLocalize("prevPage")},
|
||||
{ViewName: contextKey, Key: gui.getKey("universal.nextPage"), Handler: lv.handleNextPage, Description: gui.Tr.SLocalize("nextPage")},
|
||||
{ViewName: contextKey, Key: gui.getKey("universal.gotoTop"), Handler: gui.unsetAutoScrollWrapper(lv.handleGotoTop), Description: gui.Tr.SLocalize("gotoTop")},
|
||||
{
|
||||
ViewName: contextKey,
|
||||
Key: gui.getKey("universal.gotoBottom"),
|
||||
Handler: lv.handleGotoBottom,
|
||||
Description: gui.Tr.SLocalize("gotoBottom"),
|
||||
},
|
||||
}
|
||||
|
||||
for _, binding := range bindings {
|
||||
@ -68,6 +108,11 @@ func (gui *Gui) newMainCommand(cmdStr string, contextKey string) error {
|
||||
}
|
||||
}
|
||||
|
||||
v.SetOnSelectItem(gui.onSelectItemWrapper(func(selectedLineIdx int) error {
|
||||
v.FocusPoint(0, selectedLineIdx)
|
||||
return nil
|
||||
}))
|
||||
|
||||
if _, err := gui.g.SetViewOnTop(contextKey); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -87,6 +132,13 @@ func (gui *Gui) newMainCommand(cmdStr string, contextKey string) error {
|
||||
return gui.refreshPackages()
|
||||
}
|
||||
|
||||
func (gui *Gui) unsetAutoScrollWrapper(f func(g *gocui.Gui, v *gocui.View) error) func(g *gocui.Gui, v *gocui.View) error {
|
||||
return func(g *gocui.Gui, v *gocui.View) error {
|
||||
v.Autoscroll = false
|
||||
return f(g, v)
|
||||
}
|
||||
}
|
||||
|
||||
func (gui *Gui) onResize() error {
|
||||
if gui.State.Ptmx == nil {
|
||||
return nil
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user