Author: laurent Date: 2009-11-05 21:39:58 +0000 (Thu, 05 Nov 2009) New Revision: 596
Modified: trunk/openbios-devel/modules/cmdline.c Log: Allow to move on command line and in history using the arrow keys. (with -nographic)
Signed-off-by: Laurent Vivier Laurent@vivier.eu
Modified: trunk/openbios-devel/modules/cmdline.c =================================================================== --- trunk/openbios-devel/modules/cmdline.c 2009-11-05 20:51:15 UTC (rev 595) +++ trunk/openbios-devel/modules/cmdline.c 2009-11-05 21:39:58 UTC (rev 596) @@ -198,7 +198,8 @@ cur_added = prompt = histind = pos = n = 0; }
- switch( (ch=key()) ) { + ch = key(); + switch( ch ) { case 27: switch( key() ) { case 'f': @@ -217,6 +218,30 @@ move_cursor( -1 ); pos--; } + break; + case '[': + switch( key() ) { + case 'A': + goto go_up; + case 'B': + goto go_down; + case 'C': + goto go_right; + case 'D': + goto go_left; + case '3': + key(); + goto delete; + } + break; + case 'O': + switch(key()) { + case 'F': + goto go_end; + case 'H': + goto go_home; + } + break; } break; case '\n': @@ -240,6 +265,7 @@ break;
case 4: /* ^d */ +delete: if( pos == n ) break; emit( buf[pos++] ); @@ -260,17 +286,20 @@ break;
case 1: /* ^a */ +go_home: move_cursor( -pos ); pos = 0; break;
case 5: /* ^e */ +go_end: pos += emit_str( &buf[pos] ); break;
//case 68: /* left */ // drop = 1; case 2: /* ^b */ +go_left: if( pos ) { move_cursor( -1 ); pos--; @@ -280,6 +309,7 @@ //case 67: /* right */ // drop = 1; case 6: /* ^f */ +go_right: if( pos < n ) emit( buf[pos++] ); break; @@ -316,6 +346,7 @@ //case 66: /* down */ // drop = 1; case 14: /* ^n */ +go_down: if( !histind ) break; history_get( ci, --histind ); @@ -331,6 +362,7 @@ //case 65: /* up */ // drop = 1; case 16: /* ^p */ +go_up: if( !histind && add_to_history(ci, ci->buf) ) { cur_added = 1; histind++;