- 论坛徽章:
- 0
|
我感觉应该是这个函数,所以,版主,我把它复制下来了,您看一下大概哪儿应该是控制回显的地方呢?
static void term_handle_key (Term *term, DFBWindowEvent *evt)
{
struct _vtx *vtx = term->vtx;
term->modifiers = evt->modifiers;
if (evt->type == DWET_KEYUP)
return;
if (evt->modifiers == DIMM_CONTROL && evt->key_symbol == DIKS_ENTER) {
IDirectFBWindow *window = term->lw->window;
if (term->hot_key) {
window->UngrabKey (window, DIKS_ENTER, DIMM_CONTROL);
lite_restore_window (term->lw);
window->RequestFocus (window);
term->hot_key = DFB_FALSE;
}
else {
DFBResult ret;
ret = window->GrabKey (window, DIKS_ENTER, DIMM_CONTROL);
if (ret) {
DirectFBError ("IDirectFBWindow::GrabKey() failed", ret);
return;
}
lite_minimize_window (term->lw);
term->hot_key = DFB_TRUE;
}
return;
}
if (evt->modifiers == DIMM_CONTROL &&
evt->key_symbol >= DIKS_SMALL_A &&
evt->key_symbol <= DIKS_SMALL_Z) {
char c = evt->key_symbol - DIKS_SMALL_A + 1;
vt_writechild (&vtx->vt, &c, 1);
}
else if ((evt->key_symbol > 9 && evt->key_symbol < 127) ||
(evt->key_symbol > 127 && evt->key_symbol < 256)) {
char c = evt->key_symbol & 0xff;
if (evt->modifiers & DIMM_CONTROL) {
switch (evt->key_symbol) {
case ' ':
vt_writechild (&vtx->vt, "\000", 1);
break;
case '3':
case '[':
vt_writechild (&vtx->vt, "\033", 1);
break;
case '4':
case '\\':
vt_writechild (&vtx->vt, "\034", 1);
break;
case '5':
case ']':
vt_writechild (&vtx->vt, "\035", 1);
break;
case '6':
vt_writechild (&vtx->vt, "\036", 1);
break;
case '7':
case '-':
vt_writechild (&vtx->vt, "\037", 1);
break;
default:
vt_writechild (&vtx->vt, &c, 1);
break;
}
}
else
vt_writechild (&vtx->vt, &c, 1);
}
else {
switch (evt->key_symbol) {
case DIKS_BACKSPACE:
vt_writechild (&vtx->vt, "\177", 1);
break;
case DIKS_TAB:
if (evt->modifiers & DIMM_SHIFT) /* back tab */
vt_writechild (&vtx->vt, "\033[Z", 3);
else
vt_writechild (&vtx->vt, "\t", 1);
break;
case DIKS_DELETE:
vt_writechild (&vtx->vt, "\033[3~", 4);
break;
case DIKS_INSERT:
vt_writechild (&vtx->vt, "\033[2~", 4);
break;
case DIKS_CURSOR_LEFT:
if (vtx->vt.mode & VTMODE_APP_CURSOR)
vt_writechild (&vtx->vt, "\033OD", 3);
else
vt_writechild (&vtx->vt, "\033[D", 3);
break;
case DIKS_CURSOR_RIGHT:
if (vtx->vt.mode & VTMODE_APP_CURSOR)
vt_writechild (&vtx->vt, "\033OC", 3);
else
vt_writechild (&vtx->vt, "\033[C", 3);
break;
case DIKS_CURSOR_UP:
if (vtx->vt.mode & VTMODE_APP_CURSOR)
vt_writechild (&vtx->vt, "\033OA", 3);
else
vt_writechild (&vtx->vt, "\033[A", 3);
break;
case DIKS_CURSOR_DOWN:
if (vtx->vt.mode & VTMODE_APP_CURSOR)
vt_writechild (&vtx->vt, "\033OB", 3);
else
vt_writechild (&vtx->vt, "\033[B", 3);
break;
case DIKS_HOME:
vt_writechild (&vtx->vt, "\033OH", 3);
break;
case DIKS_END:
vt_writechild (&vtx->vt, "\033OF", 3);
break;
case DIKS_PAGE_UP:
vt_writechild (&vtx->vt, "\033[5~", 4);
break;
case DIKS_PAGE_DOWN:
vt_writechild (&vtx->vt, "\033[6~", 4);
break;
case DIKS_F1:
vt_writechild (&vtx->vt, "\033OP", 3);
break;
case DIKS_F2:
vt_writechild (&vtx->vt, "\033OQ", 3);
break;
case DIKS_F3:
vt_writechild (&vtx->vt, "\033OR", 3);
break;
case DIKS_F4:
vt_writechild (&vtx->vt, "\033OS", 3);
break;
case DIKS_F5 ... DIKS_F12:
{
char buf[6];
sprintf (buf, "\033[%d~", f5_f12_remap[evt->key_symbol - DIKS_F5]);
vt_writechild (&vtx->vt, buf, strlen(buf));
}
break;
default:
return;
}
}
if (vtx->selected) {
vtx->selstartx = vtx->selendx;
vtx->selstarty = vtx->selendy;
vt_draw_selection (vtx); /* un-render selection */
vtx->selected = 0;
}
if (vtx->vt.scrollbackoffset) {
vtx->vt.scrollbackoffset = 0;
vt_update (vtx, UPDATE_SCROLLBACK);
vt_cursor_state (term, 1);
term_update_scrollbar (term);
}
} |
|