aboutsummaryrefslogtreecommitdiff
path: root/src/irc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/irc.c')
-rw-r--r--src/irc.c50
1 files changed, 47 insertions, 3 deletions
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();
}
}