commit 772a6be
Michael Forney
·
2026-03-19 10:10:38 +0000 UTC
parent ef7863e
catgirl: Update to 2.2a
8 files changed,
+94,
-59
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
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
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
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
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 },
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