diff options
author | Erich Eckner <git@eckner.net> | 2019-09-01 21:39:52 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2021-05-11 21:05:00 +0200 |
commit | 85617fe554d6de26b4582ce187df1e2e34921897 (patch) | |
tree | bf0591fa4a037e5837026b9b59e5670dc180f3bc /alpine/osdep/termin.gen.c | |
parent | b5eb45a153202d72aeb48de1149e7c74aef979fd (diff) | |
download | alpine-85617fe554d6de26b4582ce187df1e2e34921897.tar.xz |
rules.patch appliedrules
Diffstat (limited to 'alpine/osdep/termin.gen.c')
-rw-r--r-- | alpine/osdep/termin.gen.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/alpine/osdep/termin.gen.c b/alpine/osdep/termin.gen.c index b8d01b1..033ce9a 100644 --- a/alpine/osdep/termin.gen.c +++ b/alpine/osdep/termin.gen.c @@ -33,6 +33,8 @@ static char rcsid[] = "$Id: termin.gen.c 1025 2008-04-08 22:59:38Z hubert@u.wash #include "../../pith/newmail.h" #include "../../pith/conf.h" #include "../../pith/busy.h" +#include "../../pith/list.h" +#include "../../pith/rules.h" #include "../../pico/estruct.h" #include "../../pico/pico.h" @@ -72,7 +74,8 @@ int pcpine_oe_cursor(int, long); * Generic tty input routines */ - +void process_init_cmds(struct pine *, char **); +void queue_init_errors(struct pine *); /*---------------------------------------------------------------------- Read a character from keyboard with timeout Input: none @@ -114,6 +117,41 @@ read_command(char **utf8str) *utf8str = NULL; ucs = read_char(tm); + if(!ps_global->initial_cmds){ + RULE_RESULT *rule; + char **list = NULL, *error = NULL; + int commas = 0, k; /* From args.c */ + + ps_global->pressed_key = cpystr(pretty_command(ucs)); + rule = (RULE_RESULT *)get_result_rule(V_KEY_RULES, FOR_KEY, NULL); + if(ps_global->pressed_key) + fs_give((void **)&ps_global->pressed_key); + if (rule){ + for(k = 0; rule->result[k]; k++) + if(rule->result[k] == ',') commas++; + list = parse_list(rule->result, commas+1, 0, &error); + if(error) + sprintf(tmp_20k_buf, "Error in parsing command list: %s, %s", + rule->result, error); + if (rule->result) + fs_give((void **)&rule->result); + fs_give((void **)&rule); + if(error){ + q_status_message(SM_ORDER | SM_DING, 0, 2, tmp_20k_buf); + return (NO_OP_COMMAND); + } + process_init_cmds(ps_global, list); + if(ps_global->init_errs){ + queue_init_errors(ps_global); + return (NO_OP_COMMAND); + } + ucs = read_char(tm); + ps_global->in_init_seq = 1; /* no output please */ + for(k = 0; k < commas; k++) + if(list[k]) fs_give((void **)&list[k]); + if (list) fs_give((void **)list); + } + } if(ucs != NO_OP_COMMAND && ucs != NO_OP_IDLE && ucs != KEY_RESIZE) zero_new_mail_count(); @@ -1160,6 +1198,7 @@ process_config_input(UCS *ch) if(ps_global->initial_cmds && !*ps_global->initial_cmds && ps_global->free_initial_cmds){ fs_give((void **) &ps_global->free_initial_cmds); ps_global->initial_cmds = NULL; + firsttime = (char) 1; } return(ret); |