diff options
Diffstat (limited to 'src/irc.c')
| -rw-r--r-- | src/irc.c | 50 |
1 files changed, 47 insertions, 3 deletions
@@ -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(); } } |
