Implement basic tab completion support

Tab completion currently only works on commands. Contextual completion
will be added in the future.
This commit is contained in:
Gregory Mullen 2019-06-27 10:33:11 -07:00 committed by Drew DeVault
parent 177651bdda
commit 2a0961701c
47 changed files with 598 additions and 154 deletions

View file

@ -6,11 +6,21 @@ import (
"git.sr.ht/~sircmpwn/aerc/widgets"
)
type Abort struct{}
func init() {
register("abort", CommandAbort)
register(Abort{})
}
func CommandAbort(aerc *widgets.Aerc, args []string) error {
func (_ Abort) Aliases() []string {
return []string{"abort"}
}
func (_ Abort) Complete(aerc *widgets.Aerc, args []string) []string {
return nil
}
func (_ Abort) Execute(aerc *widgets.Aerc, args []string) error {
if len(args) != 1 {
return errors.New("Usage: abort")
}

View file

@ -8,9 +8,9 @@ var (
ComposeCommands *commands.Commands
)
func register(name string, cmd commands.AercCommand) {
func register(cmd commands.Command) {
if ComposeCommands == nil {
ComposeCommands = commands.NewCommands()
}
ComposeCommands.Register(name, cmd)
ComposeCommands.Register(cmd)
}

View file

@ -6,11 +6,21 @@ import (
"git.sr.ht/~sircmpwn/aerc/widgets"
)
type Edit struct{}
func init() {
register("edit", CommandEdit)
register(Edit{})
}
func CommandEdit(aerc *widgets.Aerc, args []string) error {
func (_ Edit) Aliases() []string {
return []string{"edit"}
}
func (_ Edit) Complete(aerc *widgets.Aerc, args []string) []string {
return nil
}
func (_ Edit) Execute(aerc *widgets.Aerc, args []string) error {
if len(args) != 1 {
return errors.New("Usage: edit")
}

View file

@ -7,16 +7,21 @@ import (
"git.sr.ht/~sircmpwn/aerc/widgets"
)
type NextPrevField struct{}
func init() {
register("next-field", NextPrevField)
register("prev-field", NextPrevField)
register(NextPrevField{})
}
func nextPrevFieldUsage(cmd string) error {
return errors.New(fmt.Sprintf("Usage: %s", cmd))
func (_ NextPrevField) Aliases() []string {
return []string{"next-field", "prev-field"}
}
func NextPrevField(aerc *widgets.Aerc, args []string) error {
func (_ NextPrevField) Complete(aerc *widgets.Aerc, args []string) []string {
return nil
}
func (_ NextPrevField) Execute(aerc *widgets.Aerc, args []string) error {
if len(args) > 2 {
return nextPrevFieldUsage(args[0])
}
@ -28,3 +33,7 @@ func NextPrevField(aerc *widgets.Aerc, args []string) error {
}
return nil
}
func nextPrevFieldUsage(cmd string) error {
return errors.New(fmt.Sprintf("Usage: %s", cmd))
}

View file

@ -20,13 +20,23 @@ import (
"git.sr.ht/~sircmpwn/aerc/worker/types"
)
type Send struct{}
func init() {
register("send", SendMessage)
register(Send{})
}
func SendMessage(aerc *widgets.Aerc, args []string) error {
func (_ Send) Aliases() []string {
return []string{"send"}
}
func (_ Send) Complete(aerc *widgets.Aerc, args []string) []string {
return nil
}
func (_ Send) Execute(aerc *widgets.Aerc, args []string) error {
if len(args) > 1 {
return errors.New("Usage: send-message")
return errors.New("Usage: send")
}
composer, _ := aerc.SelectedTab().(*widgets.Composer)
config := composer.Config()