aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorB. Watson <urchlay@slackware.uk>2026-03-08 06:22:39 -0400
committerB. Watson <urchlay@slackware.uk>2026-03-08 06:22:39 -0400
commitfbc4daa87b2a6aaf355e2d3270d1ff726ab0ddae (patch)
tree99e07979646b024cf31699aa85ba3c95306fa482 /src
parent1815d26c7042d3d592e624d8edf73805c7b3bc6d (diff)
downloadfujinet-chat-fbc4daa87b2a6aaf355e2d3270d1ff726ab0ddae.tar.gz
No dup queries, add more start key combos, add /names command.
Diffstat (limited to 'src')
-rw-r--r--src/cmd.c24
-rw-r--r--src/irc.c50
2 files changed, 70 insertions, 4 deletions
diff --git a/src/cmd.c b/src/cmd.c
index f4e94b6..bad5a28 100644
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -19,6 +19,7 @@ static void do_j1(void);
static void do_list(void);
static void do_me(void);
static void do_msg(void);
+static void do_names(void);
static void do_part(void);
static void do_ping(void);
static void do_query(void);
@@ -34,7 +35,7 @@ typedef struct {
} cmd_t;
/* future commands:
- OP DEOP VOICE DEVOICE KICK BAN KB IGNORE UNIGNORE MODE
+ AWAY OP DEOP VOICE DEVOICE KICK BAN KB IGNORE UNIGNORE MODE
*/
cmd_t command_defs[] = {
{ "COLOR", do_color, 1 },
@@ -47,6 +48,7 @@ cmd_t command_defs[] = {
{ "M", do_msg, 1 },
{ "ME", do_me, 1 },
{ "MSG", do_msg, 1 },
+ { "NAMES", do_names, 0 },
{ "PART", do_part, 0 },
{ "PING", do_ping, 0 },
{ "Q", do_query, 1 },
@@ -191,6 +193,22 @@ static void do_topic(void) {
txbuf_send();
}
+static void do_names(void) {
+ if(arg1[0] == '#') {
+ target = arg1;
+ arg2 = nextarg(arg1);
+ } else {
+ arg2 = arg1;
+ }
+
+ if(!target) {
+ err_target_req();
+ return;
+ }
+ txbuf_set_str2("NAMES ", target);
+ txbuf_send();
+}
+
static void do_server_info(void) {
txbuf_send_str("INFO");
}
@@ -272,6 +290,10 @@ static void do_color(void) {
}
static void do_query(void) {
+ /* don't create a query if we already got one! */
+ if(scr_getbyname(arg1))
+ return;
+
if(scr_create(arg1, 1) == 0xff) {
err_marker();
scr_print_current("Can't create query, all screens in use\n");
diff --git a/src/irc.c b/src/irc.c
index 1f7aad3..3a57015 100644
--- a/src/irc.c
+++ b/src/irc.c
@@ -24,6 +24,7 @@ static char *msg; /* with source removed */
static int msgbuf_len = 0, msg_len = 0;
static char regged = 0, hilite = 0;
+static char scr_prev = SCR_PRIV;
/*
static void join_channel(void) {
@@ -529,18 +530,61 @@ static void scrollback() {
scr_end_scrollback();
}
+static void hunt_screen(signed char dir) {
+ signed char s = scr_current;
+
+ do {
+ s += dir;
+ if(s < 0)
+ s = MAX_SCREENS - 1;
+ s %= MAX_SCREENS;
+ } while(scr_status[s] == SCR_UNUSED);
+
+ scr_display(s);
+}
+
+void switch_to_active() {
+ char i;
+
+ for(i = 0; i < MAX_SCREENS; i++) {
+ if(scr_status[i] == SCR_ACTIVE) {
+ scr_prev = scr_current;
+ scr_display(i);
+ }
+ }
+}
+
static void start_keystroke(void) {
char i, s;
i = cgetc();
if(i >= '1' && i <= '7') {
s = i - '1';
- if(scr_status[s] != SCR_UNUSED)
- scr_display(s);
+ if(s != scr_current) {
+ if(scr_status[s] != SCR_UNUSED) {
+ scr_prev = scr_current;
+ scr_display(s);
+ }
+ }
} else if(i == CH_CURS_UP || i == '-') {
scrollback();
- } else if(i == 0x1b) { /* escape */
+ } else if(i == CH_ESC) {
+ scr_prev = SCR_PRIV;
scr_destroy(scr_current);
+ } else if(i == CH_CURS_LEFT || i == '+') {
+ scr_prev = scr_current;
+ hunt_screen(-1);
+ } else if(i == CH_CURS_RIGHT || i == '*') {
+ scr_prev = scr_current;
+ hunt_screen(1);
+ } else if(i == CH_TAB) {
+ i = scr_current;
+ scr_display(scr_prev);
+ scr_prev = i;
+ } else if(i == 'a' || i == 'A') {
+ switch_to_active();
+ } else if(i == 's' || i == 'S') {
+ edbox_hide();
}
}