some more good progress

This commit is contained in:
Jesse Duffield 2020-04-12 18:51:31 +10:00
parent 0b279a1191
commit ce9cf9de99
5 changed files with 82 additions and 65 deletions

View File

@ -142,3 +142,7 @@ func (p *Package) ConfigPath() string {
func (p *Package) ID() string {
return fmt.Sprintf("package:%s", p.Path)
}
func (p *Package) Scoped() bool {
return strings.HasPrefix(p.Config.Name, "@")
}

View File

@ -304,6 +304,7 @@ keybinding:
globalLink: 'L'
build: 'b'
pack: 'p'
publish: 'P'
`)
}

View File

@ -201,31 +201,26 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
{
ViewName: "",
Key: gui.getKey("universal.quit"),
Modifier: gocui.ModNone,
Handler: gui.handleQuit,
},
{
ViewName: "",
Key: gui.getKey("universal.quitWithoutChangingDirectory"),
Modifier: gocui.ModNone,
Handler: gui.handleQuitWithoutChangingDirectory,
},
{
ViewName: "",
Key: gui.getKey("universal.quit-alt1"),
Modifier: gocui.ModNone,
Handler: gui.handleQuit,
},
{
ViewName: "",
Key: gui.getKey("universal.return"),
Modifier: gocui.ModNone,
Handler: gui.handleQuit,
},
{
ViewName: "",
Key: gui.getKey("universal.scrollUpMain"),
Modifier: gocui.ModNone,
Handler: gui.scrollUpMain,
Alternative: "fn+up",
Description: gui.Tr.SLocalize("scrollUpMainPanel"),
@ -233,7 +228,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
{
ViewName: "",
Key: gui.getKey("universal.scrollDownMain"),
Modifier: gocui.ModNone,
Handler: gui.scrollDownMain,
Alternative: "fn+down",
Description: gui.Tr.SLocalize("scrollDownMainPanel"),
@ -241,85 +235,72 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
{
ViewName: "",
Key: gui.getKey("universal.scrollUpMain-alt1"),
Modifier: gocui.ModNone,
Handler: gui.scrollUpMain,
},
{
ViewName: "",
Key: gui.getKey("universal.scrollDownMain-alt1"),
Modifier: gocui.ModNone,
Handler: gui.scrollDownMain,
},
{
ViewName: "",
Key: gui.getKey("universal.scrollUpMain-alt2"),
Modifier: gocui.ModNone,
Handler: gui.scrollUpMain,
},
{
ViewName: "",
Key: gui.getKey("universal.scrollDownMain-alt2"),
Modifier: gocui.ModNone,
Handler: gui.scrollDownMain,
},
{
ViewName: "",
Key: gui.getKey("universal.refresh"),
Modifier: gocui.ModNone,
Handler: gui.handleRefresh,
Description: gui.Tr.SLocalize("refresh"),
},
{
ViewName: "",
Key: gui.getKey("universal.optionMenu"),
Modifier: gocui.ModNone,
Handler: gui.handleCreateOptionsMenu,
Description: gui.Tr.SLocalize("openMenu"),
},
{
ViewName: "",
Key: gui.getKey("universal.optionMenu-alt1"),
Modifier: gocui.ModNone,
Handler: gui.handleCreateOptionsMenu,
},
{
ViewName: "",
Key: gocui.MouseMiddle,
Modifier: gocui.ModNone,
Handler: gui.handleCreateOptionsMenu,
},
{
ViewName: "status",
Key: gui.getKey("universal.edit"),
Modifier: gocui.ModNone,
Handler: gui.handleEditConfig,
Description: gui.Tr.SLocalize("EditConfig"),
},
{
ViewName: "",
Key: gui.getKey("universal.nextScreenMode"),
Modifier: gocui.ModNone,
Handler: gui.nextScreenMode,
Description: gui.Tr.SLocalize("nextScreenMode"),
},
{
ViewName: "",
Key: gui.getKey("universal.prevScreenMode"),
Modifier: gocui.ModNone,
Handler: gui.prevScreenMode,
Description: gui.Tr.SLocalize("prevScreenMode"),
},
{
ViewName: "status",
Key: gui.getKey("universal.openFile"),
Modifier: gocui.ModNone,
Handler: gui.handleOpenConfig,
Description: gui.Tr.SLocalize("OpenConfig"),
},
{
ViewName: "status",
Key: gui.getKey("status.checkForUpdate"),
Modifier: gocui.ModNone,
Handler: gui.handleCheckForUpdate,
Description: gui.Tr.SLocalize("checkForUpdate"),
},
@ -327,173 +308,152 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
{
ViewName: "menu",
Key: gui.getKey("universal.return"),
Modifier: gocui.ModNone,
Handler: gui.handleMenuClose,
Description: gui.Tr.SLocalize("closeMenu"),
},
{
ViewName: "menu",
Key: gui.getKey("universal.quit"),
Modifier: gocui.ModNone,
Handler: gui.handleMenuClose,
Description: gui.Tr.SLocalize("closeMenu"),
},
{
ViewName: "information",
Key: gocui.MouseLeft,
Modifier: gocui.ModNone,
Handler: gui.handleInfoClick,
},
{
ViewName: "secondary",
Contexts: []string{"normal"},
Key: gocui.MouseLeft,
Modifier: gocui.ModNone,
Handler: gui.handleMouseDownSecondary,
},
{
ViewName: "status",
Key: gocui.MouseLeft,
Modifier: gocui.ModNone,
Handler: gui.handleStatusClick,
},
{
ViewName: "search",
Key: gocui.KeyEnter,
Modifier: gocui.ModNone,
Handler: gui.handleSearch,
},
{
ViewName: "search",
Key: gui.getKey("universal.return"),
Modifier: gocui.ModNone,
Handler: gui.handleSearchEscape,
},
{
ViewName: "confirmation",
Key: gui.getKey("universal.prevItem"),
Modifier: gocui.ModNone,
Handler: gui.scrollUpConfirmationPanel,
},
{
ViewName: "confirmation",
Key: gui.getKey("universal.nextItem"),
Modifier: gocui.ModNone,
Handler: gui.scrollDownConfirmationPanel,
},
{
ViewName: "confirmation",
Key: gui.getKey("universal.prevItem-alt"),
Modifier: gocui.ModNone,
Handler: gui.scrollUpConfirmationPanel,
},
{
ViewName: "confirmation",
Key: gui.getKey("universal.nextItem-alt"),
Modifier: gocui.ModNone,
Handler: gui.scrollDownConfirmationPanel,
},
{
ViewName: "packages",
Key: gui.getKey("universal.select"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleCheckoutPackage),
},
{
ViewName: "packages",
Key: gui.getKey("packages.publish"),
Handler: gui.wrappedPackageHandler(gui.handlePublishPackage),
},
{
ViewName: "packages",
Key: gui.getKey("universal.new"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleAddPackage),
Description: "add package to list",
},
{
ViewName: "packages",
Key: gui.getKey("packages.pack"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handlePackPackage),
Description: fmt.Sprintf("%s package", utils.ColoredString("`npm pack`", color.FgYellow)),
},
{
ViewName: "packages",
Key: gui.getKey("packages.link"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleLinkPackage),
Description: fmt.Sprintf("%s (or unlink if already linked)", utils.ColoredString("`npm link <package>`", color.FgYellow)),
},
{
ViewName: "packages",
Key: gui.getKey("packages.globalLink"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleGlobalLinkPackage),
Description: fmt.Sprintf("%s (i.e. globally link) (or unlink if already linked)", utils.ColoredString("`npm link`", color.FgYellow)),
},
{
ViewName: "packages",
Key: gui.getKey("universal.remove"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleRemovePackage),
Description: "remove package from list",
},
{
ViewName: "packages",
Key: gui.getKey("universal.install"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleInstall),
Description: fmt.Sprintf("%s package", utils.ColoredString("`npm install`", color.FgYellow)),
},
{
ViewName: "packages",
Key: gui.getKey("packages.build"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleBuild),
Description: fmt.Sprintf("%s package", utils.ColoredString("`npm run build`", color.FgYellow)),
},
{
ViewName: "packages",
Key: gui.getKey("universal.openFile"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleOpenPackageConfig),
Description: "open package.json",
},
{
ViewName: "scripts",
Key: gui.getKey("universal.select"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleRunScript),
Description: fmt.Sprintf("%s script", utils.ColoredString("`npm run`", color.FgYellow)),
},
{
ViewName: "scripts",
Key: gui.getKey("universal.remove"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleRemoveScript),
Description: "remove script from package.json",
},
{
ViewName: "deps",
Key: gui.getKey("universal.install"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleDepInstall),
Description: fmt.Sprintf("%s dependency", utils.ColoredString("`npm install`", color.FgYellow)),
},
{
ViewName: "deps",
Key: gui.getKey("universal.openFile"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleOpenDepPackageConfig),
Description: "open package.json",
},
{
ViewName: "deps",
Key: gui.getKey("universal.update"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleDepUpdate),
Description: fmt.Sprintf("%s dependency", utils.ColoredString("`npm update`", color.FgYellow)),
},
{
ViewName: "deps",
Key: gui.getKey("universal.remove"),
Modifier: gocui.ModNone,
Handler: gui.wrappedHandler(gui.handleDepUninstall),
Description: fmt.Sprintf("%s dependency", utils.ColoredString("`npm uninstall`", color.FgYellow)),
},
@ -501,36 +461,35 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
for _, viewName := range []string{"status", "packages", "deps", "scripts", "menu"} {
bindings = append(bindings, []*Binding{
{ViewName: viewName, Key: gui.getKey("universal.togglePanel"), Modifier: gocui.ModNone, Handler: gui.nextView},
{ViewName: viewName, Key: gui.getKey("universal.prevBlock"), Modifier: gocui.ModNone, Handler: gui.previousView},
{ViewName: viewName, Key: gui.getKey("universal.nextBlock"), Modifier: gocui.ModNone, Handler: gui.nextView},
{ViewName: viewName, Key: gui.getKey("universal.prevBlock-alt"), Modifier: gocui.ModNone, Handler: gui.previousView},
{ViewName: viewName, Key: gui.getKey("universal.nextBlock-alt"), Modifier: gocui.ModNone, Handler: gui.nextView},
{ViewName: viewName, Key: gui.getKey("universal.togglePanel"), Handler: gui.nextView},
{ViewName: viewName, Key: gui.getKey("universal.prevBlock"), Handler: gui.previousView},
{ViewName: viewName, Key: gui.getKey("universal.nextBlock"), Handler: gui.nextView},
{ViewName: viewName, Key: gui.getKey("universal.prevBlock-alt"), Handler: gui.previousView},
{ViewName: viewName, Key: gui.getKey("universal.nextBlock-alt"), Handler: gui.nextView},
}...)
}
// Appends keybindings to jump to a particular sideView using numbers
for i, viewName := range []string{"status", "packages", "deps", "scripts"} {
bindings = append(bindings, &Binding{ViewName: "", Key: rune(i+1) + '0', Modifier: gocui.ModNone, Handler: gui.goToSideView(viewName)})
bindings = append(bindings, &Binding{ViewName: "", Key: rune(i+1) + '0', Handler: gui.goToSideView(viewName)})
}
for _, listView := range gui.getListViews() {
bindings = append(bindings, []*Binding{
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.prevItem-alt"), Modifier: gocui.ModNone, Handler: listView.handlePrevLine},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.prevItem"), Modifier: gocui.ModNone, Handler: listView.handlePrevLine},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gocui.MouseWheelUp, Modifier: gocui.ModNone, Handler: listView.handlePrevLine},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.nextItem-alt"), Modifier: gocui.ModNone, Handler: listView.handleNextLine},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.nextItem"), Modifier: gocui.ModNone, Handler: listView.handleNextLine},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.prevPage"), Modifier: gocui.ModNone, Handler: listView.handlePrevPage, Description: gui.Tr.SLocalize("prevPage")},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.nextPage"), Modifier: gocui.ModNone, Handler: listView.handleNextPage, Description: gui.Tr.SLocalize("nextPage")},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.gotoTop"), Modifier: gocui.ModNone, Handler: listView.handleGotoTop, Description: gui.Tr.SLocalize("gotoTop")},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gocui.MouseWheelDown, Modifier: gocui.ModNone, Handler: listView.handleNextLine},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gocui.MouseLeft, Modifier: gocui.ModNone, Handler: listView.handleClick},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.prevItem-alt"), Handler: listView.handlePrevLine},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.prevItem"), Handler: listView.handlePrevLine},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gocui.MouseWheelUp, Handler: listView.handlePrevLine},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.nextItem-alt"), Handler: listView.handleNextLine},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gui.getKey("universal.nextItem"), Handler: listView.handleNextLine},
{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: gocui.MouseWheelDown, Handler: listView.handleNextLine},
{ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gocui.MouseLeft, Handler: listView.handleClick},
{
ViewName: listView.viewName,
Contexts: []string{listView.context},
Key: gui.getKey("universal.startSearch"),
Modifier: gocui.ModNone,
Handler: gui.handleOpenSearch,
Description: gui.Tr.SLocalize("startSearch"),
},
@ -538,7 +497,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
ViewName: listView.viewName,
Contexts: []string{listView.context},
Key: gui.getKey("universal.gotoBottom"),
Modifier: gocui.ModNone,
Handler: listView.handleGotoBottom,
Description: gui.Tr.SLocalize("gotoBottom"),
},

View File

@ -264,3 +264,52 @@ func (gui *Gui) selectedPackageID() string {
return pkg.ID()
}
func (gui *Gui) handlePublishPackage(pkg *commands.Package) error {
cmdStr := "npm publish"
tagPrompt := func() error {
return gui.createPromptPanel(gui.getPackagesView(), "Enter tag name (leave blank for no tag)", "", func(tag string) error {
if tag != "" {
cmdStr = fmt.Sprintf("%s --tag=%s", cmdStr, tag)
}
cmdStr = fmt.Sprintf("%s %s", cmdStr, pkg.Config.Name)
return gui.newMainCommand(cmdStr, pkg.ID())
})
}
if pkg.Scoped() {
menuItems := []*menuItem{
{
displayStrings: []string{"restricted (default)", utils.ColoredString("--access=restricted", color.FgYellow)},
onPress: func() error {
cmdStr = fmt.Sprintf("%s --access=restricted", cmdStr)
return tagPrompt()
},
},
{
displayStrings: []string{"public", utils.ColoredString("--access=public", color.FgYellow)},
onPress: func() error {
cmdStr = fmt.Sprintf("%s --access=public", cmdStr)
return tagPrompt()
},
},
}
return gui.createMenu("Set access for publishing scoped package (npm publish)", menuItems, createMenuOptions{showCancel: true})
}
return tagPrompt()
}
func (gui *Gui) wrappedPackageHandler(f func(*commands.Package) error) func(*gocui.Gui, *gocui.View) error {
return gui.wrappedHandler(func() error {
pkg := gui.getSelectedPackage()
if pkg == nil {
return nil
}
return f(pkg)
})
}

View File

@ -69,9 +69,14 @@ func (gui *Gui) newPtyTask(viewName string, cmd *exec.Cmd, cmdStr string) error
_, _ = io.Copy(view, ptmx)
fmt.Fprint(view, utils.ColoredString("\ncommand has completed", color.FgGreen))
onClose()
if cmd.ProcessState.Success() {
fmt.Fprint(view, utils.ColoredString("\ncommand completed successfully", color.FgGreen))
} else {
fmt.Fprint(view, utils.ColoredString("\ncommand failed", color.FgRed))
}
}()
return nil
}