aboutsummaryrefslogtreecommitdiffstats
path: root/commands/patch
diff options
context:
space:
mode:
Diffstat (limited to 'commands/patch')
-rw-r--r--commands/patch/apply.go4
-rw-r--r--commands/patch/cd.go5
-rw-r--r--commands/patch/delete.go4
-rw-r--r--commands/patch/find.go4
-rw-r--r--commands/patch/init.go5
-rw-r--r--commands/patch/list.go5
-rw-r--r--commands/patch/patch.go51
-rw-r--r--commands/patch/rebase.go5
-rw-r--r--commands/patch/remove.go4
-rw-r--r--commands/patch/switch.go4
-rw-r--r--commands/patch/term.go4
11 files changed, 74 insertions, 21 deletions
diff --git a/commands/patch/apply.go b/commands/patch/apply.go
index 2806b7d1..5ffe86d1 100644
--- a/commands/patch/apply.go
+++ b/commands/patch/apply.go
@@ -24,6 +24,10 @@ func init() {
register(Apply{})
}
+func (Apply) Context() commands.CommandContext {
+ return commands.MESSAGE
+}
+
func (Apply) Aliases() []string {
return []string{"apply"}
}
diff --git a/commands/patch/cd.go b/commands/patch/cd.go
index 86a2db3e..bbca1eba 100644
--- a/commands/patch/cd.go
+++ b/commands/patch/cd.go
@@ -6,6 +6,7 @@ import (
"time"
"git.sr.ht/~rjarry/aerc/app"
+ "git.sr.ht/~rjarry/aerc/commands"
"git.sr.ht/~rjarry/aerc/lib/pama"
)
@@ -15,6 +16,10 @@ func init() {
register(Cd{})
}
+func (Cd) Context() commands.CommandContext {
+ return commands.GLOBAL
+}
+
func (Cd) Aliases() []string {
return []string{"cd"}
}
diff --git a/commands/patch/delete.go b/commands/patch/delete.go
index 2e51ab7c..24351f7c 100644
--- a/commands/patch/delete.go
+++ b/commands/patch/delete.go
@@ -18,6 +18,10 @@ func init() {
register(Delete{})
}
+func (Delete) Context() commands.CommandContext {
+ return commands.GLOBAL
+}
+
func (Delete) Aliases() []string {
return []string{"delete"}
}
diff --git a/commands/patch/find.go b/commands/patch/find.go
index 9579e1f8..a508551d 100644
--- a/commands/patch/find.go
+++ b/commands/patch/find.go
@@ -23,6 +23,10 @@ func init() {
register(Find{})
}
+func (Find) Context() commands.CommandContext {
+ return commands.GLOBAL
+}
+
func (Find) Aliases() []string {
return []string{"find"}
}
diff --git a/commands/patch/init.go b/commands/patch/init.go
index 328fcd9f..de0c6e45 100644
--- a/commands/patch/init.go
+++ b/commands/patch/init.go
@@ -5,6 +5,7 @@ import (
"os"
"path/filepath"
+ "git.sr.ht/~rjarry/aerc/commands"
"git.sr.ht/~rjarry/aerc/lib/pama"
)
@@ -17,6 +18,10 @@ func init() {
register(Init{})
}
+func (Init) Context() commands.CommandContext {
+ return commands.GLOBAL
+}
+
func (Init) Aliases() []string {
return []string{"init"}
}
diff --git a/commands/patch/list.go b/commands/patch/list.go
index 6dcc06e8..73461f2e 100644
--- a/commands/patch/list.go
+++ b/commands/patch/list.go
@@ -8,6 +8,7 @@ import (
"time"
"git.sr.ht/~rjarry/aerc/app"
+ "git.sr.ht/~rjarry/aerc/commands"
"git.sr.ht/~rjarry/aerc/config"
"git.sr.ht/~rjarry/aerc/lib/pama"
"git.sr.ht/~rjarry/aerc/lib/pama/models"
@@ -24,6 +25,10 @@ func init() {
register(List{})
}
+func (List) Context() commands.CommandContext {
+ return commands.GLOBAL
+}
+
func (List) Aliases() []string {
return []string{"list", "ls"}
}
diff --git a/commands/patch/patch.go b/commands/patch/patch.go
index 0807c1fa..25d7850a 100644
--- a/commands/patch/patch.go
+++ b/commands/patch/patch.go
@@ -8,32 +8,31 @@ import (
"git.sr.ht/~rjarry/go-opt"
)
-var (
- PatchCommands *commands.Commands
- subCommands *commands.Commands
-)
+var subCommands map[string]commands.Command
func register(cmd commands.Command) {
if subCommands == nil {
- subCommands = commands.NewCommands()
+ subCommands = make(map[string]commands.Command)
+ }
+ for _, alias := range cmd.Aliases() {
+ if subCommands[alias] != nil {
+ panic("duplicate sub command alias: " + alias)
+ }
+ subCommands[alias] = cmd
}
- subCommands.Register(cmd)
}
-func registerPatch(cmd commands.Command) {
- if PatchCommands == nil {
- PatchCommands = commands.NewCommands()
- }
- PatchCommands.Register(cmd)
+type Patch struct {
+ SubCmd commands.Command `opt:"command" action:"ParseSub" complete:"CompleteSubNames"`
+ Args string `opt:"..." required:"false" complete:"CompleteSubArgs"`
}
func init() {
- registerPatch(Patch{})
+ commands.Register(Patch{})
}
-type Patch struct {
- SubCmd commands.Command `opt:"command" action:"ParseSub" complete:"CompleteSubNames"`
- Args string `opt:"..." required:"false" complete:"CompleteSubArgs"`
+func (Patch) Context() commands.CommandContext {
+ return commands.GLOBAL
}
func (Patch) Aliases() []string {
@@ -41,16 +40,26 @@ func (Patch) Aliases() []string {
}
func (p *Patch) ParseSub(arg string) error {
- p.SubCmd = subCommands.ByName(arg)
- if p.SubCmd == nil {
- return fmt.Errorf("%s unknown sub-command", arg)
+ cmd, ok := subCommands[arg]
+ if ok {
+ context := commands.CurrentContext()
+ if cmd.Context()&context != 0 {
+ p.SubCmd = cmd
+ return nil
+ }
}
- return nil
+ return fmt.Errorf("%s unknown sub-command", arg)
}
func (*Patch) CompleteSubNames(arg string) []string {
- options := subCommands.Names()
- return commands.FilterList(options, arg, nil)
+ context := commands.CurrentContext()
+ options := make([]string, 0, len(subCommands))
+ for alias, cmd := range subCommands {
+ if cmd.Context()&context != 0 {
+ options = append(options, alias)
+ }
+ }
+ return commands.FilterList(options, arg, commands.QuoteSpace)
}
func (p *Patch) CompleteSubArgs(arg string) []string {
diff --git a/commands/patch/rebase.go b/commands/patch/rebase.go
index 10da2a63..6ef43299 100644
--- a/commands/patch/rebase.go
+++ b/commands/patch/rebase.go
@@ -12,6 +12,7 @@ import (
"time"
"git.sr.ht/~rjarry/aerc/app"
+ "git.sr.ht/~rjarry/aerc/commands"
"git.sr.ht/~rjarry/aerc/config"
"git.sr.ht/~rjarry/aerc/lib/pama"
"git.sr.ht/~rjarry/aerc/lib/pama/models"
@@ -27,6 +28,10 @@ func init() {
register(Rebase{})
}
+func (Rebase) Context() commands.CommandContext {
+ return commands.GLOBAL
+}
+
func (Rebase) Aliases() []string {
return []string{"rebase"}
}
diff --git a/commands/patch/remove.go b/commands/patch/remove.go
index 6697177b..29849e51 100644
--- a/commands/patch/remove.go
+++ b/commands/patch/remove.go
@@ -18,6 +18,10 @@ func init() {
register(Remove{})
}
+func (Remove) Context() commands.CommandContext {
+ return commands.GLOBAL
+}
+
func (Remove) Aliases() []string {
return []string{"remove"}
}
diff --git a/commands/patch/switch.go b/commands/patch/switch.go
index b1193be7..aab2acb6 100644
--- a/commands/patch/switch.go
+++ b/commands/patch/switch.go
@@ -18,6 +18,10 @@ func init() {
register(Switch{})
}
+func (Switch) Context() commands.CommandContext {
+ return commands.GLOBAL
+}
+
func (Switch) Aliases() []string {
return []string{"switch"}
}
diff --git a/commands/patch/term.go b/commands/patch/term.go
index f2c50b15..f9f79be1 100644
--- a/commands/patch/term.go
+++ b/commands/patch/term.go
@@ -13,6 +13,10 @@ func init() {
register(Term{})
}
+func (Term) Context() commands.CommandContext {
+ return commands.GLOBAL
+}
+
func (Term) Aliases() []string {
return []string{"term"}
}