From 3e03b7502b1b13842b5a34481671499129916ce2 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Mon, 13 Jul 2020 10:22:33 -0400 Subject: Add current topic to tab-complete so it can edited --- catgirl.1 | 5 ++++- edit.c | 2 +- handle.c | 18 +++++++++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/catgirl.1 b/catgirl.1 index 478b086..363c393 100644 --- a/catgirl.1 +++ b/catgirl.1 @@ -1,4 +1,4 @@ -.Dd July 6, 2020 +.Dd July 13, 2020 .Dt CATGIRL 1 .Os . @@ -300,6 +300,9 @@ for command output. Send a regular message. .It Ic /topic Op Ar topic Show or set the topic of the channel. +Press +.Ic Tab +twice to copy the current topic. .It Ic /whois Ar nick Query information about a user. .El diff --git a/edit.c b/edit.c index d640309..8459f0e 100644 --- a/edit.c +++ b/edit.c @@ -164,7 +164,7 @@ static void tabComplete(uint id) { delete(false, tab.pos, tab.len); tab.len = n; - if (wcs[0] == L'\\') { + if (wcs[0] == L'\\' || wcschr(wcs, L' ')) { reserve(tab.pos, tab.len); } else if (wcs[0] != L'/' && !tab.pos) { tab.len += 2; diff --git a/handle.c b/handle.c index a7a44b8..441bbc5 100644 --- a/handle.c +++ b/handle.c @@ -528,11 +528,25 @@ static void handleReplyNoTopic(struct Message *msg) { ); } +static void topicComplete(uint id, const char *topic) { + char buf[512]; + const char *prev = complete(id, "/topic "); + if (prev) { + snprintf(buf, sizeof(buf), "%s", prev); + completeRemove(id, buf); + } + if (topic) { + snprintf(buf, sizeof(buf), "/topic %s", topic); + completeAdd(id, buf, Default); + } +} + static void handleReplyTopic(struct Message *msg) { require(msg, false, 3); + uint id = idFor(msg->params[1]); + topicComplete(id, msg->params[2]); if (!replies.topic) return; replies.topic--; - uint id = idFor(msg->params[1]); urlScan(id, NULL, msg->params[2]); uiFormat( id, Cold, tagTime(msg), @@ -549,6 +563,7 @@ static void handleTopic(struct Message *msg) { require(msg, true, 2); uint id = idFor(msg->params[0]); if (msg->params[1][0]) { + topicComplete(id, msg->params[1]); urlScan(id, msg->nick, msg->params[1]); uiFormat( id, Warm, tagTime(msg), @@ -561,6 +576,7 @@ static void handleTopic(struct Message *msg) { msg->nick, msg->params[0], msg->params[1] ); } else { + topicComplete(id, NULL); uiFormat( id, Warm, tagTime(msg), "\3%02d%s\3\tremoves the sign in \3%02d%s\3", -- cgit 1.4.1