diff options
| author | C. McEnroe | 2020-02-07 23:33:23 -0500 | 
|---|---|---|
| committer | C. McEnroe | 2020-02-07 23:33:23 -0500 | 
| commit | d314523b90f41cfdbca867ad0ad48f2f68f66c58 (patch) | |
| tree | d448e4b1cbdde3580fd2238c4a80daacb92adff4 | |
| parent | ef9bea6d601742b8e91eda59b914f8653463ef24 (diff) | |
Update completion on join, part, privmsg
| -rw-r--r-- | chat.h | 1 | ||||
| -rw-r--r-- | complete.c | 13 | ||||
| -rw-r--r-- | handle.c | 8 | 
3 files changed, 21 insertions, 1 deletions
| @@ -153,6 +153,7 @@ void completeAccept(void);  void completeReject(void);  void completeAdd(size_t id, const char *str, enum Color color);  void completeTouch(size_t id, const char *str, enum Color color); +void completeRemove(size_t id, const char *str);  FILE *configOpen(const char *path, const char *mode);  int getopt_config( @@ -109,3 +109,16 @@ void completeAccept(void) {  void completeReject(void) {  	match = NULL;  } + +void completeRemove(size_t id, const char *str) { +	struct Node *next = NULL; +	for (struct Node *node = head; node; node = next) { +		next = node->next; +		if (id && node->id != id) continue; +		if (strcmp(node->str, str)) continue; +		if (match == node) match = NULL; +		detach(node); +		free(node->str); +		free(node); +	} +} @@ -154,6 +154,7 @@ static void handleErrorSASLFail(struct Message *msg) {  static void handleReplyWelcome(struct Message *msg) {  	require(msg, false, 1);  	set(&self.nick, msg->params[0]); +	completeTouch(None, self.nick, Default);  	if (self.join) ircFormat("JOIN %s\r\n", self.join);  } @@ -197,8 +198,10 @@ static void handleJoin(struct Message *msg) {  			self.color = hash(msg->user);  		}  		idColors[id] = hash(msg->params[0]); +		completeTouch(None, msg->params[0], idColors[id]);  		uiShowID(id);  	} +	completeTouch(id, msg->nick, hash(msg->user));  	uiFormat(  		id, Cold, tagTime(msg),  		"\3%02d%s\3\tarrives in \3%02d%s\3", @@ -208,8 +211,10 @@ static void handleJoin(struct Message *msg) {  static void handlePart(struct Message *msg) {  	require(msg, true, 1); +	size_t id = idFor(msg->params[0]); +	completeRemove(id, msg->nick);  	uiFormat( -		idFor(msg->params[0]), Cold, tagTime(msg), +		id, Cold, tagTime(msg),  		"\3%02d%s\3\tleaves \3%02d%s\3%s%s",  		hash(msg->user), msg->nick, hash(msg->params[0]), msg->params[0],  		(msg->params[1] ? ": " : ""), @@ -294,6 +299,7 @@ static void handlePrivmsg(struct Message *msg) {  	bool notice = (msg->cmd[0] == 'N');  	bool action = isAction(msg);  	bool mention = !mine && isMention(msg); +	if (!notice && !mine) completeTouch(id, msg->nick, hash(msg->user));  	if (notice) {  		uiFormat(  			id, Warm, tagTime(msg), | 
