summary refs log tree commit diff
path: root/input.c
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-02-23 12:44:20 -0500
committerJune McEnroe <june@causal.agency>2019-02-23 12:44:20 -0500
commit35705c9eeb511a61b06fc57b68fba1b738378795 (patch)
treef4b1d34e4f1bbacb1f574ab4846ef30a88629dd2 /input.c
parentAdd C-n and C-p key bindings to switch windows (diff)
downloadcatgirl-35705c9eeb511a61b06fc57b68fba1b738378795.tar.gz
catgirl-35705c9eeb511a61b06fc57b68fba1b738378795.zip
Use first word of params in input commands
Prevents anything weird from happening when tab-completing, which
inserts a space.
Diffstat (limited to '')
-rw-r--r--input.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/input.c b/input.c
index dee50f2..45de9f1 100644
--- a/input.c
+++ b/input.c
@@ -41,7 +41,8 @@ static void privmsg(struct Tag tag, bool action, const char *mesg) {
 typedef void Handler(struct Tag tag, char *params);
 
 static void inputJoin(struct Tag tag, char *params) {
-	ircFmt("JOIN :%s\r\n", params ? params : tag.name);
+	char *chan = strsep(&params, " ");
+	ircFmt("JOIN :%s\r\n", chan ? chan : tag.name);
 }
 
 static void inputMe(struct Tag tag, char *params) {
@@ -49,8 +50,9 @@ static void inputMe(struct Tag tag, char *params) {
 }
 
 static void inputNick(struct Tag tag, char *params) {
-	if (params) {
-		ircFmt("NICK :%s\r\n", params);
+	char *nick = strsep(&params, " ");
+	if (nick) {
+		ircFmt("NICK :%s\r\n", nick);
 	} else {
 		uiLog(tag, UIHot, L"/nick requires a nickname");
 	}
@@ -90,8 +92,9 @@ static void inputWho(struct Tag tag, char *params) {
 }
 
 static void inputWhois(struct Tag tag, char *params) {
-	if (params) {
-		ircFmt("WHOIS :%s\r\n", params);
+	char *nick = strsep(&params, " ");
+	if (nick) {
+		ircFmt("WHOIS :%s\r\n", nick);
 	} else {
 		uiLog(tag, UIHot, L"/whois requires a nick");
 	}
@@ -142,20 +145,22 @@ static void inputURL(struct Tag tag, char *params) {
 }
 
 static void inputWindow(struct Tag tag, char *params) {
-	if (!params) {
+	char *word = strsep(&params, " ");
+	if (!word) {
 		uiLog(tag, UIHot, L"/window requires a name or number");
 		return;
 	}
-	bool relative = (params[0] == '+' || params[0] == '-');
-	int num = strtol(params, &params, 0);
-	if (!params[0]) {
+	bool relative = (word[0] == '+' || word[0] == '-');
+	char *trail;
+	int num = strtol(word, &trail, 0);
+	if (!trail[0]) {
 		uiShowNum(num, relative);
 	} else {
-		struct Tag name = tagFind(params);
+		struct Tag name = tagFind(word);
 		if (name.id != TagNone.id) {
 			uiShowTag(name);
 		} else {
-			uiFmt(tag, UIHot, "No window for %s", params);
+			uiFmt(tag, UIHot, "No window for %s", word);
 		}
 	}
 }