Add current topic to tab-complete so it can edited

master
C. McEnroe 2020-07-13 10:22:33 -04:00
parent 787771bebb
commit 3e03b7502b
3 changed files with 22 additions and 3 deletions

View File

@ -1,4 +1,4 @@
.Dd July 6, 2020 .Dd July 13, 2020
.Dt CATGIRL 1 .Dt CATGIRL 1
.Os .Os
. .
@ -300,6 +300,9 @@ for command output.
Send a regular message. Send a regular message.
.It Ic /topic Op Ar topic .It Ic /topic Op Ar topic
Show or set the topic of the channel. Show or set the topic of the channel.
Press
.Ic Tab
twice to copy the current topic.
.It Ic /whois Ar nick .It Ic /whois Ar nick
Query information about a user. Query information about a user.
.El .El

2
edit.c
View File

@ -164,7 +164,7 @@ static void tabComplete(uint id) {
delete(false, tab.pos, tab.len); delete(false, tab.pos, tab.len);
tab.len = n; tab.len = n;
if (wcs[0] == L'\\') { if (wcs[0] == L'\\' || wcschr(wcs, L' ')) {
reserve(tab.pos, tab.len); reserve(tab.pos, tab.len);
} else if (wcs[0] != L'/' && !tab.pos) { } else if (wcs[0] != L'/' && !tab.pos) {
tab.len += 2; tab.len += 2;

View File

@ -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) { static void handleReplyTopic(struct Message *msg) {
require(msg, false, 3); require(msg, false, 3);
uint id = idFor(msg->params[1]);
topicComplete(id, msg->params[2]);
if (!replies.topic) return; if (!replies.topic) return;
replies.topic--; replies.topic--;
uint id = idFor(msg->params[1]);
urlScan(id, NULL, msg->params[2]); urlScan(id, NULL, msg->params[2]);
uiFormat( uiFormat(
id, Cold, tagTime(msg), id, Cold, tagTime(msg),
@ -549,6 +563,7 @@ static void handleTopic(struct Message *msg) {
require(msg, true, 2); require(msg, true, 2);
uint id = idFor(msg->params[0]); uint id = idFor(msg->params[0]);
if (msg->params[1][0]) { if (msg->params[1][0]) {
topicComplete(id, msg->params[1]);
urlScan(id, msg->nick, msg->params[1]); urlScan(id, msg->nick, msg->params[1]);
uiFormat( uiFormat(
id, Warm, tagTime(msg), id, Warm, tagTime(msg),
@ -561,6 +576,7 @@ static void handleTopic(struct Message *msg) {
msg->nick, msg->params[0], msg->params[1] msg->nick, msg->params[0], msg->params[1]
); );
} else { } else {
topicComplete(id, NULL);
uiFormat( uiFormat(
id, Warm, tagTime(msg), id, Warm, tagTime(msg),
"\3%02d%s\3\tremoves the sign in \3%02d%s\3", "\3%02d%s\3\tremoves the sign in \3%02d%s\3",