summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--catgirl.19
-rw-r--r--chat.h1
-rw-r--r--command.c10
-rw-r--r--handle.c15
4 files changed, 31 insertions, 4 deletions
diff --git a/catgirl.1 b/catgirl.1
index 6a45722..160ba6f 100644
--- a/catgirl.1
+++ b/catgirl.1
@@ -1,4 +1,4 @@
-.Dd September 30, 2020
+.Dd October 2, 2020
.Dt CATGIRL 1
.Os
.
@@ -338,12 +338,17 @@ with
and interpret its output
as input to the current window,
including as commands.
-.It Ic /help Op Ar search
+.It Ic /help
View this manual.
Type
.Ic q
to return to
.Nm .
+.It Ic /help Ar topic
+List the server help for a topic.
+Try
+.Ic /help index
+for a list of topics.
.It Ic /ignore Op Ar pattern
List message filtering patterns
or temporarily add a pattern.
diff --git a/chat.h b/chat.h
index 8573ad8..cd8798c 100644
--- a/chat.h
+++ b/chat.h
@@ -241,6 +241,7 @@ extern struct Replies {
uint away;
uint ban;
uint excepts;
+ uint help;
uint invex;
uint join;
uint list;
diff --git a/command.c b/command.c
index 92f1271..3af1246 100644
--- a/command.c
+++ b/command.c
@@ -421,14 +421,20 @@ static void commandExec(uint id, char *params) {
static void commandHelp(uint id, char *params) {
(void)id;
- uiHide();
+ if (params) {
+ ircFormat("HELP :%s\r\n", params);
+ replies.help++;
+ return;
+ }
+
+ uiHide();
pid_t pid = fork();
if (pid < 0) err(EX_OSERR, "fork");
if (pid) return;
char buf[256];
- snprintf(buf, sizeof(buf), "ip%s$", (params ?: "COMMANDS"));
+ snprintf(buf, sizeof(buf), "%spCOMMANDS$", (getenv("LESS") ?: ""));
setenv("LESS", buf, 1);
execlp("man", "man", "1", "catgirl", NULL);
dup2(utilPipe[1], STDERR_FILENO);
diff --git a/handle.c b/handle.c
index 7519b87..988aeb2 100644
--- a/handle.c
+++ b/handle.c
@@ -302,6 +302,18 @@ static void handleErrorNoMOTD(struct Message *msg) {
(void)msg;
}
+static void handleReplyHelp(struct Message *msg) {
+ require(msg, false, 3);
+ if (!replies.help) return;
+ urlScan(Network, msg->nick, msg->params[2]);
+ uiWrite(Network, Warm, tagTime(msg), msg->params[2]);
+}
+
+static void handleReplyEndOfHelp(struct Message *msg) {
+ (void)msg;
+ if (replies.help) replies.help--;
+}
+
static void handleJoin(struct Message *msg) {
require(msg, true, 1);
uint id = idFor(msg->params[0]);
@@ -1253,6 +1265,9 @@ static const struct Handler {
{ "478", handleErrorBanListFull },
{ "482", handleErrorChanopPrivsNeeded },
{ "671", handleReplyWhoisGeneric },
+ { "704", handleReplyHelp },
+ { "705", handleReplyHelp },
+ { "706", handleReplyEndOfHelp },
{ "900", handleReplyLoggedIn },
{ "904", handleErrorSASLFail },
{ "905", handleErrorSASLFail },