about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--chat.h1
-rw-r--r--command.c34
2 files changed, 22 insertions, 13 deletions
diff --git a/chat.h b/chat.h
index 5b3c01c..9317843 100644
--- a/chat.h
+++ b/chat.h
@@ -123,6 +123,7 @@ void uiShow(void);
 void uiHide(void);
 void uiDraw(void);
 void uiShowID(size_t id);
+void uiShowNum(size_t num);
 void uiRead(void);
 void uiWrite(size_t id, enum Heat heat, const time_t *time, const char *str);
 void uiFormat(
diff --git a/command.c b/command.c
index 7fb98af..8471214 100644
--- a/command.c
+++ b/command.c
@@ -57,9 +57,16 @@ static void commandMe(size_t id, char *params) {
 }
 
 static void commandQuit(size_t id, char *params) {
+	(void)id;
 	set(&self.quit, (params ? params : "Goodbye"));
 }
 
+static void commandWindow(size_t id, char *params) {
+	(void)id;
+	if (!params) return;
+	uiShowNum(strtoul(params, NULL, 10));
+}
+
 static const struct Handler {
 	const char *cmd;
 	Command *fn;
@@ -68,6 +75,7 @@ static const struct Handler {
 	{ "/notice", commandNotice },
 	{ "/quit", commandQuit },
 	{ "/quote", commandQuote },
+	{ "/window", commandWindow },
 };
 
 static int compar(const void *cmd, const void *_handler) {
@@ -97,21 +105,21 @@ const char *commandIsAction(size_t id, const char *input) {
 }
 
 void command(size_t id, char *input) {
-	if (id == Debug) {
+	if (id == Debug && input[0] != '/') {
 		commandQuote(id, input);
-		return;
-	}
-	if (commandIsPrivmsg(id, input)) {
+	} else if (commandIsPrivmsg(id, input)) {
 		commandPrivmsg(id, input);
-		return;
-	}
-	char *cmd = strsep(&input, " ");
-	const struct Handler *handler = bsearch(
-		cmd, Commands, ARRAY_LEN(Commands), sizeof(*handler), compar
-	);
-	if (handler) {
-		handler->fn(id, input);
+	} else if (input[0] == '/' && isdigit(input[1])) {
+		commandWindow(id, &input[1]);
 	} else {
-		uiFormat(id, Hot, NULL, "No such command %s", cmd);
+		char *cmd = strsep(&input, " ");
+		const struct Handler *handler = bsearch(
+			cmd, Commands, ARRAY_LEN(Commands), sizeof(*handler), compar
+		);
+		if (handler) {
+			handler->fn(id, input);
+		} else {
+			uiFormat(id, Hot, NULL, "No such command %s", cmd);
+		}
 	}
 }