diff -urN cui133/cui.c cui134/cui.c --- cui133/cui.c Fri Apr 25 00:00:00 2014 +++ cui134/cui.c Sat Apr 26 22:00:00 2014 @@ -726,6 +726,8 @@ cui_focus_set(obj); cui_draw(focus); cui_draw(obj); + }else{ + cui_puts("\033H"); /* ! */ } } main_stack = sp->prev; diff -urN cui133/cui_srv.c cui134/cui_srv.c --- cui133/cui_srv.c Mon Apr 21 22:00:00 2014 +++ cui134/cui_srv.c Sat Apr 26 22:00:00 2014 @@ -56,7 +56,7 @@ int y = cui_y2(cui_tab_scline(p->tab)); cui t = (cfd == -1) ? cui_terminal_new(p->view, 0, 0, 0, 0): - cui_termin_new(p->view, 0, 0, 0, 0, cfd); + cui_termin_new(p->view, 0, 0, 0, 0, cfd, TRUE); static int cnt = 0; char buf[16]; diff -urN cui133/cui_test.c cui134/cui_test.c --- cui133/cui_test.c Fri Apr 25 00:00:00 2014 +++ cui134/cui_test.c Sat Apr 26 22:00:00 2014 @@ -533,7 +533,7 @@ for(i=1; iw, bs_termin->h, sock); + cui_termin_new(bs_termin, 0, 0, bs_termin->w, bs_termin->h, sock, FALSE); } cui_w_set(bs_view, cui_x2(((cui_tab)tab)->scl)); diff -urN cui133/term.c cui134/term.c --- cui133/term.c Mon Apr 21 22:00:00 2014 +++ cui134/term.c Sat Apr 26 22:00:00 2014 @@ -211,6 +211,12 @@ if(p->esc_buf_n == 1) return; if(p->esc_buf_n == 2){ if(c == '[') return; + if(c == 'H'){ + cui_term_move(obj, 0, 0); + p->esc_buf_n = 0; + cui_quit(); /* ! */ + return; + } esc_flush(obj); return; } @@ -422,15 +428,15 @@ /**/ cui -cui_termin_new(cui parent, int x, int y, int w, int h, int sock) +cui_termin_new(cui parent, int x, int y, int w, int h, int sock, int auto_focus) { cui obj = cui_alloc(sizeof(struct cui_termin)); - cui_termin_init(obj, parent, x, y, w, h, sock); + cui_termin_init(obj, parent, x, y, w, h, sock, auto_focus); return obj; } void -cui_termin_init(cui obj, cui parent, int x, int y, int w, int h, int sock) +cui_termin_init(cui obj, cui parent, int x, int y, int w, int h, int sock, int auto_focus) { cui_termin p = (cui_termin)obj; int i; @@ -448,6 +454,7 @@ p->sock = sock; p->in_key_mode = FALSE; + p->auto_focus = auto_focus; cui_bind(obj, CUI_EVT_DRAW | CUI_EVT_KEY | CUI_EVT_RESIZE | CUI_EVT_READABLE, cui_termin_hdr, NULL); @@ -479,6 +486,14 @@ switch(evt){ case CUI_EVT_DRAW: + if(p->auto_focus){ + if(!p->in_key_mode && val == CUI_DRAW_FOCUS){ + p->in_key_mode = TRUE; + cui_main(obj, obj); + p->in_key_mode = FALSE; + } + break; + } for(i=0; i<4; i++) cui_show_hide(p->fill[i], (!p->in_key_mode && val == CUI_DRAW_FOCUS)); break; case CUI_EVT_KEY: @@ -616,7 +631,7 @@ char *cmd = "stty erase ^H\r"; boot_sh(obj); - cui_termin_init(obj, parent, x, y, w, h, p->sock); + cui_termin_init(obj, parent, x, y, w, h, p->sock, FALSE); if(write(p->sock, cmd, strlen(cmd)) <0) ERR("write"); } diff -urN cui133/term.h cui134/term.h --- cui133/term.h Mon Apr 21 22:00:00 2014 +++ cui134/term.h Sat Apr 26 22:00:00 2014 @@ -23,6 +23,7 @@ cui fill[4]; int sock; int in_key_mode; + int auto_focus; } *cui_termin; typedef struct cui_terminal{ @@ -53,8 +54,8 @@ /**/ -cui cui_termin_new(cui parent, int x, int y, int w, int h, int sock); -void cui_termin_init(cui obj, cui parent, int x, int y, int w, int h, int sock); +cui cui_termin_new(cui parent, int x, int y, int w, int h, int sock, int auto_focus); +void cui_termin_init(cui obj, cui parent, int x, int y, int w, int h, int sock, int auto_focus); int cui_termin_hdr(cui obj, int evt, int val, void *prm); void cui_termin_kill(cui obj); void cui_termin_del_free(cui obj);