commit 772a6be

Michael Forney  ·  2026-03-19 10:10:38 +0000 UTC
parent ef7863e
catgirl: Update to 2.2a
8 files changed,  +94, -59
+48, -39
  1@@ -1,4 +1,4 @@
  2-From beac90889183cb71ca3dfc8c9ada9175879b9c34 Mon Sep 17 00:00:00 2001
  3+From 3da6204de2eb2d8c74ff3ee634baefe9e7660134 Mon Sep 17 00:00:00 2001
  4 From: Michael Forney <mforney@mforney.org>
  5 Date: Thu, 7 May 2020 00:36:14 -0700
  6 Subject: [PATCH] Revert "Use gnu-case-range and
  7@@ -10,14 +10,14 @@ This reverts commit 75a6aa9258270169f43f56e063f1bfb57eebe56b.
  8  command.c  | 33 +++++++++++++++++++--------------
  9  complete.c |  4 ++--
 10  edit.c     |  2 +-
 11- handle.c   | 45 +++++++++++++++++++++++++++------------------
 12+ handle.c   | 47 ++++++++++++++++++++++++++++-------------------
 13  input.c    |  7 ++++++-
 14  url.c      |  2 +-
 15  window.c   |  2 +-
 16- 8 files changed, 57 insertions(+), 40 deletions(-)
 17+ 8 files changed, 58 insertions(+), 41 deletions(-)
 18 
 19 diff --git a/Makefile b/Makefile
 20-index 3abba03..9518cda 100644
 21+index 66fb408..aacf43d 100644
 22 --- a/Makefile
 23 +++ b/Makefile
 24 @@ -2,9 +2,7 @@ PREFIX ?= /usr/local
 25@@ -31,7 +31,7 @@ index 3abba03..9518cda 100644
 26  LDADD.ncursesw = -lncursesw
 27  
 28 diff --git a/command.c b/command.c
 29-index a127af3..f5be51b 100644
 30+index 502ff17..d822187 100644
 31 --- a/command.c
 32 +++ b/command.c
 33 @@ -68,8 +68,8 @@ static int splitChunk(const char *cmd, uint id) {
 34@@ -54,7 +54,7 @@ index a127af3..f5be51b 100644
 35  }
 36  
 37  static void commandNick(uint id, char *params) {
 38-@@ -275,7 +275,7 @@ static void commandOp(uint id, char *params) {
 39+@@ -304,7 +304,7 @@ static void commandOp(uint id, char *params) {
 40  }
 41  
 42  static void commandDeop(uint id, char *params) {
 43@@ -63,7 +63,7 @@ index a127af3..f5be51b 100644
 44  }
 45  
 46  static void commandVoice(uint id, char *params) {
 47-@@ -287,7 +287,7 @@ static void commandVoice(uint id, char *params) {
 48+@@ -316,7 +316,7 @@ static void commandVoice(uint id, char *params) {
 49  }
 50  
 51  static void commandDevoice(uint id, char *params) {
 52@@ -72,7 +72,7 @@ index a127af3..f5be51b 100644
 53  }
 54  
 55  static void commandBan(uint id, char *params) {
 56-@@ -362,12 +362,12 @@ static void commandWhowas(uint id, char *params) {
 57+@@ -391,12 +391,12 @@ static void commandWhowas(uint id, char *params) {
 58  
 59  static void commandNS(uint id, char *params) {
 60  	(void)id;
 61@@ -87,7 +87,7 @@ index a127af3..f5be51b 100644
 62  }
 63  
 64  static void commandQuery(uint id, char *params) {
 65-@@ -442,7 +442,8 @@ static void commandFilter(enum Heat heat, uint id, char *params) {
 66+@@ -472,7 +472,8 @@ static void commandFilter(enum Heat heat, uint id, char *params) {
 67  		uiFormat(
 68  			id, Cold, NULL, "%sing \3%02d%s %s %s %s",
 69  			(heat == Hot ? "Highlight" : "Ignor"), Brown, filter.mask,
 70@@ -97,7 +97,7 @@ index a127af3..f5be51b 100644
 71  		);
 72  	} else {
 73  		for (size_t i = 0; i < FilterCap && filters[i].mask; ++i) {
 74-@@ -450,8 +451,9 @@ static void commandFilter(enum Heat heat, uint id, char *params) {
 75+@@ -480,8 +481,9 @@ static void commandFilter(enum Heat heat, uint id, char *params) {
 76  			uiFormat(
 77  				Network, Warm, NULL, "%sing \3%02d%s %s %s %s",
 78  				(heat == Hot ? "Highlight" : "Ignor"), Brown, filters[i].mask,
 79@@ -109,7 +109,7 @@ index a127af3..f5be51b 100644
 80  			);
 81  		}
 82  	}
 83-@@ -464,8 +466,8 @@ static void commandUnfilter(enum Heat heat, uint id, char *params) {
 84+@@ -494,8 +496,8 @@ static void commandUnfilter(enum Heat heat, uint id, char *params) {
 85  	uiFormat(
 86  		id, Cold, NULL, "%s %sing \3%02d%s %s %s %s",
 87  		(found ? "No longer" : "Not"), (heat == Hot ? "highlight" : "ignor"),
 88@@ -120,7 +120,7 @@ index a127af3..f5be51b 100644
 89  	);
 90  }
 91  
 92-@@ -494,7 +496,9 @@ static void commandExec(uint id, char *params) {
 93+@@ -524,7 +526,9 @@ static void commandExec(uint id, char *params) {
 94  	dup2(execPipe[1], STDOUT_FILENO);
 95  	dup2(utilPipe[1], STDERR_FILENO);
 96  
 97@@ -131,7 +131,7 @@ index a127af3..f5be51b 100644
 98  	execl(shell, shell, "-c", params, NULL);
 99  	warn("%s", shell);
100  	_exit(EX_UNAVAILABLE);
101-@@ -519,7 +523,8 @@ static void commandHelp(uint id, char *params) {
102+@@ -549,7 +553,8 @@ static void commandHelp(uint id, char *params) {
103  	if (pid) return;
104  
105  	char buf[256];
106@@ -142,7 +142,7 @@ index a127af3..f5be51b 100644
107  	execlp("man", "man", "1", "catgirl", NULL);
108  	dup2(utilPipe[1], STDERR_FILENO);
109 diff --git a/complete.c b/complete.c
110-index 9e59db5..9ea1192 100644
111+index 3552c7c..7d24c7c 100644
112 --- a/complete.c
113 +++ b/complete.c
114 @@ -71,7 +71,7 @@ static struct Node *prepend(struct Node *node) {
115@@ -164,7 +164,7 @@ index 9e59db5..9ea1192 100644
116  }
117  
118 diff --git a/edit.c b/edit.c
119-index bb92edf..07705dd 100644
120+index effb623..3c503d1 100644
121 --- a/edit.c
122 +++ b/edit.c
123 @@ -69,7 +69,7 @@ int editReserve(struct Edit *e, size_t index, size_t count) {
124@@ -177,10 +177,10 @@ index bb92edf..07705dd 100644
125  		wchar_t *buf = realloc(e->buf, sizeof(*buf) * cap);
126  		if (!buf) return -1;
127 diff --git a/handle.c b/handle.c
128-index 9f051c7..a4f1015 100644
129+index 5a2cf7c..b973161 100644
130 --- a/handle.c
131 +++ b/handle.c
132-@@ -301,9 +301,9 @@ static void handleReplyISupport(struct Message *msg) {
133+@@ -332,9 +332,9 @@ static void handleReplyISupport(struct Message *msg) {
134  			set(&network.setParamModes, setParam);
135  			set(&network.channelModes, channel);
136  		} else if (!strcmp(key, "EXCEPTS")) {
137@@ -192,7 +192,7 @@ index 9f051c7..a4f1015 100644
138  		}
139  	}
140  }
141-@@ -356,7 +356,7 @@ static void handleJoin(struct Message *msg) {
142+@@ -387,7 +387,7 @@ static void handleJoin(struct Message *msg) {
143  		"\3%02d%s\3\t%s%s%sarrives in \3%02d%s\3",
144  		hash(msg->user), msg->nick,
145  		(msg->params[2] ? "(" : ""),
146@@ -201,7 +201,7 @@ index 9f051c7..a4f1015 100644
147  		(msg->params[2] ? "\17) " : ""),
148  		hash(msg->params[0]), msg->params[0]
149  	);
150-@@ -388,12 +388,14 @@ static void handlePart(struct Message *msg) {
151+@@ -419,12 +419,14 @@ static void handlePart(struct Message *msg) {
152  		id, heat, tagTime(msg),
153  		"\3%02d%s\3\tleaves \3%02d%s\3%s%s",
154  		hash(msg->user), msg->nick, hash(msg->params[0]), msg->params[0],
155@@ -218,7 +218,7 @@ index 9f051c7..a4f1015 100644
156  	);
157  }
158  
159-@@ -410,12 +412,14 @@ static void handleKick(struct Message *msg) {
160+@@ -441,12 +443,14 @@ static void handleKick(struct Message *msg) {
161  		hash(msg->user), msg->nick,
162  		completeColor(id, msg->params[1]), msg->params[1],
163  		hash(msg->params[0]), msg->params[0],
164@@ -234,8 +234,8 @@ index 9f051c7..a4f1015 100644
165 +		(msg->params[2] ? msg->params[2] : "")
166  	);
167  	completeRemove(id, msg->params[1]);
168- 	if (kicked) completeClear(id);
169-@@ -466,13 +470,15 @@ static void handleQuit(struct Message *msg) {
170+ 	if (kicked) completeRemove(id, NULL);
171+@@ -500,13 +504,15 @@ static void handleQuit(struct Message *msg) {
172  			id, heat, tagTime(msg),
173  			"\3%02d%s\3\tleaves%s%s",
174  			hash(msg->user), msg->nick,
175@@ -253,7 +253,7 @@ index 9f051c7..a4f1015 100644
176  		);
177  	}
178  	completeRemove(None, msg->nick);
179-@@ -734,7 +740,7 @@ static void handleReplyUserModeIs(struct Message *msg) {
180+@@ -760,7 +766,7 @@ static void handleReplyUserModeIs(struct Message *msg) {
181  		if (*ch == '+') continue;
182  		const char *name = UserModes[(byte)*ch];
183  		ptr = seprintf(
184@@ -262,7 +262,7 @@ index 9f051c7..a4f1015 100644
185  		);
186  	}
187  	uiFormat(
188-@@ -774,13 +780,13 @@ static void handleReplyChannelModeIs(struct Message *msg) {
189+@@ -800,13 +806,13 @@ static void handleReplyChannelModeIs(struct Message *msg) {
190  			assert(param < ParamCap);
191  			ptr = seprintf(
192  				ptr, end, ", +%c%s%s %s",
193@@ -278,7 +278,7 @@ index 9f051c7..a4f1015 100644
194  			);
195  		}
196  	}
197-@@ -807,7 +813,7 @@ static void handleMode(struct Message *msg) {
198+@@ -833,7 +839,7 @@ static void handleMode(struct Message *msg) {
199  				hash(msg->user), msg->nick,
200  				(set ? "" : "un"),
201  				self.color, msg->params[0],
202@@ -287,7 +287,7 @@ index 9f051c7..a4f1015 100644
203  			);
204  		}
205  		return;
206-@@ -964,7 +970,7 @@ static void handleErrorBanListFull(struct Message *msg) {
207+@@ -996,7 +1002,7 @@ static void handleErrorBanListFull(struct Message *msg) {
208  	require(msg, false, 4);
209  	uiFormat(
210  		idFor(msg->params[1]), Warm, tagTime(msg),
211@@ -296,7 +296,16 @@ index 9f051c7..a4f1015 100644
212  	);
213  }
214  
215-@@ -1069,14 +1075,15 @@ static void handleReplyWhoisIdle(struct Message *msg) {
216+@@ -1061,7 +1067,7 @@ static void handleReplyList(struct Message *msg) {
217+ 		"In \3%02d%s\3 are %ld under the banner: %s",
218+ 		hash(msg->params[1]), msg->params[1],
219+ 		strtol(msg->params[2], NULL, 10),
220+-		(msg->params[3] ?: "")
221++		(msg->params[3] ? msg->params[3] : "")
222+ 	);
223+ }
224+ 
225+@@ -1101,14 +1107,15 @@ static void handleReplyWhoisIdle(struct Message *msg) {
226  		}
227  	}
228  	char signon[sizeof("0000-00-00 00:00:00")];
229@@ -314,7 +323,7 @@ index 9f051c7..a4f1015 100644
230  	);
231  }
232  
233-@@ -1111,7 +1118,9 @@ static void handleReplyWhoisGeneric(struct Message *msg) {
234+@@ -1143,7 +1150,9 @@ static void handleReplyWhoisGeneric(struct Message *msg) {
235  		Network, Warm, tagTime(msg),
236  		"\3%02d%s\3\t%s%s%s",
237  		completeColor(Network, msg->params[1]), msg->params[1],
238@@ -325,20 +334,20 @@ index 9f051c7..a4f1015 100644
239  	);
240  }
241  
242-@@ -1186,7 +1195,7 @@ static bool isMention(const struct Message *msg) {
243- 	const char *match = msg->params[1];
244- 	while (NULL != (match = strstr(match, self.nick))) {
245- 		char a = (match > msg->params[1] ? match[-1] : ' ');
246+@@ -1213,7 +1222,7 @@ static bool matchWord(const char *str, const char *word) {
247+ 	const char *match = str;
248+ 	while (NULL != (match = strstr(match, word))) {
249+ 		char a = (match > str ? match[-1] : ' ');
250 -		char b = (match[len] ?: ' ');
251 +		char b = (match[len] ? match[len] : ' ');
252  		if ((isspace(a) || ispunct(a)) && (isspace(b) || ispunct(b))) {
253  			return true;
254  		}
255 diff --git a/input.c b/input.c
256-index f3813c4..820bf3c 100644
257+index 6b33b93..9334315 100644
258 --- a/input.c
259 +++ b/input.c
260-@@ -417,7 +417,6 @@ static void keyCode(int code) {
261+@@ -418,7 +418,6 @@ static void keyCode(int code) {
262  		break; case KeyMetaGt: windowScroll(ScrollAll, -1);
263  		break; case KeyMetaLt: windowScroll(ScrollAll, +1);
264  
265@@ -346,7 +355,7 @@ index f3813c4..820bf3c 100644
266  		break; case KeyMetaA: windowAuto();
267  		break; case KeyMetaB: error = editFn(edit, EditPrevWord);
268  		break; case KeyMetaD: error = editFn(edit, EditDeleteNextWord);
269-@@ -448,6 +447,12 @@ static void keyCode(int code) {
270+@@ -449,6 +448,12 @@ static void keyCode(int code) {
271  		break; case KEY_SEND: windowScroll(ScrollAll, -1);
272  		break; case KEY_SHOME: windowScroll(ScrollAll, +1);
273  		break; case KEY_UP: windowScroll(ScrollOne, +1);
274@@ -360,7 +369,7 @@ index f3813c4..820bf3c 100644
275  	if (error) err(EX_OSERR, "editFn");
276  }
277 diff --git a/url.c b/url.c
278-index 219a83c..9c721e0 100644
279+index 7da0968..c1cb917 100644
280 --- a/url.c
281 +++ b/url.c
282 @@ -249,7 +249,7 @@ int urlSave(FILE *file) {
283@@ -373,10 +382,10 @@ index 219a83c..9c721e0 100644
284  		if (error) return error;
285  	}
286 diff --git a/window.c b/window.c
287-index ee0911f..d7bc472 100644
288+index f700fd7..aadf646 100644
289 --- a/window.c
290 +++ b/window.c
291-@@ -220,7 +220,7 @@ static size_t windowTop(const struct Window *window) {
292+@@ -221,7 +221,7 @@ static size_t windowTop(const struct Window *window) {
293  }
294  
295  static size_t windowBottom(const struct Window *window) {
296@@ -386,5 +395,5 @@ index ee0911f..d7bc472 100644
297  	return bottom;
298  }
299 -- 
300-2.34.1
301+2.49.0
302 
+4, -4
 1@@ -1,4 +1,4 @@
 2-From 535cd53babbd4d827c7330e223c5e17b1f5128c3 Mon Sep 17 00:00:00 2001
 3+From 25102012a19a67f3153e8024890751ee45335a5f Mon Sep 17 00:00:00 2001
 4 From: Michael Forney <mforney@mforney.org>
 5 Date: Mon, 31 May 2021 16:37:09 -0700
 6 Subject: [PATCH] Break out of input loop when UI is hidden
 7@@ -10,10 +10,10 @@ with M-l, which restores curses mode when using NetBSD's libcurses.
 8  1 file changed, 1 insertion(+), 1 deletion(-)
 9 
10 diff --git a/input.c b/input.c
11-index 820bf3c..f396fbd 100644
12+index 9334315..a958b89 100644
13 --- a/input.c
14 +++ b/input.c
15-@@ -543,7 +543,7 @@ void inputRead(void) {
16+@@ -544,7 +544,7 @@ void inputRead(void) {
17  
18  	wint_t ch;
19  	static bool paste, style, literal;
20@@ -23,5 +23,5 @@ index 820bf3c..f396fbd 100644
21  		size_t pos = edits[tab.id].pos;
22  		bool spr = uiSpoilerReveal;
23 -- 
24-2.34.1
25+2.49.0
26 
+5, -5
 1@@ -1,4 +1,4 @@
 2-From 2c3519fb68301db5a2aef8715b3cd6ea29fa45ae Mon Sep 17 00:00:00 2001
 3+From f0aa2c7c71fce51b172d38831e27732e4697e9c4 Mon Sep 17 00:00:00 2001
 4 From: Michael Forney <mforney@mforney.org>
 5 Date: Thu, 3 Jun 2021 00:54:30 -0700
 6 Subject: [PATCH] [HACK] Disable colorized output in M-l window list
 7@@ -10,10 +10,10 @@ crucial feature.
 8  1 file changed, 2 deletions(-)
 9 
10 diff --git a/window.c b/window.c
11-index d7bc472..b322c55 100644
12+index aadf646..a85de3c 100644
13 --- a/window.c
14 +++ b/window.c
15-@@ -294,7 +294,6 @@ void windowBare(void) {
16+@@ -295,7 +295,6 @@ void windowBare(void) {
17  		char buf[TimeCap];
18  		struct Style style = { .fg = Gray, .bg = Default };
19  		strftime(buf, sizeof(buf), windowTime.format, localtime(&line->time));
20@@ -21,7 +21,7 @@ index d7bc472..b322c55 100644
21  		printf("%s ", buf);
22  
23  		bool align = false;
24-@@ -310,7 +309,6 @@ void windowBare(void) {
25+@@ -311,7 +310,6 @@ void windowBare(void) {
26  			size_t tab = strcspn(str, "\t");
27  			if (tab < len) len = tab;
28  
29@@ -30,5 +30,5 @@ index d7bc472..b322c55 100644
30  			str += len;
31  		}
32 -- 
33-2.34.1
34+2.49.0
35 
+4, -4
 1@@ -1,4 +1,4 @@
 2-From 28e65915e9bb137266d8af78233f9e04c9c30130 Mon Sep 17 00:00:00 2001
 3+From 64ade1a9e9f511ca5f8c8273481e307a184ada44 Mon Sep 17 00:00:00 2001
 4 From: Michael Forney <mforney@mforney.org>
 5 Date: Sun, 13 Mar 2022 15:17:58 -0700
 6 Subject: [PATCH] Don't rely on internal struct tags of curses implementation
 7@@ -8,7 +8,7 @@ Subject: [PATCH] Don't rely on internal struct tags of curses implementation
 8  1 file changed, 4 insertions(+), 3 deletions(-)
 9 
10 diff --git a/chat.h b/chat.h
11-index 1c46f00..f65f2f0 100644
12+index 2a41cf6..66fe661 100644
13 --- a/chat.h
14 +++ b/chat.h
15 @@ -27,6 +27,7 @@
16@@ -19,7 +19,7 @@ index 1c46f00..f65f2f0 100644
17  #include <err.h>
18  #include <getopt.h>
19  #include <stdarg.h>
20-@@ -309,9 +310,9 @@ enum {
21+@@ -321,9 +322,9 @@ enum {
22  	InputCols = 1024,
23  };
24  extern char uiTitle[TitleCap];
25@@ -33,5 +33,5 @@ index 1c46f00..f65f2f0 100644
26  extern struct Util uiNotifyUtil;
27  void uiInit(void);
28 -- 
29-2.34.1
30+2.49.0
31 
+5, -5
 1@@ -1,4 +1,4 @@
 2-From 0379f92f9ccd424a741cf38fb7dee7bdf0333588 Mon Sep 17 00:00:00 2001
 3+From e8bda36978b91df532394a10e66589272f549959 Mon Sep 17 00:00:00 2001
 4 From: Michael Forney <mforney@mforney.org>
 5 Date: Thu, 19 Mar 2026 02:48:24 -0700
 6 Subject: [PATCH] Send CAP END on RPL_SASLSUCCESS
 7@@ -16,10 +16,10 @@ SASL.
 8  1 file changed, 2 insertions(+), 2 deletions(-)
 9 
10 diff --git a/handle.c b/handle.c
11-index a4f1015..e3d6884 100644
12+index b973161..1c13343 100644
13 --- a/handle.c
14 +++ b/handle.c
15-@@ -229,7 +229,7 @@ static void handleAuthenticate(struct Message *msg) {
16+@@ -252,7 +252,7 @@ static void handleAuthenticate(struct Message *msg) {
17  	explicit_bzero(self.plainPass, strlen(self.plainPass));
18  }
19  
20@@ -27,8 +27,8 @@ index a4f1015..e3d6884 100644
21 +static void handleReplySASLSuccess(struct Message *msg) {
22  	(void)msg;
23  	ircFormat("CAP END\r\n");
24- }
25-@@ -1367,7 +1367,7 @@ static const struct Handler {
26+ 	handleReplyGeneric(msg);
27+@@ -1403,7 +1403,7 @@ static const struct Handler {
28  	{ "704", +ReplyHelp, handleReplyHelp },
29  	{ "705", +ReplyHelp, handleReplyHelp },
30  	{ "706", -ReplyHelp, NULL },
+26, -0
 1@@ -0,0 +1,26 @@
 2+From 571ea66d558bd85a13ee92bb6c2ccd476836bc47 Mon Sep 17 00:00:00 2001
 3+From: Michael Forney <mforney@mforney.org>
 4+Date: Thu, 19 Mar 2026 03:12:11 -0700
 5+Subject: [PATCH] Revert "Use tparm, not tiparm"
 6+
 7+This reverts commit b5bd702c3cb9eab341bfca312b0a5cad3f5368be.
 8+---
 9+ ui.c | 2 +-
10+ 1 file changed, 1 insertion(+), 1 deletion(-)
11+
12+diff --git a/ui.c b/ui.c
13+index d231aac..9e19e4e 100644
14+--- a/ui.c
15++++ b/ui.c
16+@@ -157,7 +157,7 @@ void uiDraw(void) {
17+ 	if (!to_status_line) return;
18+ 	if (!strcmp(uiTitle, prevTitle)) return;
19+ 	strcpy(prevTitle, uiTitle);
20+-	putp(tparm(to_status_line, 0));
21++	putp(tiparm(to_status_line, 0));
22+ 	putp(uiTitle);
23+ 	putp(from_status_line);
24+ 	fflush(stdout);
25+-- 
26+2.49.0
27+
+1, -1
1@@ -1 +1 @@
2-Subproject commit f51e7b4d2cc601bef8f22d5061ff8fafb012d671
3+Subproject commit 492b7f7b9406b8e460c4a64aed45c70a8a8e152d
+1, -1
1@@ -1 +1 @@
2-2.1 r1
3+2.2a