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:
parent
177651bdda
commit
2a0961701c
47 changed files with 598 additions and 154 deletions
|
@ -6,11 +6,21 @@ import (
|
|||
"git.sr.ht/~sircmpwn/aerc/widgets"
|
||||
)
|
||||
|
||||
type Close struct{}
|
||||
|
||||
func init() {
|
||||
register("close", CommandClose)
|
||||
register(Close{})
|
||||
}
|
||||
|
||||
func CommandClose(aerc *widgets.Aerc, args []string) error {
|
||||
func (_ Close) Aliases() []string {
|
||||
return []string{"close"}
|
||||
}
|
||||
|
||||
func (_ Close) Complete(aerc *widgets.Aerc, args []string) []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (_ Close) Execute(aerc *widgets.Aerc, args []string) error {
|
||||
if len(args) != 1 {
|
||||
return errors.New("Usage: close")
|
||||
}
|
||||
|
|
|
@ -8,9 +8,9 @@ var (
|
|||
MessageViewCommands *commands.Commands
|
||||
)
|
||||
|
||||
func register(name string, cmd commands.AercCommand) {
|
||||
func register(cmd commands.Command) {
|
||||
if MessageViewCommands == nil {
|
||||
MessageViewCommands = commands.NewCommands()
|
||||
}
|
||||
MessageViewCommands.Register(name, cmd)
|
||||
MessageViewCommands.Register(cmd)
|
||||
}
|
||||
|
|
|
@ -8,16 +8,21 @@ import (
|
|||
"git.sr.ht/~sircmpwn/aerc/widgets"
|
||||
)
|
||||
|
||||
type NextPrevPart struct{}
|
||||
|
||||
func init() {
|
||||
register("next-part", NextPrevPart)
|
||||
register("prev-part", NextPrevPart)
|
||||
register(NextPrevPart{})
|
||||
}
|
||||
|
||||
func nextPrevPartUsage(cmd string) error {
|
||||
return errors.New(fmt.Sprintf("Usage: %s [n]", cmd))
|
||||
func (_ NextPrevPart) Aliases() []string {
|
||||
return []string{"next-part", "prev-part"}
|
||||
}
|
||||
|
||||
func NextPrevPart(aerc *widgets.Aerc, args []string) error {
|
||||
func (_ NextPrevPart) Complete(aerc *widgets.Aerc, args []string) []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (_ NextPrevPart) Execute(aerc *widgets.Aerc, args []string) error {
|
||||
if len(args) > 2 {
|
||||
return nextPrevPartUsage(args[0])
|
||||
}
|
||||
|
@ -41,3 +46,7 @@ func NextPrevPart(aerc *widgets.Aerc, args []string) error {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func nextPrevPartUsage(cmd string) error {
|
||||
return errors.New(fmt.Sprintf("Usage: %s [n]", cmd))
|
||||
}
|
||||
|
|
|
@ -6,14 +6,21 @@ import (
|
|||
"git.sr.ht/~sircmpwn/aerc/widgets"
|
||||
)
|
||||
|
||||
type NextPrevMsg struct{}
|
||||
|
||||
func init() {
|
||||
register("next", NextPrevMessage)
|
||||
register("next-message", NextPrevMessage)
|
||||
register("prev", NextPrevMessage)
|
||||
register("prev-message", NextPrevMessage)
|
||||
register(NextPrevMsg{})
|
||||
}
|
||||
|
||||
func NextPrevMessage(aerc *widgets.Aerc, args []string) error {
|
||||
func (_ NextPrevMsg) Aliases() []string {
|
||||
return []string{"next", "next-message", "prev", "prev-message"}
|
||||
}
|
||||
|
||||
func (_ NextPrevMsg) Complete(aerc *widgets.Aerc, args []string) []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (_ NextPrevMsg) Execute(aerc *widgets.Aerc, args []string) error {
|
||||
mv, _ := aerc.SelectedTab().(*widgets.MessageViewer)
|
||||
acct := mv.SelectedAccount()
|
||||
store := mv.Store()
|
||||
|
|
|
@ -14,11 +14,21 @@ import (
|
|||
"git.sr.ht/~sircmpwn/aerc/widgets"
|
||||
)
|
||||
|
||||
type Open struct{}
|
||||
|
||||
func init() {
|
||||
register("open", Open)
|
||||
register(Open{})
|
||||
}
|
||||
|
||||
func Open(aerc *widgets.Aerc, args []string) error {
|
||||
func (_ Open) Aliases() []string {
|
||||
return []string{"open"}
|
||||
}
|
||||
|
||||
func (_ Open) Complete(aerc *widgets.Aerc, args []string) []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (_ Open) Execute(aerc *widgets.Aerc, args []string) error {
|
||||
if len(args) != 1 {
|
||||
return errors.New("Usage: open")
|
||||
}
|
||||
|
|
|
@ -12,11 +12,21 @@ import (
|
|||
"git.sr.ht/~sircmpwn/aerc/widgets"
|
||||
)
|
||||
|
||||
type Pipe struct{}
|
||||
|
||||
func init() {
|
||||
register("pipe", Pipe)
|
||||
register(Pipe{})
|
||||
}
|
||||
|
||||
func Pipe(aerc *widgets.Aerc, args []string) error {
|
||||
func (_ Pipe) Aliases() []string {
|
||||
return []string{"pipe"}
|
||||
}
|
||||
|
||||
func (_ Pipe) Complete(aerc *widgets.Aerc, args []string) []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (_ Pipe) Execute(aerc *widgets.Aerc, args []string) error {
|
||||
if len(args) < 2 {
|
||||
return errors.New("Usage: :pipe <cmd> [args...]")
|
||||
}
|
||||
|
|
|
@ -16,19 +16,31 @@ import (
|
|||
"github.com/mitchellh/go-homedir"
|
||||
)
|
||||
|
||||
type Save struct{}
|
||||
|
||||
func init() {
|
||||
register("save", Save)
|
||||
register(Save{})
|
||||
}
|
||||
|
||||
func Save(aerc *widgets.Aerc, args []string) error {
|
||||
func (_ Save) Aliases() []string {
|
||||
return []string{"save"}
|
||||
}
|
||||
|
||||
func (_ Save) Complete(aerc *widgets.Aerc, args []string) []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (_ Save) Execute(aerc *widgets.Aerc, args []string) error {
|
||||
opts, optind, err := getopt.Getopts(args, "p")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var (
|
||||
mkdirs bool
|
||||
path string
|
||||
)
|
||||
|
||||
for _, opt := range opts {
|
||||
switch opt.Option {
|
||||
case 'p':
|
||||
|
|
|
@ -7,15 +7,21 @@ import (
|
|||
"git.sr.ht/~sircmpwn/aerc/widgets"
|
||||
)
|
||||
|
||||
type ToggleHeaders struct{}
|
||||
|
||||
func init() {
|
||||
register("toggle-headers", ToggleHeaders)
|
||||
register(ToggleHeaders{})
|
||||
}
|
||||
|
||||
func toggleHeadersUsage(cmd string) error {
|
||||
return errors.New(fmt.Sprintf("Usage: %s", cmd))
|
||||
func (_ ToggleHeaders) Aliases() []string {
|
||||
return []string{"toggle-headers"}
|
||||
}
|
||||
|
||||
func ToggleHeaders(aerc *widgets.Aerc, args []string) error {
|
||||
func (_ ToggleHeaders) Complete(aerc *widgets.Aerc, args []string) []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (_ ToggleHeaders) Execute(aerc *widgets.Aerc, args []string) error {
|
||||
if len(args) > 1 {
|
||||
return toggleHeadersUsage(args[0])
|
||||
}
|
||||
|
@ -23,3 +29,7 @@ func ToggleHeaders(aerc *widgets.Aerc, args []string) error {
|
|||
mv.ToggleHeaders()
|
||||
return nil
|
||||
}
|
||||
|
||||
func toggleHeadersUsage(cmd string) error {
|
||||
return errors.New(fmt.Sprintf("Usage: %s", cmd))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue