summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2021-06-17 18:43:26 -0400
committerJune McEnroe <june@causal.agency>2021-06-17 18:52:47 -0400
commit0d888b88d0d8e4853e0d23e00b3183a7b60ab877 (patch)
tree42c2cb300ce6439a9d00e0293e2acb1c1a5abc38
parentClean up if restricted && logEnable, pipe creation (diff)
downloadcatgirl-0d888b88d0d8e4853e0d23e00b3183a7b60ab877.tar.gz
catgirl-0d888b88d0d8e4853e0d23e00b3183a7b60ab877.zip
Match windows by substring in /window
This could just iterate over idNames instead, but using complete
means more recently used windows will match first.
-rw-r--r--catgirl.17
-rw-r--r--chat.h1
-rw-r--r--command.c12
-rw-r--r--complete.c9
4 files changed, 25 insertions, 4 deletions
diff --git a/catgirl.1 b/catgirl.1
index 213b504..19a12f2 100644
--- a/catgirl.1
+++ b/catgirl.1
@@ -1,4 +1,4 @@
-.Dd May 28, 2021
+.Dd June 17, 2021
 .Dt CATGIRL 1
 .Os
 .
@@ -521,8 +521,9 @@ Temporarily remove a message highlight pattern.
 Temporarily remove a message ignore pattern.
 .It Ic /window
 List all windows.
-.It Ic /window Ar name
-Switch to window by name.
+.It Ic /window Ar name | substring
+Switch to window by name
+or matching substring.
 .It Ic /window Ar num | Ic / Ns Ar num
 Switch to window by number.
 .El
diff --git a/chat.h b/chat.h
index 8c99cf5..3b6ac6a 100644
--- a/chat.h
+++ b/chat.h
@@ -360,6 +360,7 @@ char *editBuffer(size_t *pos);
 void editCompleteAdd(void);
 
 const char *complete(uint id, const char *prefix);
+const char *completeSubstr(uint id, const char *substr);
 void completeAccept(void);
 void completeReject(void);
 void completeAdd(uint id, const char *str, enum Color color);
diff --git a/command.c b/command.c
index b345e11..84cb68f 100644
--- a/command.c
+++ b/command.c
@@ -379,7 +379,17 @@ static void commandWindow(uint id, char *params) {
 		uiShowNum(strtoul(params, NULL, 10));
 	} else {
 		id = idFind(params);
-		if (id) uiShowID(id);
+		if (id) {
+			uiShowID(id);
+			return;
+		}
+		for (const char *match; (match = completeSubstr(None, params));) {
+			id = idFind(match);
+			if (!id) continue;
+			completeAccept();
+			uiShowID(id);
+			break;
+		}
 	}
 }
 
diff --git a/complete.c b/complete.c
index 5835926..ead2457 100644
--- a/complete.c
+++ b/complete.c
@@ -119,6 +119,15 @@ const char *complete(uint id, const char *prefix) {
 	return NULL;
 }
 
+const char *completeSubstr(uint id, const char *substr) {
+	for (match = (match ? match->next : head); match; match = match->next) {
+		if (match->id && match->id != id) continue;
+		if (!strcasestr(match->str, substr)) continue;
+		return match->str;
+	}
+	return NULL;
+}
+
 void completeAccept(void) {
 	if (match) prepend(detach(match));
 	match = NULL;
='logmsg'> 2018-02-05Always skip most significant bits in gfxxJune McEnroe This works for CARDS.DLL but might not for other things. We'll see. 2018-02-05Set title in gfcocoaJune McEnroe 2018-02-05Double-buffer gfb frontendJune McEnroe Still not vsync (seems like a newer DRM-fbdev implementation handles FBIO_WAITFORVSYNC but my kernel doesn't), but avoids flicker from clearing to black for each frame. 2018-02-05Rewrite gfxx bit handlingJune McEnroe Specifies how many bits for each of "alpha" (ignored), red, green, blue. Separates byte-order and bit-order. Much more flexible, but now won't render CARDS.DLL graphics properly due to the skip bit being not where it expects. Also mmaps the file instead of reading it all in. And the default palette and sampling got removed again for now, since it's too awkward to use. 2018-02-05Add flip option to gfxxJune McEnroe This handles upside-down graphics much better than reverse did. 2018-02-05Remove gfxx reverse optionJune McEnroe 2018-02-04Fix gfxx draw stop conditionJune McEnroe Would not draw the last partially visible column when mirrored. 2018-02-04Reuse CGColorSpace and CGDataProvider in gfcocoaJune McEnroe 2018-02-04Mark mac target phonyJune McEnroe 2018-02-04Set up Makefile for gfxx-cocoa or gfxx-fbJune McEnroe 2018-02-04Avoid doing excessive work in gfxxJune McEnroe By stopping when the next column would be off the edge of the buffer. 2018-02-04Handle window resizing in gfcocoaJune McEnroe 2018-02-04Set cinoptionsJune McEnroe 2018-02-04Tweak colorscheme moreJune McEnroe 2018-02-04Color MatchParen DarkYellowJune McEnroe White is not obvious enough. 2018-02-04Add palette sampling to gfxxJune McEnroe 2018-02-04Add 4-bit RGB to gfxxJune McEnroe Replace default palette with alternating black and white. 2018-02-04Add Quit menu item to gfcocoaJune McEnroe 2018-02-04Switch back to sane Objective-C styleJune McEnroe 2018-02-04Quit gfcocoa when window closesJune McEnroe 2018-02-03Apparently this is how people write Objective-CJune McEnroe