sirc

A simple tui multi server irc client
Log | Files | Refs | README | LICENSE

commit f62c73d5a605f871ebd39a5442dee976f67c9acd
parent 6c561ad3bddae876620cdd627d7312e918929023
Author: emmett1 <me@emmett1.my>
Date:   Mon, 30 Mar 2026 23:05:55 +0800

updated

Diffstat:
Mreadme.txt | 2+-
Msirc.c | 30+++++++++++++++++++-----------
2 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/readme.txt b/readme.txt @@ -110,7 +110,7 @@ Examples: CONFIG FILE ----------- -Loaded from ~/.ircrc or ~/.config/irc/ircrc (first found wins). +Loaded from ~/.sirc or ~/.config/sirc/config (first found wins). CLI flags override the first server in the config. Use [server] blocks for multiple servers. Each block is an independent diff --git a/sirc.c b/sirc.c @@ -3,7 +3,7 @@ * * Usage: sirc [options] * - * Config (~/.sircrc): + * Config (~/.sirc): * # Default server (applied when no [server] block precedes it) * nick = mynick * ignore = badbot,spammer @@ -584,7 +584,7 @@ static void handle_irc_line(int si, const char *raw) { } else if (strcmp(sub,"NAK")==0) { ev_simple(EV_ERROR, si, NULL, NULL, "Server rejected SASL CAP."); srv_sendf(si, "NICK %s", s->nick); - srv_sendf(si, "USER %s 0 * :circ", s->nick); + srv_sendf(si, "USER %s 0 * :sirc", s->nick); } return; } @@ -600,7 +600,7 @@ static void handle_irc_line(int si, const char *raw) { ev_simple(EV_STATUS, si, NULL, NULL, "SASL authentication successful."); srv_send_raw(si, "CAP END"); srv_sendf(si, "NICK %s", s->nick); - srv_sendf(si, "USER %s 0 * :circ", s->nick); + srv_sendf(si, "USER %s 0 * :sirc", s->nick); return; } if (strcmp(m.cmd,"902")==0||strcmp(m.cmd,"904")==0|| @@ -610,7 +610,7 @@ static void handle_irc_line(int si, const char *raw) { ev_simple(EV_ERROR, si, NULL, NULL, buf); srv_send_raw(si, "CAP END"); srv_sendf(si, "NICK %s", s->nick); - srv_sendf(si, "USER %s 0 * :circ", s->nick); + srv_sendf(si, "USER %s 0 * :sirc", s->nick); return; } @@ -943,7 +943,7 @@ static void *net_thread(void *arg) { srv_send_raw(si,"CAP REQ :sasl"); else { srv_sendf(si,"NICK %s",s->nick); - srv_sendf(si,"USER %s 0 * :circ",s->nick); + srv_sendf(si,"USER %s 0 * :sirc",s->nick); } char readbuf[8192], linebuf[MAX_LINE*4]; @@ -1056,8 +1056,8 @@ static void load_config(const char *path) { char candidates[2][MAX_HOST]; const char *home=getenv("HOME"); if (home) { - snprintf(candidates[0],MAX_HOST,"%s/.ircrc",home); - snprintf(candidates[1],MAX_HOST,"%s/.config/irc/ircrc",home); + snprintf(candidates[0],MAX_HOST,"%s/.sirc",home); + snprintf(candidates[1],MAX_HOST,"%s/.config/sirc/config",home); } FILE *f=NULL; if (path) f=fopen(path,"r"); @@ -1965,7 +1965,7 @@ static void usage(const char *prog) { " --sasl-pass PASS SASL password\n" " --config FILE config file\n" "\n" - "Multiple servers via ~/.ircrc [server] blocks.\n", prog); + "Multiple servers via ~/.sirc [server] blocks.\n", prog); } int main(int argc, char **argv) { @@ -1994,19 +1994,27 @@ int main(int argc, char **argv) { if (cli_host) { int si; if (g_srv_count==0) si=srv_alloc(); - else si=0; /* override first */ + else si=0; strncpy(g_srv[si].host,cli_host,MAX_HOST-1); if(cli_port>0) g_srv[si].port=cli_port; - if(cli_nick) strncpy(g_srv[si].nick,cli_nick,MAX_NICK-1); if(cli_tls>=0) g_srv[si].use_tls=cli_tls; + if(cli_chan) srv_add_autojoin(si,cli_chan); if(cli_su) strncpy(g_srv[si].sasl_user,cli_su,MAX_NICK-1); if(cli_sp) strncpy(g_srv[si].sasl_pass,cli_sp,255); - if(cli_chan) srv_add_autojoin(si,cli_chan); + if(cli_nick) strncpy(g_srv[si].nick,cli_nick,MAX_NICK-1); } else if (g_srv_count==0) { /* no config, no --host: add default server */ srv_alloc(); } + /* apply --nick / --channel / --tls to all servers that don't have + their own value set (covers the no-host case) */ + for (int i=0; i<g_srv_count; i++) { + if (cli_nick && !cli_host) strncpy(g_srv[i].nick, cli_nick, MAX_NICK-1); + if (cli_tls>=0 && !cli_host) g_srv[i].use_tls = cli_tls; + if (cli_chan && !cli_host) srv_add_autojoin(i, cli_chan); + } + /* create status channels */ for(int i=0;i<g_srv_count;i++) chan_add(i,"*status*");