Introduction
Introduction Statistics Contact Development Disclaimer Help
Display joined channels in status bar. - irc - Unnamed repository; edit this fi…
git clone git://vernunftzentrum.de/irc.git
Log
Files
Refs
README
---
commit f8a2a7b155eef7c14cf0f08fb24cb04b46c70fa8
parent 43b2c32a6d4ddbb64edbd7428a7d0a425cab6e96
Author: Quentin Carbonneaux <[email protected]>
Date: Wed, 14 Mar 2012 23:46:13 +0100
Display joined channels in status bar.
The status bar was not useful, now it displays the list of joined
channels. The function tdrawbar will redraw the whole bar (no clever
refreshing here, it does not worth the complexity). Tdrawbar tries to
keep the current channel in the middle of the bar to maximize the
context on both sides.
Diffstat:
irc.c | 37 +++++++++++++++++++++++++++----
1 file changed, 33 insertions(+), 4 deletions(-)
---
diff --git a/irc.c b/irc.c
@@ -48,6 +48,7 @@ int nch, ch; /* Current number of channels, and current chann…
char outb[BufSz], *outp=outb; /* Output buffer. */
static void scmd(char *, char *, char *, char *);
+static void tdrawbar(void);
static void tredraw(void);
static void treset(void);
@@ -149,8 +150,9 @@ chadd(char *name)
panic("Out of memory.");
chl[nch].eol=chl[nch].buf;
chl[nch].n=0;
- ch=nch;
- return nch++;
+ ch=nch++;
+ tdrawbar();
+ return nch;
}
static inline int
@@ -175,6 +177,7 @@ chdel(char *name)
free(chl[n].buf);
memmove(&chl[n], &chl[n+1], (nch-n)*sizeof(struct Chan));
ch=nch-1;
+ tdrawbar();
return 1;
}
@@ -242,6 +245,7 @@ scmd(char *usr, char *cmd, char *par, char *data)
if (!ch || !fch || !(s=chfind(ch))) return;
chl[s].name[0] = 0;
strncat(chl[s].name, fch, ChanLen-1);
+ tdrawbar();
} else if (!strcmp(cmd, "471") || !strcmp(cmd, "473")
|| !strcmp(cmd, "474") || !strcmp(cmd, "475")) { /* Join error.…
if ((pm=strtok(0, " "))) {
@@ -361,6 +365,7 @@ tresize(void)
wresize(scr.sw, 1, scr.x);
mvwin(scr.iw, scr.y-1, 0);
tredraw();
+ tdrawbar();
}
static void
@@ -407,6 +412,30 @@ tredraw(void)
}
static void
+tdrawbar(void)
+{
+ size_t l;
+ int fst=ch;
+
+ for (l=0; fst>0 && l<scr.x/2; fst--)
+ l+=strlen(chl[fst].name)+3;
+
+ werase(scr.sw);
+ for (l=0; fst<nch && l<scr.x; fst++) {
+ char *p=chl[fst].name;
+
+ if (fst==ch) wattron(scr.sw, A_BOLD);
+ waddch(scr.sw, '['), l++;
+ for (; *p && l<scr.x; p++, l++)
+ waddch(scr.sw, *p);
+ if (l<scr.x-1)
+ waddstr(scr.sw, "] "), l+=2;
+ if (fst==ch) wattroff(scr.sw, A_BOLD);
+ }
+ wrefresh(scr.sw);
+}
+
+static void
tgetch(void)
{
static char l[BufSz];
@@ -418,10 +447,12 @@ tgetch(void)
switch (c) {
case CTRL('n'): //0xe:
ch=(ch+1)%nch;
+ tdrawbar();
tredraw();
return;
case CTRL('p'): //0x10:
ch=(ch+nch-1)%nch;
+ tdrawbar();
tredraw();
return;
case KEY_PPAGE:
@@ -509,8 +540,6 @@ main(void)
if (!user) user="Unknown";
tinit();
chadd("*server*");
- waddstr(scr.sw, "Welcome in irc.");
- wrefresh(scr.sw);
strcpy(nick, "_mpu");
sfd = dial("chat.freenode.org", 6667);
sndf("NICK %s", nick);
You are viewing proxied material from vernunftzentrum.de. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.