Skip to content

Commit

Permalink
better keybinding interfaces
Browse files Browse the repository at this point in the history
  • Loading branch information
jesseduffield committed Apr 12, 2020
1 parent ce9cf9d commit 453ad90
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 112 deletions.
57 changes: 24 additions & 33 deletions pkg/gui/dependencies_panel.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,56 +50,36 @@ func (gui *Gui) linkPathMap() map[string]bool {
return linkPathMap
}

func (gui *Gui) handleDepInstall() error {
dep := gui.getSelectedDependency()
if dep == nil {
return nil
}

func (gui *Gui) handleDepInstall(dep *commands.Dependency) error {
cmdStr := fmt.Sprintf("npm install %s", dep.Name)
return gui.newMainCommand(cmdStr, dep.ID())
}

func (gui *Gui) handleDepUpdate() error {
dep := gui.getSelectedDependency()
if dep == nil {
return nil
}

func (gui *Gui) handleDepUpdate(dep *commands.Dependency) error {
cmdStr := fmt.Sprintf("npm update %s", dep.Name)
return gui.newMainCommand(cmdStr, dep.ID())
}

func (gui *Gui) handleOpenDepPackageConfig() error {
selectedDep := gui.getSelectedDependency()
if selectedDep == nil {
return nil
}

if selectedDep.PackageConfig == nil {
func (gui *Gui) handleOpenDepPackageConfig(dep *commands.Dependency) error {
if dep.PackageConfig == nil {
return gui.surfaceError(errors.New("dependency not in node_modules"))
}

return gui.openFile(selectedDep.ConfigPath())
return gui.openFile(dep.ConfigPath())
}

func (gui *Gui) handleDepUninstall() error {
selectedDep := gui.getSelectedDependency()
if selectedDep == nil {
return nil
}

func (gui *Gui) handleDepUninstall(dep *commands.Dependency) error {
var menuItems []*menuItem

if selectedDep.Kind == "peer" {
if dep.Kind == "peer" {
// I have no idea how peer dependencies work, so we're just using the one option here
uninstallStr := fmt.Sprintf("npm uninstall %s", selectedDep.Name)
uninstallStr := fmt.Sprintf("npm uninstall %s", dep.Name)

menuItems = []*menuItem{
{
displayStrings: []string{"uninstall", utils.ColoredString(uninstallStr, color.FgYellow)},
onPress: func() error {
return gui.newMainCommand(uninstallStr, selectedDep.ID())
return gui.newMainCommand(uninstallStr, dep.ID())
},
},
}
Expand All @@ -110,20 +90,20 @@ func (gui *Gui) handleDepUninstall() error {
"optional": " --save-optional",
}

uninstallCmdStr := fmt.Sprintf("npm uninstall --no-save %s", selectedDep.Name)
uninstallAndSaveCmdStr := fmt.Sprintf("npm uninstall%s %s", kindMap[selectedDep.Kind], selectedDep.Name)
uninstallCmdStr := fmt.Sprintf("npm uninstall --no-save %s", dep.Name)
uninstallAndSaveCmdStr := fmt.Sprintf("npm uninstall%s %s", kindMap[dep.Kind], dep.Name)

menuItems = []*menuItem{
{
displayStrings: []string{"uninstall and save", utils.ColoredString(uninstallAndSaveCmdStr, color.FgYellow)},
onPress: func() error {
return gui.newMainCommand(uninstallAndSaveCmdStr, selectedDep.ID())
return gui.newMainCommand(uninstallAndSaveCmdStr, dep.ID())
},
},
{
displayStrings: []string{"just uninstall", utils.ColoredString(uninstallCmdStr, color.FgYellow)},
onPress: func() error {
return gui.newMainCommand(uninstallCmdStr, selectedDep.ID())
return gui.newMainCommand(uninstallCmdStr, dep.ID())
},
},
}
Expand All @@ -140,3 +120,14 @@ func (gui *Gui) selectedDepID() string {

return selectedDep.ID()
}

func (gui *Gui) wrappedDependencyHandler(f func(*commands.Dependency) error) func(*gocui.Gui, *gocui.View) error {
return gui.wrappedHandler(func() error {
dep := gui.getSelectedDependency()
if dep == nil {
return nil
}

return f(dep)
})
}
26 changes: 13 additions & 13 deletions pkg/gui/keybindings.go
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
{
ViewName: "packages",
Key: gui.getKey("universal.select"),
Handler: gui.wrappedHandler(gui.handleCheckoutPackage),
Handler: gui.wrappedPackageHandler(gui.handleCheckoutPackage),
},
{
ViewName: "packages",
Expand All @@ -382,7 +382,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
{
ViewName: "packages",
Key: gui.getKey("packages.pack"),
Handler: gui.wrappedHandler(gui.handlePackPackage),
Handler: gui.wrappedPackageHandler(gui.handlePackPackage),
Description: fmt.Sprintf("%s package", utils.ColoredString("`npm pack`", color.FgYellow)),
},
{
Expand All @@ -394,67 +394,67 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
{
ViewName: "packages",
Key: gui.getKey("packages.globalLink"),
Handler: gui.wrappedHandler(gui.handleGlobalLinkPackage),
Handler: gui.wrappedPackageHandler(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"),
Handler: gui.wrappedHandler(gui.handleRemovePackage),
Handler: gui.wrappedPackageHandler(gui.handleRemovePackage),
Description: "remove package from list",
},
{
ViewName: "packages",
Key: gui.getKey("universal.install"),
Handler: gui.wrappedHandler(gui.handleInstall),
Handler: gui.wrappedPackageHandler(gui.handleInstall),
Description: fmt.Sprintf("%s package", utils.ColoredString("`npm install`", color.FgYellow)),
},
{
ViewName: "packages",
Key: gui.getKey("packages.build"),
Handler: gui.wrappedHandler(gui.handleBuild),
Handler: gui.wrappedPackageHandler(gui.handleBuild),
Description: fmt.Sprintf("%s package", utils.ColoredString("`npm run build`", color.FgYellow)),
},
{
ViewName: "packages",
Key: gui.getKey("universal.openFile"),
Handler: gui.wrappedHandler(gui.handleOpenPackageConfig),
Handler: gui.wrappedPackageHandler(gui.handleOpenPackageConfig),
Description: "open package.json",
},
{
ViewName: "scripts",
Key: gui.getKey("universal.select"),
Handler: gui.wrappedHandler(gui.handleRunScript),
Handler: gui.wrappedScriptHandler(gui.handleRunScript),
Description: fmt.Sprintf("%s script", utils.ColoredString("`npm run`", color.FgYellow)),
},
{
ViewName: "scripts",
Key: gui.getKey("universal.remove"),
Handler: gui.wrappedHandler(gui.handleRemoveScript),
Handler: gui.wrappedScriptHandler(gui.handleRemoveScript),
Description: "remove script from package.json",
},
{
ViewName: "deps",
Key: gui.getKey("universal.install"),
Handler: gui.wrappedHandler(gui.handleDepInstall),
Handler: gui.wrappedDependencyHandler(gui.handleDepInstall),
Description: fmt.Sprintf("%s dependency", utils.ColoredString("`npm install`", color.FgYellow)),
},
{
ViewName: "deps",
Key: gui.getKey("universal.openFile"),
Handler: gui.wrappedHandler(gui.handleOpenDepPackageConfig),
Handler: gui.wrappedDependencyHandler(gui.handleOpenDepPackageConfig),
Description: "open package.json",
},
{
ViewName: "deps",
Key: gui.getKey("universal.update"),
Handler: gui.wrappedHandler(gui.handleDepUpdate),
Handler: gui.wrappedDependencyHandler(gui.handleDepUpdate),
Description: fmt.Sprintf("%s dependency", utils.ColoredString("`npm update`", color.FgYellow)),
},
{
ViewName: "deps",
Key: gui.getKey("universal.remove"),
Handler: gui.wrappedHandler(gui.handleDepUninstall),
Handler: gui.wrappedDependencyHandler(gui.handleDepUninstall),
Description: fmt.Sprintf("%s dependency", utils.ColoredString("`npm uninstall`", color.FgYellow)),
},
}
Expand Down
83 changes: 23 additions & 60 deletions pkg/gui/packages_panel.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,14 +103,8 @@ func (gui *Gui) refreshStatePackages() error {
return nil
}

func (gui *Gui) handleCheckoutPackage() error {
selectedPkg := gui.getSelectedPackage()

if selectedPkg == nil {
return nil
}

if err := gui.sendPackageToTop(selectedPkg.Path); err != nil {
func (gui *Gui) handleCheckoutPackage(pkg *commands.Package) error {
if err := gui.sendPackageToTop(pkg.Path); err != nil {
return err
}

Expand Down Expand Up @@ -146,74 +140,49 @@ func (gui *Gui) handleLinkPackage() error {
return gui.newMainCommand(cmdStr, selectedPkg.ID())
}

func (gui *Gui) handleGlobalLinkPackage() error {
selectedPkg := gui.getSelectedPackage()
if selectedPkg == nil {
return nil
}

if selectedPkg != gui.currentPackage() {
func (gui *Gui) handleGlobalLinkPackage(pkg *commands.Package) error {
if pkg != gui.currentPackage() {
return gui.surfaceError(errors.New("You can only globally link the current package. Hit space on this package to make it the current package."))
}

var cmdStr string
if selectedPkg.LinkedGlobally {
if pkg.LinkedGlobally {
cmdStr = "npm unlink"
} else {
cmdStr = "npm link"
}

return gui.newMainCommand(cmdStr, selectedPkg.ID())
return gui.newMainCommand(cmdStr, pkg.ID())
}

func (gui *Gui) handleInstall() error {
selectedPkg := gui.getSelectedPackage()
if selectedPkg == nil {
return nil
}

func (gui *Gui) handleInstall(pkg *commands.Package) error {
var cmdStr string
if selectedPkg == gui.currentPackage() {
if pkg == gui.currentPackage() {
cmdStr = "npm install"
} else {
cmdStr = "npm install --prefix " + selectedPkg.Path
cmdStr = "npm install --prefix " + pkg.Path
}

return gui.newMainCommand(cmdStr, selectedPkg.ID())
return gui.newMainCommand(cmdStr, pkg.ID())
}

func (gui *Gui) handleBuild() error {
selectedPkg := gui.getSelectedPackage()
if selectedPkg == nil {
return nil
}

func (gui *Gui) handleBuild(pkg *commands.Package) error {
var cmdStr string
if selectedPkg == gui.currentPackage() {
if pkg == gui.currentPackage() {
cmdStr = "npm run build"
} else {
cmdStr = "npm run build --prefix " + selectedPkg.Path
cmdStr = "npm run build --prefix " + pkg.Path
}

return gui.newMainCommand(cmdStr, selectedPkg.ID())
return gui.newMainCommand(cmdStr, pkg.ID())
}

func (gui *Gui) handleOpenPackageConfig() error {
selectedPkg := gui.getSelectedPackage()
if selectedPkg == nil {
return nil
}

return gui.openFile(selectedPkg.ConfigPath())
func (gui *Gui) handleOpenPackageConfig(pkg *commands.Package) error {
return gui.openFile(pkg.ConfigPath())
}

func (gui *Gui) handleRemovePackage() error {
selectedPkg := gui.getSelectedPackage()
if selectedPkg == nil {
return nil
}

if selectedPkg == gui.currentPackage() {
func (gui *Gui) handleRemovePackage(pkg *commands.Package) error {
if pkg == gui.currentPackage() {
return gui.createErrorPanel("Cannot remove current package")
}

Expand All @@ -223,7 +192,7 @@ func (gui *Gui) handleRemovePackage() error {
prompt: "Do you want to remove this package from the list? It won't actually be removed from the filesystem, but as far as lazynpm is concerned it'll be as good as dead. You won't have to worry about it no more.",
returnFocusOnClose: true,
handleConfirm: func() error {
return gui.removePackage(selectedPkg.Path)
return gui.removePackage(pkg.Path)
},
})
}
Expand All @@ -242,18 +211,13 @@ func (gui *Gui) handleAddPackage() error {
})
}

func (gui *Gui) handlePackPackage() error {
selectedPkg := gui.getSelectedPackage()
if selectedPkg == nil {
return nil
}

func (gui *Gui) handlePackPackage(pkg *commands.Package) error {
cmdStr := "npm pack"
if selectedPkg != gui.currentPackage() {
cmdStr = fmt.Sprintf("npm pack %s", selectedPkg.Path)
if pkg != gui.currentPackage() {
cmdStr = fmt.Sprintf("npm pack %s", pkg.Path)
}

return gui.newMainCommand(cmdStr, selectedPkg.ID())
return gui.newMainCommand(cmdStr, pkg.ID())
}

func (gui *Gui) selectedPackageID() string {
Expand Down Expand Up @@ -303,7 +267,6 @@ func (gui *Gui) handlePublishPackage(pkg *commands.Package) error {
}

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 {
Expand Down
19 changes: 13 additions & 6 deletions pkg/gui/scripts_panel.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,13 @@ func (gui *Gui) handleScriptSelect(g *gocui.Gui, v *gocui.View) error {
return nil
}

func (gui *Gui) handleRunScript() error {
script := gui.getSelectedScript()

func (gui *Gui) handleRunScript(script *commands.Script) error {
return gui.createPromptPanel(gui.getScriptsView(), "run script", fmt.Sprintf("npm run %s", script.Name), func(input string) error {
return gui.newMainCommand(input, script.ID())
})
}

func (gui *Gui) handleRemoveScript() error {
script := gui.getSelectedScript()

func (gui *Gui) handleRemoveScript(script *commands.Script) error {
return gui.createConfirmationPanel(createConfirmationPanelOpts{
returnToView: gui.getScriptsView(),
title: "Remove script",
Expand All @@ -67,3 +63,14 @@ func (gui *Gui) selectedScriptID() string {

return script.ID()
}

func (gui *Gui) wrappedScriptHandler(f func(*commands.Script) error) func(*gocui.Gui, *gocui.View) error {
return gui.wrappedHandler(func() error {
pkg := gui.getSelectedScript()
if pkg == nil {
return nil
}

return f(pkg)
})
}

0 comments on commit 453ad90

Please sign in to comment.