irc: This really needs to use rline, but at least don't mess up long input lines

This commit is contained in:
K. Lange 2021-12-06 12:48:54 +09:00
parent 3e7fcc41f4
commit ee363c877d

View File

@ -89,54 +89,22 @@ static int user_color(char * user) {
return 0; return 0;
} }
static int color_pairs[] = {
15, 0, 4, 2, 9, 1, 5, 3, 11, 10, 6, 14, 12, 13, 8, 7
};
static struct color_pair irc_color_to_pair(int fg, int bg) { static struct color_pair irc_color_to_pair(int fg, int bg) {
int _fg = 0; int _fg = 0;
int _bg = 0; int _bg = 0;
if (fg == -1) { if (fg == -1) {
_fg = -1; _fg = -1;
} else { } else {
fg = fg % 16; _fg = color_pairs[fg % 16];
switch (fg) {
case 0: _fg = 15; break;
case 1: _fg = 0; break;
case 2: _fg = 4; break;
case 3: _fg = 2; break;
case 4: _fg = 9; break;
case 5: _fg = 1; break;
case 6: _fg = 5; break;
case 7: _fg = 3; break;
case 8: _fg = 11; break;
case 9: _fg = 10; break;
case 10: _fg = 6; break;
case 11: _fg = 14; break;
case 12: _fg = 12; break;
case 13: _fg = 13; break;
case 14: _fg = 8; break;
case 15: _fg = 7; break;
}
} }
if (bg == -1) { if (bg == -1) {
_bg = -1; _bg = -1;
} else { } else {
bg = bg % 16; _bg = color_pairs[bg % 16];
switch (bg) {
case 0: _bg = 15; break;
case 1: _bg = 0; break;
case 2: _bg = 4; break;
case 3: _bg = 2; break;
case 4: _bg = 9; break;
case 5: _bg = 1; break;
case 6: _bg = 5; break;
case 7: _bg = 3; break;
case 8: _bg = 11; break;
case 9: _bg = 10; break;
case 10: _bg = 6; break;
case 11: _bg = 14; break;
case 12: _bg = 12; break;
case 13: _bg = 13; break;
case 14: _bg = 8; break;
case 15: _bg = 7; break;
}
} }
return (struct color_pair){_fg, _bg}; return (struct color_pair){_fg, _bg};
} }
@ -391,9 +359,18 @@ next:
static void redraw_buffer(char * buf) { static void redraw_buffer(char * buf) {
struct winsize w; struct winsize w;
ioctl(0, TIOCGWINSZ, &w); ioctl(0, TIOCGWINSZ, &w);
fprintf(stdout,"\033[%d;1H [%s] ", w.ws_row, channel ? channel : "(status)");
fprintf(stdout,"%s\033[K", buf); char tmp[1024];
fprintf(stdout,"\033[?25h"); size_t left = snprintf(tmp,1024," [%s] ", channel ? channel : "(status)");
size_t avail = w.ws_col - left - 1;
size_t buflen = strlen(buf);
char * from = buf;
if (buflen >= avail) {
from = buf + (buflen - avail);
}
fprintf(stdout,"\033[%d;1H%s%s\033[K\033[?25h", w.ws_row, tmp, from);
fflush(stdout); fflush(stdout);
} }