summaryrefslogtreecommitdiff
path: root/commands.go
diff options
context:
space:
mode:
authordelthas <delthas@dille.cc>2022-05-10 11:21:33 +0200
committerdelthas <delthas@dille.cc>2022-05-10 11:21:33 +0200
commit7a9fe74fdfb3f334b97434df0aa74b2b32e3582e (patch)
tree26024d31582d345c782209a087d81b185bac5d86 /commands.go
parentFix horizontal channel buffer clicks on negative positions (diff)
/mode: enable getting the channel modes without parameters
Diffstat (limited to 'commands.go')
-rw-r--r--commands.go38
1 files changed, 18 insertions, 20 deletions
diff --git a/commands.go b/commands.go
index 7eeefcd..b43fe2c 100644
--- a/commands.go
+++ b/commands.go
@@ -17,6 +17,8 @@ var (
errOffline = fmt.Errorf("you are disconnected from the server, retry later")
)
+const maxArgsInfinite = -1
+
type command struct {
AllowHome bool
MinArgs int
@@ -77,9 +79,8 @@ func init() {
},
"MODE": {
AllowHome: true,
- MinArgs: 1,
- MaxArgs: 5, // <channel> <flags> <limit> <user> <ban mask>
- Usage: "[<nick/channel>] <flags> [args]",
+ MaxArgs: maxArgsInfinite,
+ Usage: "[<nick/channel>] [<flags>] [args]",
Desc: "change channel or user modes",
Handle: commandDoMode,
},
@@ -382,28 +383,23 @@ func commandDoNick(app *App, args []string) (err error) {
}
func commandDoMode(app *App, args []string) (err error) {
- hasModePrefix := strings.HasPrefix(args[0], "+") || strings.HasPrefix(args[0], "-")
- hasChanPrefix := strings.HasPrefix(args[0], "#")
-
- if !hasModePrefix && !hasChanPrefix {
- return errors.New("invalid argument")
+ _, target := app.win.CurrentBuffer()
+ if len(args) > 0 && !strings.HasPrefix(args[0], "+") && !strings.HasPrefix(args[0], "-") {
+ target = args[0]
+ args = args[1:]
}
-
- if hasModePrefix {
- // if we do eg /MODE +P, automatically insert the current channel: /MODE #<current-chan> +P
- _, channel := app.win.CurrentBuffer()
- args = append([]string{channel}, args...)
+ flags := ""
+ if len(args) > 0 {
+ flags = args[0]
+ args = args[1:]
}
-
- channel := args[0]
- flags := args[1]
- modeArgs := args[2:]
+ modeArgs := args
s := app.CurrentSession()
if s == nil {
return errOffline
}
- s.ChangeMode(channel, flags, modeArgs)
+ s.ChangeMode(target, flags, modeArgs)
return nil
}
@@ -613,7 +609,9 @@ func fieldsN(s string, n int) []string {
if n == 1 {
return []string{s}
}
- n--
+ if n == maxArgsInfinite {
+ n--
+ }
// Start of the ASCII fast path.
var a []string
na := 0
@@ -637,7 +635,7 @@ func fieldsN(s string, n int) []string {
i++
}
fieldStart = i
- if n <= na {
+ if n != maxArgsInfinite && n <= na {
a = append(a, s[fieldStart:])
return a
}