Add nickname and new message indicator. - irc - IRC client based on c9x.me/irc client (HTM) git clone git://git.codemadness.org/irc (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit e3ce65b0ed8f3e7342646f8272a0cf0c78d31f79 (DIR) parent 9d13c27310b659f41379c638b799281d7735201c (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Sun, 24 Apr 2016 18:32:41 +0200 Add nickname and new message indicator. Diffstat: M irc.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) --- (DIR) diff --git a/irc.c b/irc.c @@ -46,6 +46,8 @@ struct Chan { char *buf, *eol; int n; /* Scroll offset. */ size_t sz; /* size of buf. */ + char high; /* Nick highlight. */ + char new; /* New message. */ } chl[MaxChans]; int nch, ch; /* Current number of channels, and current channel. */ char outb[BufSz], *outp=outb; /* Output buffer. */ @@ -258,7 +260,7 @@ pushf(int cn, const char *fmt, ...) static void scmd(char *usr, char *cmd, char *par, char *data) { - int s; + int s, c; char *pm=strtok(par, " "); if (!usr) usr="?"; @@ -269,10 +271,16 @@ scmd(char *usr, char *cmd, char *par, char *data) } if (!strcmp(cmd, "PRIVMSG")) { if (!pm || !data) return; - if (strcasestr(data, nick)) - pushf(chfind(pm), PFMTHIGH, usr, data); - else - pushf(chfind(pm), PFMT, usr, data); + c=chfind(pm); + if (strcasestr(data, nick)) { + pushf(c, PFMTHIGH, usr, data); + chl[c].high |= ch != c; + } else + pushf(c, PFMT, usr, data); + if (ch != c) { + chl[c].new=1; + tdrawbar(); + } } else if (!strcmp(cmd, "PING")) { sndf("PONG :%s", data?data:"(null)"); } else if (!strcmp(cmd, "PART")) { @@ -466,6 +474,8 @@ tdrawbar(void) if (fst==ch) wattron(scr.sw, A_BOLD); waddch(scr.sw, '['), l++; + if (chl[fst].high) waddch(scr.sw, '>'), l++; + else if (chl[fst].new) waddch(scr.sw, '+'), l++; for (; *p && l<scr.x; p++, l++) waddch(scr.sw, *p); if (l<scr.x-1) @@ -487,11 +497,13 @@ tgetch(void) switch (c) { case CTRL('n'): ch=(ch+1)%nch; + chl[ch].high=chl[ch].new=0; tdrawbar(); tredraw(); return; case CTRL('p'): ch=(ch+nch-1)%nch; + chl[ch].high=chl[ch].new=0; tdrawbar(); tredraw(); return; @@ -595,7 +607,7 @@ main(int argc, char *argv[]) fputs("usage: irc [-n NICK] [-u USER] [-s SERVER] [-p PORT] [-l LOGFILE ] [-h]\n", stderr); exit(0); case 'l': - if (!(logfp = fopen(optarg, "a"))) + if (!(logfp=fopen(optarg, "a"))) panic("fopen: logfile"); break; case 'n': @@ -615,9 +627,9 @@ main(int argc, char *argv[]) if (!nick[0] && ircnick && strlen(ircnick)<sizeof nick) strcpy(nick, ircnick); if (!nick[0]) goto usage; - if (!user) user = "Unknown"; + if (!user) user="anonymous"; tinit(); - sfd = dial(server, port); + sfd=dial(server, port); chadd("*server*"); sndf("NICK %s", nick); sndf("USER %s 8 * :%s", user, user);