diff options
| -rw-r--r-- | src/cmd.c | 24 | ||||
| -rw-r--r-- | src/irc.c | 50 | ||||
| -rw-r--r-- | ui_keys.txt | 12 |
3 files changed, 76 insertions, 10 deletions
@@ -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"); @@ -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(); } } diff --git a/ui_keys.txt b/ui_keys.txt index ddc467d..a6b8dd9 100644 --- a/ui_keys.txt +++ b/ui_keys.txt @@ -1,13 +1,13 @@ Hold down Start and: 1-7 - switch screens -Up Arrow or "-" - scroll current screen up +Up Arrow (without Control) - scroll current screen up +Escape - close screen (but do not part channel) +Tab - switch to last displayed screen +Left/Right (without Control) - previous/next screen. +A - switch to active screen +S - show status (hide edit box) Future plans: -A - switch to active screen -Tab - switch to previous screen -S - show status (hide edit box) -Escape - close screen (end query, or part channel). needs confirmation! -Left/Right - previous/next screen. ? - Show help (also the Help key by itself will do this). |
