More CSI handlers.
This commit is contained in:
parent
57bb593ea8
commit
9de0e18d11
@ -49,13 +49,6 @@
|
|||||||
#include "ssh_handlers.h"
|
#include "ssh_handlers.h"
|
||||||
#include "ssh_terminal.h"
|
#include "ssh_terminal.h"
|
||||||
|
|
||||||
#define SSH_TERM_STATE_NULL 0
|
|
||||||
#define SSH_TERM_STATE_ECHO 1
|
|
||||||
#define SSH_TERM_STATE_ESC 2
|
|
||||||
#define SSH_TERM_STATE_CSI 3
|
|
||||||
#define SSH_TERM_STATE_OSC 4
|
|
||||||
#define SSH_TERM_STATE_CHARSET 5
|
|
||||||
|
|
||||||
/* Client plugin arguments */
|
/* Client plugin arguments */
|
||||||
const char* GUAC_CLIENT_ARGS[] = {
|
const char* GUAC_CLIENT_ARGS[] = {
|
||||||
"hostname",
|
"hostname",
|
||||||
|
@ -183,7 +183,7 @@ int ssh_guac_terminal_csi(ssh_guac_terminal* term, char c) {
|
|||||||
/* Any non-digit stops the parameter, and possibly the sequence */
|
/* Any non-digit stops the parameter, and possibly the sequence */
|
||||||
else {
|
else {
|
||||||
|
|
||||||
int i, row, col;
|
int i, row, col, amount;
|
||||||
|
|
||||||
/* At most 16 parameters */
|
/* At most 16 parameters */
|
||||||
if (argc < 16) {
|
if (argc < 16) {
|
||||||
@ -200,6 +200,65 @@ int ssh_guac_terminal_csi(ssh_guac_terminal* term, char c) {
|
|||||||
/* Handle CSI functions */
|
/* Handle CSI functions */
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
|
||||||
|
/* A: Move up */
|
||||||
|
case 'A':
|
||||||
|
|
||||||
|
/* Get move amount */
|
||||||
|
amount = argv[0];
|
||||||
|
if (amount == 0) amount = 1;
|
||||||
|
|
||||||
|
/* Move cursor */
|
||||||
|
term->cursor_row -= amount;
|
||||||
|
if (term->cursor_row < 0)
|
||||||
|
term->cursor_row = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* B: Move down */
|
||||||
|
case 'B':
|
||||||
|
|
||||||
|
/* Get move amount */
|
||||||
|
amount = argv[0];
|
||||||
|
if (amount == 0) amount = 1;
|
||||||
|
|
||||||
|
/* Move cursor */
|
||||||
|
term->cursor_row += amount;
|
||||||
|
if (term->cursor_row >= term->term_height)
|
||||||
|
term->cursor_row = term->term_height - 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* D: Move left */
|
||||||
|
case 'D':
|
||||||
|
|
||||||
|
/* Get move amount */
|
||||||
|
amount = argv[0];
|
||||||
|
if (amount == 0) amount = 1;
|
||||||
|
|
||||||
|
/* Move cursor */
|
||||||
|
term->cursor_col -= amount;
|
||||||
|
if (term->cursor_col < 0)
|
||||||
|
term->cursor_col = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* C: Move right */
|
||||||
|
case 'C':
|
||||||
|
|
||||||
|
/* Get move amount */
|
||||||
|
amount = argv[0];
|
||||||
|
if (amount == 0) amount = 1;
|
||||||
|
|
||||||
|
/* Move cursor */
|
||||||
|
term->cursor_col += amount;
|
||||||
|
if (term->cursor_col >= term->term_width)
|
||||||
|
term->cursor_col = term->term_width - 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* m: Set graphics rendition */
|
/* m: Set graphics rendition */
|
||||||
case 'm':
|
case 'm':
|
||||||
|
|
||||||
@ -277,6 +336,19 @@ int ssh_guac_terminal_csi(ssh_guac_terminal* term, char c) {
|
|||||||
term->cursor_col = col;
|
term->cursor_col = col;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* G: Move cursor, current row */
|
||||||
|
case 'G':
|
||||||
|
col = argv[0]; if (col != 0) col--;
|
||||||
|
term->cursor_col = col;
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* d: Move cursor, current col */
|
||||||
|
case 'd':
|
||||||
|
row = argv[0]; if (row != 0) row--;
|
||||||
|
term->cursor_row = row;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
/* J: Erase display */
|
/* J: Erase display */
|
||||||
case 'J':
|
case 'J':
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user