More CSI, scroll region

This commit is contained in:
Michael Jumper 2011-08-05 22:59:42 -07:00
parent 9de0e18d11
commit 93d93a64eb
4 changed files with 22 additions and 9 deletions

View File

@ -66,6 +66,9 @@ struct ssh_guac_terminal {
int term_width; int term_width;
int term_height; int term_height;
int scroll_start;
int scroll_end;
int cursor_row; int cursor_row;
int cursor_col; int cursor_col;

View File

@ -111,6 +111,7 @@ int ssh_guac_client_key_handler(guac_client* client, int keysym, int pressed) {
else if (keysym == 0xFF08) data = 0x08; else if (keysym == 0xFF08) data = 0x08;
else if (keysym == 0xFF09) data = 0x09; else if (keysym == 0xFF09) data = 0x09;
else if (keysym == 0xFF0D) data = 0x0D; else if (keysym == 0xFF0D) data = 0x0D;
else if (keysym == 0xFF1B) data = 0x1B;
else else
return 0; return 0;

View File

@ -92,15 +92,18 @@ ssh_guac_terminal* ssh_guac_terminal_create(guac_client* client) {
term->cursor_row = 0; term->cursor_row = 0;
term->cursor_col = 0; term->cursor_col = 0;
term->term_width = 160; term->term_width = 80;
term->term_height = 50; term->term_height = 24;
term->char_handler = ssh_guac_terminal_echo; term->char_handler = ssh_guac_terminal_echo;
term->scroll_start = 0;
term->scroll_end = term->term_height - 1;
/* Get font */ /* Get font */
term->font_desc = pango_font_description_new(); term->font_desc = pango_font_description_new();
pango_font_description_set_family(term->font_desc, "monospace"); pango_font_description_set_family(term->font_desc, "monospace");
pango_font_description_set_weight(term->font_desc, PANGO_WEIGHT_NORMAL); pango_font_description_set_weight(term->font_desc, PANGO_WEIGHT_NORMAL);
pango_font_description_set_size(term->font_desc, 8*PANGO_SCALE); pango_font_description_set_size(term->font_desc, 14*PANGO_SCALE);
font_map = pango_cairo_font_map_get_default(); font_map = pango_cairo_font_map_get_default();
context = pango_font_map_create_context(font_map); context = pango_font_map_create_context(font_map);

View File

@ -69,11 +69,11 @@ int ssh_guac_terminal_echo(ssh_guac_terminal* term, char c) {
term->cursor_row++; term->cursor_row++;
/* Scroll up if necessary */ /* Scroll up if necessary */
if (term->cursor_row >= term->term_height) { if (term->cursor_row > term->scroll_end) {
term->cursor_row = term->term_height - 1; term->cursor_row = term->scroll_end;
/* Scroll up by one row */ /* Scroll up by one row */
ssh_guac_terminal_scroll_up(term, 0, term->term_height - 1, 1); ssh_guac_terminal_scroll_up(term, term->scroll_start, term->scroll_end, 1);
} }
break; break;
@ -93,11 +93,11 @@ int ssh_guac_terminal_echo(ssh_guac_terminal* term, char c) {
} }
/* Scroll up if necessary */ /* Scroll up if necessary */
if (term->cursor_row >= term->term_height) { if (term->cursor_row > term->scroll_end) {
term->cursor_row = term->term_height - 1; term->cursor_row = term->scroll_end;
/* Scroll up by one row */ /* Scroll up by one row */
ssh_guac_terminal_scroll_up(term, 0, term->term_height - 1, 1); ssh_guac_terminal_scroll_up(term, term->scroll_start, term->scroll_end, 1);
} }
@ -326,6 +326,12 @@ int ssh_guac_terminal_csi(ssh_guac_terminal* term, char c) {
break; break;
/* r: Set scrolling region */
case 'r':
term->scroll_start = argv[0]-1;
term->scroll_end = argv[1]-1;
break;
/* H: Move cursor */ /* H: Move cursor */
case 'H': case 'H':