mirror of
https://github.com/jesseduffield/lazynpm.git
synced 2026-01-09 06:21:11 +08:00
hide tarballs view when there's nothing there
This commit is contained in:
parent
f6fd4e536c
commit
c803e7d080
2
go.mod
2
go.mod
@ -10,7 +10,7 @@ require (
|
||||
github.com/go-errors/errors v1.0.1
|
||||
github.com/golang/protobuf v1.3.2 // indirect
|
||||
github.com/integrii/flaggy v1.4.0
|
||||
github.com/jesseduffield/gocui v0.3.1-0.20200413000446-b3ab1240f59e
|
||||
github.com/jesseduffield/gocui v0.3.1-0.20200413011022-782bc212753a
|
||||
github.com/jesseduffield/semver/v3 v3.0.4-0.20200411092651-8f1f2b3d1bc1
|
||||
github.com/jesseduffield/termbox-go v0.0.0-20200405031649-4dc645f7e8ba // indirect
|
||||
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0
|
||||
|
||||
2
go.sum
2
go.sum
@ -67,6 +67,8 @@ github.com/jesseduffield/gocui v0.3.1-0.20200411093505-aaa030344787 h1:c2+NmVOLs
|
||||
github.com/jesseduffield/gocui v0.3.1-0.20200411093505-aaa030344787/go.mod h1:2RtZznzYKt8RLRwvFiSkXjU0Ei8WwHdubgnlaYH47dw=
|
||||
github.com/jesseduffield/gocui v0.3.1-0.20200413000446-b3ab1240f59e h1:VbSini2EPChm0p4jJDC/xec2IlZKsdmhV9Ki3MYV434=
|
||||
github.com/jesseduffield/gocui v0.3.1-0.20200413000446-b3ab1240f59e/go.mod h1:2RtZznzYKt8RLRwvFiSkXjU0Ei8WwHdubgnlaYH47dw=
|
||||
github.com/jesseduffield/gocui v0.3.1-0.20200413011022-782bc212753a h1:9GBaTx6DOEmeqxpB1xnCeqduSF7gzIw/OTxGTIMMv9c=
|
||||
github.com/jesseduffield/gocui v0.3.1-0.20200413011022-782bc212753a/go.mod h1:2RtZznzYKt8RLRwvFiSkXjU0Ei8WwHdubgnlaYH47dw=
|
||||
github.com/jesseduffield/semver/v3 v3.0.4-0.20200411092651-8f1f2b3d1bc1 h1:dYbhdQfMw+9HmcPw53EffJusPOHRRzVuFgt1Q4TQ1OQ=
|
||||
github.com/jesseduffield/semver/v3 v3.0.4-0.20200411092651-8f1f2b3d1bc1/go.mod h1:ACtpq+KxLwZY+fsQbSoKzlXIR10Xs4epLdg5Y8f1DfM=
|
||||
github.com/jesseduffield/termbox-go v0.0.0-20200405031649-4dc645f7e8ba h1:hWBdYchM9nZ2+GldroQQ627ISOC83iRDdpfwY+uyJeI=
|
||||
|
||||
@ -210,7 +210,7 @@ func (m *NpmManager) EditDepConstraint(dep *Dependency, packageJsonPath string,
|
||||
return err
|
||||
}
|
||||
|
||||
updatedConfig, err := jsonparser.Set(config, []byte(fmt.Sprintf("\"%s\"", constraint)), dep.kindKey(), dep.Name)
|
||||
updatedConfig, err := jsonparser.Set(config, jsonStringValue(constraint), dep.kindKey(), dep.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -218,6 +218,10 @@ func (m *NpmManager) EditDepConstraint(dep *Dependency, packageJsonPath string,
|
||||
return ioutil.WriteFile(packageJsonPath, updatedConfig, 0644)
|
||||
}
|
||||
|
||||
func jsonStringValue(str string) []byte {
|
||||
return []byte(fmt.Sprintf("\"%s\"", strings.Replace(str, "\"", "\\\"", -1)))
|
||||
}
|
||||
|
||||
func (m *NpmManager) EditOrAddScript(scriptName string, packageJsonPath string, newName string, newCommand string) error {
|
||||
// TODO: ensure there is a 'scripts' key
|
||||
|
||||
@ -228,7 +232,7 @@ func (m *NpmManager) EditOrAddScript(scriptName string, packageJsonPath string,
|
||||
|
||||
updatedConfig := jsonparser.Delete(config, "scripts", scriptName)
|
||||
|
||||
updatedConfig, err = jsonparser.Set(updatedConfig, []byte(fmt.Sprintf("\"%s\"", newCommand)), "scripts", newName)
|
||||
updatedConfig, err = jsonparser.Set(updatedConfig, jsonStringValue(newCommand), "scripts", newName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -100,7 +100,7 @@ func (gui *Gui) prepareConfirmationPanel(currentView *gocui.View, title, prompt
|
||||
confirmationView.FgColor = theme.GocuiDefaultTextColor
|
||||
}
|
||||
gui.g.Update(func(g *gocui.Gui) error {
|
||||
return gui.switchFocus(gui.g, currentView, confirmationView)
|
||||
return gui.switchFocus(currentView, confirmationView)
|
||||
})
|
||||
return confirmationView, nil
|
||||
}
|
||||
@ -224,7 +224,7 @@ func (gui *Gui) createErrorPanel(message string) error {
|
||||
|
||||
colorFunction := color.New(color.FgRed).SprintFunc()
|
||||
coloredMessage := colorFunction(strings.TrimSpace(message))
|
||||
if err := gui.refreshSidePanels(refreshOptions{mode: ASYNC}); err != nil {
|
||||
if err := gui.refreshPackages(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@ -96,7 +96,7 @@ func (gui *Gui) scrollDownConfirmationPanel(g *gocui.Gui, v *gocui.View) error {
|
||||
}
|
||||
|
||||
func (gui *Gui) handleRefresh(g *gocui.Gui, v *gocui.View) error {
|
||||
return gui.refreshSidePanels(refreshOptions{mode: ASYNC})
|
||||
return gui.refreshPackages()
|
||||
}
|
||||
|
||||
func (gui *Gui) handleMouseDownMain(g *gocui.Gui, v *gocui.View) error {
|
||||
@ -110,7 +110,7 @@ func (gui *Gui) handleMouseDownMain(g *gocui.Gui, v *gocui.View) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
return gui.switchFocus(gui.g, gui.g.CurrentView(), view)
|
||||
return gui.switchFocus(gui.g.CurrentView(), view)
|
||||
}
|
||||
|
||||
func (gui *Gui) handleInfoClick(g *gocui.Gui, v *gocui.View) error {
|
||||
@ -185,5 +185,5 @@ func (gui *Gui) enterMainView() error {
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return gui.switchFocus(gui.g, gui.g.CurrentView(), view)
|
||||
return gui.switchFocus(gui.g.CurrentView(), view)
|
||||
}
|
||||
|
||||
@ -76,13 +76,16 @@ func (gui *Gui) getViewHeights() map[string]int {
|
||||
return vHeights
|
||||
}
|
||||
|
||||
usableSpace := height - 4
|
||||
extraSpace := usableSpace - (usableSpace/3)*3
|
||||
mainSideViewCount := 3
|
||||
if gui.showTarballsView() {
|
||||
mainSideViewCount = 4
|
||||
}
|
||||
|
||||
mainSideViewCount := 4
|
||||
usableSpace := height - 4
|
||||
extraSpace := usableSpace - (usableSpace/mainSideViewCount)*mainSideViewCount
|
||||
|
||||
if height >= 28 {
|
||||
return map[string]int{
|
||||
vHeights := map[string]int{
|
||||
"status": 3,
|
||||
"packages": (usableSpace / mainSideViewCount) + extraSpace,
|
||||
"deps": usableSpace / mainSideViewCount,
|
||||
@ -90,6 +93,10 @@ func (gui *Gui) getViewHeights() map[string]int {
|
||||
"tarballs": usableSpace / mainSideViewCount,
|
||||
"options": 1,
|
||||
}
|
||||
if gui.showTarballsView() {
|
||||
vHeights["tarballs"] = usableSpace / mainSideViewCount
|
||||
}
|
||||
return vHeights
|
||||
}
|
||||
|
||||
defaultHeight := 3
|
||||
@ -103,6 +110,9 @@ func (gui *Gui) getViewHeights() map[string]int {
|
||||
"scripts": defaultHeight,
|
||||
"options": defaultHeight,
|
||||
}
|
||||
if gui.showTarballsView() {
|
||||
vHeights["tarballs"] = defaultHeight
|
||||
}
|
||||
vHeights[currentCyclebleView] = height - defaultHeight*mainSideViewCount - 1
|
||||
|
||||
return vHeights
|
||||
@ -262,6 +272,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
|
||||
tarballsView.FgColor = textColor
|
||||
tarballsView.ContainsList = true
|
||||
}
|
||||
tarballsView.Visible = gui.showTarballsView()
|
||||
|
||||
if v, err := g.SetView("options", appStatusOptionsBoundary-1, height-2, optionsVersionBoundary-1, height, 0); err != nil {
|
||||
if err.Error() != "unknown view" {
|
||||
@ -338,7 +349,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := gui.switchFocus(gui.g, nil, initialView); err != nil {
|
||||
if err := gui.switchFocus(nil, initialView); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
@ -91,7 +91,7 @@ func (lv *listView) handleClick(g *gocui.Gui, v *gocui.View) error {
|
||||
newSelectedLineIdx := v.SelectedLineIdx()
|
||||
|
||||
// we need to focus the view
|
||||
if err := lv.gui.switchFocus(lv.gui.g, nil, v); err != nil {
|
||||
if err := lv.gui.switchFocus(nil, v); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@ -6,5 +6,5 @@ func (gui *Gui) handleEscapeMain() error {
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return gui.switchFocus(gui.g, nil, view)
|
||||
return gui.switchFocus(nil, view)
|
||||
}
|
||||
|
||||
@ -114,7 +114,7 @@ func (gui *Gui) createMenu(title string, items []*menuItem, createMenuOptions cr
|
||||
}
|
||||
}
|
||||
currentView := gui.g.CurrentView()
|
||||
return gui.switchFocus(gui.g, currentView, menuView)
|
||||
return gui.switchFocus(currentView, menuView)
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -12,7 +12,7 @@ func (gui *Gui) handleOpenSearch(g *gocui.Gui, v *gocui.View) error {
|
||||
gui.State.Searching.isSearching = true
|
||||
gui.State.Searching.view = v
|
||||
gui.renderString("search", "")
|
||||
if err := gui.switchFocus(gui.g, v, gui.getSearchView()); err != nil {
|
||||
if err := gui.switchFocus(v, gui.getSearchView()); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -21,7 +21,7 @@ func (gui *Gui) handleOpenSearch(g *gocui.Gui, v *gocui.View) error {
|
||||
|
||||
func (gui *Gui) handleSearch(g *gocui.Gui, v *gocui.View) error {
|
||||
gui.State.Searching.searchString = gui.getSearchView().Buffer()
|
||||
if err := gui.switchFocus(gui.g, nil, gui.State.Searching.view); err != nil {
|
||||
if err := gui.switchFocus(nil, gui.State.Searching.view); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -84,7 +84,7 @@ func (gui *Gui) onSearchEscape() error {
|
||||
}
|
||||
|
||||
func (gui *Gui) handleSearchEscape(g *gocui.Gui, v *gocui.View) error {
|
||||
if err := gui.switchFocus(gui.g, nil, gui.State.Searching.view); err != nil {
|
||||
if err := gui.switchFocus(nil, gui.State.Searching.view); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@ -19,6 +19,13 @@ func (gui *Gui) getSelectedTarball() *commands.Tarball {
|
||||
}
|
||||
|
||||
func (gui *Gui) handleTarballSelect(g *gocui.Gui, v *gocui.View) error {
|
||||
if !gui.showTarballsView() {
|
||||
// we hide the tarball view when there are no tarballs
|
||||
if err := gui.switchFocus(nil, gui.getScriptsView()); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
tarball := gui.getSelectedTarball()
|
||||
if tarball == nil {
|
||||
return nil
|
||||
@ -71,3 +78,7 @@ func (gui *Gui) handlePublishTarball(tarball *commands.Tarball) error {
|
||||
// the name because the @ is missing
|
||||
return gui.handlePublish(tarball.Name, true, tarball.ID())
|
||||
}
|
||||
|
||||
func (gui *Gui) showTarballsView() bool {
|
||||
return len(gui.State.Tarballs) > 0
|
||||
}
|
||||
|
||||
@ -10,33 +10,17 @@ import (
|
||||
"github.com/spkg/bom"
|
||||
)
|
||||
|
||||
var cyclableViews = []string{"status", "packages", "deps", "scripts", "tarballs"}
|
||||
|
||||
func intArrToMap(arr []int) map[int]bool {
|
||||
output := map[int]bool{}
|
||||
for _, el := range arr {
|
||||
output[el] = true
|
||||
func (gui *Gui) cyclableViews() []string {
|
||||
viewNames := []string{"status", "packages", "deps", "scripts"}
|
||||
if len(gui.State.Tarballs) > 0 {
|
||||
viewNames = append(viewNames, "tarballs")
|
||||
}
|
||||
return output
|
||||
}
|
||||
|
||||
const (
|
||||
ASYNC = iota
|
||||
SYNC
|
||||
BLOCK_UI
|
||||
)
|
||||
|
||||
type refreshOptions struct {
|
||||
mode int
|
||||
}
|
||||
|
||||
func (gui *Gui) refreshSidePanels(options refreshOptions) error {
|
||||
// refresh status, refresh dependencies, refresh
|
||||
return nil
|
||||
return viewNames
|
||||
}
|
||||
|
||||
func (gui *Gui) nextView(g *gocui.Gui, v *gocui.View) error {
|
||||
var focusedViewName string
|
||||
cyclableViews := gui.cyclableViews()
|
||||
if v == nil || v.Name() == cyclableViews[len(cyclableViews)-1] {
|
||||
focusedViewName = cyclableViews[0]
|
||||
} else {
|
||||
@ -59,11 +43,12 @@ func (gui *Gui) nextView(g *gocui.Gui, v *gocui.View) error {
|
||||
if err := gui.resetOrigin(gui.getMainView()); err != nil {
|
||||
return err
|
||||
}
|
||||
return gui.switchFocus(g, v, focusedView)
|
||||
return gui.switchFocus(v, focusedView)
|
||||
}
|
||||
|
||||
func (gui *Gui) previousView(g *gocui.Gui, v *gocui.View) error {
|
||||
var focusedViewName string
|
||||
cyclableViews := gui.cyclableViews()
|
||||
if v == nil || v.Name() == cyclableViews[0] {
|
||||
focusedViewName = cyclableViews[len(cyclableViews)-1]
|
||||
} else {
|
||||
@ -85,7 +70,7 @@ func (gui *Gui) previousView(g *gocui.Gui, v *gocui.View) error {
|
||||
if err := gui.resetOrigin(gui.getMainView()); err != nil {
|
||||
return err
|
||||
}
|
||||
return gui.switchFocus(g, v, focusedView)
|
||||
return gui.switchFocus(v, focusedView)
|
||||
}
|
||||
|
||||
func (gui *Gui) newLineFocused(g *gocui.Gui, v *gocui.View) error {
|
||||
@ -121,7 +106,7 @@ func (gui *Gui) returnFocus(g *gocui.Gui, v *gocui.View) error {
|
||||
gui.Log.Error(err)
|
||||
}
|
||||
}
|
||||
return gui.switchFocus(g, v, previousView)
|
||||
return gui.switchFocus(v, previousView)
|
||||
}
|
||||
|
||||
func (gui *Gui) goToSideView(sideViewName string) func(g *gocui.Gui, v *gocui.View) error {
|
||||
@ -136,7 +121,7 @@ func (gui *Gui) goToSideView(sideViewName string) func(g *gocui.Gui, v *gocui.Vi
|
||||
gui.Log.Error(err)
|
||||
return nil
|
||||
}
|
||||
return gui.switchFocus(g, nil, view)
|
||||
return gui.switchFocus(nil, view)
|
||||
}
|
||||
}
|
||||
|
||||
@ -152,31 +137,31 @@ func (gui *Gui) closePopupPanels() error {
|
||||
|
||||
// pass in oldView = nil if you don't want to be able to return to your old view
|
||||
// TODO: move some of this logic into our onFocusLost and onFocus hooks
|
||||
func (gui *Gui) switchFocus(g *gocui.Gui, oldView, newView *gocui.View) error {
|
||||
func (gui *Gui) switchFocus(oldView, newView *gocui.View) error {
|
||||
// we assume we'll never want to return focus to a popup panel i.e.
|
||||
// we should never stack popup panels
|
||||
if oldView != nil && !gui.isPopupPanel(oldView.Name()) {
|
||||
gui.State.PreviousView = oldView.Name()
|
||||
}
|
||||
|
||||
if utils.IncludesString(cyclableViews, newView.Name()) {
|
||||
if utils.IncludesString(gui.cyclableViews(), newView.Name()) {
|
||||
gui.State.CurrentSideView = newView.Name()
|
||||
}
|
||||
|
||||
if _, err := g.SetCurrentView(newView.Name()); err != nil {
|
||||
if _, err := gui.g.SetCurrentView(newView.Name()); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := g.SetViewOnTop(newView.Name()); err != nil {
|
||||
if _, err := gui.g.SetViewOnTop(newView.Name()); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
g.Cursor = newView.Editable
|
||||
gui.g.Cursor = newView.Editable
|
||||
|
||||
if err := gui.renderPanelOptions(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return gui.newLineFocused(g, newView)
|
||||
return gui.newLineFocused(gui.g, newView)
|
||||
}
|
||||
|
||||
func (gui *Gui) resetOrigin(v *gocui.View) error {
|
||||
|
||||
2
vendor/github.com/jesseduffield/gocui/gui.go
generated
vendored
2
vendor/github.com/jesseduffield/gocui/gui.go
generated
vendored
@ -538,7 +538,7 @@ func (g *Gui) flush() error {
|
||||
}
|
||||
}
|
||||
for _, v := range g.views {
|
||||
if v.y1 < v.y0 {
|
||||
if v.y1 < v.y0 || !v.Visible {
|
||||
continue
|
||||
}
|
||||
if v.Frame {
|
||||
|
||||
3
vendor/github.com/jesseduffield/gocui/view.go
generated
vendored
3
vendor/github.com/jesseduffield/gocui/view.go
generated
vendored
@ -147,6 +147,8 @@ type View struct {
|
||||
|
||||
// IgnoreClickPosition determines whether we set the cursor upon clicking a view
|
||||
IgnoreClickPosition bool
|
||||
|
||||
Visible bool
|
||||
}
|
||||
|
||||
type searcher struct {
|
||||
@ -315,6 +317,7 @@ func newView(name string, x0, y0, x1, y1 int, mode OutputMode, log *logrus.Entry
|
||||
log: log,
|
||||
topMargin: 1,
|
||||
bottomMargin: y1 - y0, // TODO: this might be off by one
|
||||
Visible: true,
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@ -33,7 +33,7 @@ github.com/hashicorp/hcl/json/token
|
||||
# github.com/integrii/flaggy v1.4.0
|
||||
## explicit
|
||||
github.com/integrii/flaggy
|
||||
# github.com/jesseduffield/gocui v0.3.1-0.20200413000446-b3ab1240f59e
|
||||
# github.com/jesseduffield/gocui v0.3.1-0.20200413011022-782bc212753a
|
||||
## explicit
|
||||
github.com/jesseduffield/gocui
|
||||
# github.com/jesseduffield/semver/v3 v3.0.4-0.20200411092651-8f1f2b3d1bc1
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user