about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-02-07 21:53:50 -0500
committerJune McEnroe <june@causal.agency>2020-02-07 21:54:18 -0500
commitb200194206a943bf89dde619288eb7fbe3fee1a2 (patch)
treeb983ddd0f44ada329bb41061237462b4c7df375a
parentPopulate completion with commands (diff)
downloadcatgirl-b200194206a943bf89dde619288eb7fbe3fee1a2.tar.gz
catgirl-b200194206a943bf89dde619288eb7fbe3fee1a2.zip
Use complete to abbreviate commands
-rw-r--r--catgirl.16
-rw-r--r--command.c7
2 files changed, 12 insertions, 1 deletions
diff --git a/catgirl.1 b/catgirl.1
index e746150..76f527e 100644
--- a/catgirl.1
+++ b/catgirl.1
@@ -118,6 +118,12 @@ Log in with the server password
 .El
 .
 .Sh COMMANDS
+Any unique prefix can be used to abbreviate a command.
+For example,
+.Ic /join
+can be typed
+.Ic /j .
+.
 .Ss Chat Commands
 .Bl -tag -width Ds
 .It Ic /join Ar channel
diff --git a/command.c b/command.c
index 41aacc9..8bd8b28 100644
--- a/command.c
+++ b/command.c
@@ -125,7 +125,12 @@ void command(size_t id, char *input) {
 	} else if (input[0] == '/' && isdigit(input[1])) {
 		commandWindow(id, &input[1]);
 	} else {
-		char *cmd = strsep(&input, " ");
+		const char *cmd = strsep(&input, " ");
+		const char *unique = complete(None, cmd);
+		if (unique && !complete(None, cmd)) {
+			cmd = unique;
+			completeReject();
+		}
 		const struct Handler *handler = bsearch(
 			cmd, Commands, ARRAY_LEN(Commands), sizeof(*handler), compar
 		);