revert a bunch of commits that weren't ready for prime time
664c5a23: Revert "compat: csi parameters are always decimal" 3694c88c: Revert "compat: handle cursor-controls chars in ESC sequences" 16e143f9: Revert "compat: add margin top support on Origin mode" 4daccf1f: Revert "compat: add ugly testing code to change between 80/132 cols" d5be8a64: Revert "add termio_win_get();" cff21ea5: Revert "compat: only clear cells when scrolling to add text" 13a11e5a: Revert "compat: add some csi dec private modes TODOs" 65f07f77: Revert "handle DCS status string requests"
This commit is contained in:
parent
33b1854eae
commit
b6d2b1b4ad
|
@ -4282,16 +4282,6 @@ termio_textgrid_get(Evas_Object *obj)
|
||||||
return sd->grid.obj;
|
return sd->grid.obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
Evas_Object *
|
|
||||||
termio_win_get(Evas_Object *obj)
|
|
||||||
{
|
|
||||||
Termio *sd = evas_object_smart_data_get(obj);
|
|
||||||
if (!sd) return NULL;
|
|
||||||
|
|
||||||
return sd->win;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_smart_mirror_del(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *info __UNUSED__)
|
_smart_mirror_del(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *info __UNUSED__)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,7 +22,6 @@ void termio_grid_size_set(Evas_Object *obj, int w, int h);
|
||||||
pid_t termio_pid_get(const Evas_Object *obj);
|
pid_t termio_pid_get(const Evas_Object *obj);
|
||||||
Eina_Bool termio_cwd_get(const Evas_Object *obj, char *buf, size_t size);
|
Eina_Bool termio_cwd_get(const Evas_Object *obj, char *buf, size_t size);
|
||||||
Evas_Object *termio_textgrid_get(Evas_Object *obj);
|
Evas_Object *termio_textgrid_get(Evas_Object *obj);
|
||||||
Evas_Object *termio_win_get(Evas_Object *obj);
|
|
||||||
Evas_Object *termio_mirror_add(Evas_Object *obj);
|
Evas_Object *termio_mirror_add(Evas_Object *obj);
|
||||||
const char *termio_title_get(Evas_Object *obj);
|
const char *termio_title_get(Evas_Object *obj);
|
||||||
const char *termio_icon_name_get(Evas_Object *obj);
|
const char *termio_icon_name_get(Evas_Object *obj);
|
||||||
|
|
|
@ -36,9 +36,6 @@ typedef struct _Termexp Termexp;
|
||||||
//#define SUPPORT_ITALIC 1
|
//#define SUPPORT_ITALIC 1
|
||||||
#define SUPPORT_DBLWIDTH 1
|
#define SUPPORT_DBLWIDTH 1
|
||||||
|
|
||||||
// Only for testing purpose
|
|
||||||
//#define SUPPORT_80_132_COLUMNS 1
|
|
||||||
|
|
||||||
struct _Termatt
|
struct _Termatt
|
||||||
{
|
{
|
||||||
unsigned char fg, bg;
|
unsigned char fg, bg;
|
||||||
|
@ -63,9 +60,6 @@ struct _Termatt
|
||||||
unsigned short autowrapped : 1;
|
unsigned short autowrapped : 1;
|
||||||
unsigned short newline : 1;
|
unsigned short newline : 1;
|
||||||
unsigned short tab : 1;
|
unsigned short tab : 1;
|
||||||
#if defined(SUPPORT_80_132_COLUMNS)
|
|
||||||
unsigned short is_80_132_mode_allowed : 1;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Termstate
|
struct _Termstate
|
||||||
|
@ -77,7 +71,6 @@ struct _Termstate
|
||||||
unsigned char chset[4];
|
unsigned char chset[4];
|
||||||
int scroll_y1, scroll_y2;
|
int scroll_y1, scroll_y2;
|
||||||
int had_cr_x, had_cr_y;
|
int had_cr_x, had_cr_y;
|
||||||
int margin_top; // soon, more to come...
|
|
||||||
unsigned int multibyte : 1;
|
unsigned int multibyte : 1;
|
||||||
unsigned int alt_kp : 1;
|
unsigned int alt_kp : 1;
|
||||||
unsigned int insert : 1;
|
unsigned int insert : 1;
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
#include "termptyesc.h"
|
#include "termptyesc.h"
|
||||||
#include "termptyops.h"
|
#include "termptyops.h"
|
||||||
#include "termptyext.h"
|
#include "termptyext.h"
|
||||||
#if defined(SUPPORT_80_132_COLUMNS)
|
|
||||||
#include "termio.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#undef CRITICAL
|
#undef CRITICAL
|
||||||
#undef ERR
|
#undef ERR
|
||||||
|
@ -33,6 +30,7 @@ static int
|
||||||
_csi_arg_get(Eina_Unicode **ptr)
|
_csi_arg_get(Eina_Unicode **ptr)
|
||||||
{
|
{
|
||||||
Eina_Unicode *b = *ptr;
|
Eina_Unicode *b = *ptr;
|
||||||
|
int octal = 0;
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
|
|
||||||
while ((*b) && (!isdigit(*b))) b++;
|
while ((*b) && (!isdigit(*b))) b++;
|
||||||
|
@ -41,9 +39,11 @@ _csi_arg_get(Eina_Unicode **ptr)
|
||||||
*ptr = NULL;
|
*ptr = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (*b == '0') octal = 1;
|
||||||
while (isdigit(*b))
|
while (isdigit(*b))
|
||||||
{
|
{
|
||||||
sum *= 10;
|
if (octal) sum *= 8;
|
||||||
|
else sum *= 10;
|
||||||
sum += *b - '0';
|
sum += *b - '0';
|
||||||
b++;
|
b++;
|
||||||
}
|
}
|
||||||
|
@ -51,63 +51,6 @@ _csi_arg_get(Eina_Unicode **ptr)
|
||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_handle_cursor_control(Termpty *ty, Eina_Unicode *cc)
|
|
||||||
{
|
|
||||||
switch (*cc)
|
|
||||||
{
|
|
||||||
case 0x07: // BEL '\a' (bell)
|
|
||||||
if (ty->cb.bell.func) ty->cb.bell.func(ty->cb.bell.data);
|
|
||||||
ty->state.had_cr = 0;
|
|
||||||
return;
|
|
||||||
case 0x08: // BS '\b' (backspace)
|
|
||||||
DBG("->BS");
|
|
||||||
ty->state.wrapnext = 0;
|
|
||||||
ty->state.cx--;
|
|
||||||
if (ty->state.cx < 0) ty->state.cx = 0;
|
|
||||||
ty->state.had_cr = 0;
|
|
||||||
return;
|
|
||||||
case 0x09: // HT '\t' (horizontal tab)
|
|
||||||
DBG("->HT");
|
|
||||||
TERMPTY_SCREEN(ty, ty->state.cx, ty->state.cy).att.tab = 1;
|
|
||||||
ty->state.wrapnext = 0;
|
|
||||||
ty->state.cx += 8;
|
|
||||||
ty->state.cx = (ty->state.cx / 8) * 8;
|
|
||||||
if (ty->state.cx >= ty->w)
|
|
||||||
ty->state.cx = ty->w - 1;
|
|
||||||
ty->state.had_cr = 0;
|
|
||||||
return;
|
|
||||||
case 0x0a: // LF '\n' (new line)
|
|
||||||
case 0x0b: // VT '\v' (vertical tab)
|
|
||||||
case 0x0c: // FF '\f' (form feed)
|
|
||||||
DBG("->LF");
|
|
||||||
if (ty->state.had_cr)
|
|
||||||
{
|
|
||||||
TERMPTY_SCREEN(ty, ty->state.had_cr_x,
|
|
||||||
ty->state.had_cr_y).att.newline = 1;
|
|
||||||
}
|
|
||||||
ty->state.wrapnext = 0;
|
|
||||||
if (ty->state.crlf) ty->state.cx = 0;
|
|
||||||
ty->state.cy++;
|
|
||||||
_termpty_text_scroll_test(ty, EINA_TRUE);
|
|
||||||
ty->state.had_cr = 0;
|
|
||||||
return;
|
|
||||||
case 0x0d: // CR '\r' (carriage ret)
|
|
||||||
DBG("->CR");
|
|
||||||
if (ty->state.cx != 0)
|
|
||||||
{
|
|
||||||
ty->state.had_cr_x = ty->state.cx;
|
|
||||||
ty->state.had_cr_y = ty->state.cy;
|
|
||||||
}
|
|
||||||
ty->state.wrapnext = 0;
|
|
||||||
ty->state.cx = 0;
|
|
||||||
ty->state.had_cr = 1;
|
|
||||||
return;
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
_handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
{
|
{
|
||||||
|
@ -117,9 +60,8 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
|
|
||||||
cc = (Eina_Unicode *)c;
|
cc = (Eina_Unicode *)c;
|
||||||
b = buf;
|
b = buf;
|
||||||
while ((cc < ce) && (*cc <= '?'))
|
while ((cc < ce) && (*cc >= '0') && (*cc <= '?'))
|
||||||
{
|
{
|
||||||
_handle_cursor_control(ty, cc);
|
|
||||||
*b = *cc;
|
*b = *cc;
|
||||||
b++;
|
b++;
|
||||||
cc++;
|
cc++;
|
||||||
|
@ -127,7 +69,7 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
if (cc == ce) return 0;
|
if (cc == ce) return 0;
|
||||||
*b = 0;
|
*b = 0;
|
||||||
b = buf;
|
b = buf;
|
||||||
DBG(" CSI: '%c' args '%s'", *cc, (char *) buf);
|
// DBG(" CSI: '%c' args '%s'", *cc, buf);
|
||||||
switch (*cc)
|
switch (*cc)
|
||||||
{
|
{
|
||||||
case 'm': // color set
|
case 'm': // color set
|
||||||
|
@ -367,7 +309,7 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
for (i = 0; i < arg; i++)
|
for (i = 0; i < arg; i++)
|
||||||
{
|
{
|
||||||
ty->state.cy--;
|
ty->state.cy--;
|
||||||
_termpty_text_scroll_rev_test(ty, EINA_FALSE);
|
_termpty_text_scroll_rev_test(ty);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'B': // cursor down N
|
case 'B': // cursor down N
|
||||||
|
@ -377,7 +319,7 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
for (i = 0; i < arg; i++)
|
for (i = 0; i < arg; i++)
|
||||||
{
|
{
|
||||||
ty->state.cy++;
|
ty->state.cy++;
|
||||||
_termpty_text_scroll_test(ty, EINA_FALSE);
|
_termpty_text_scroll_test(ty);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'D': // cursor left N
|
case 'D': // cursor left N
|
||||||
|
@ -416,9 +358,9 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
arg--;
|
arg--;
|
||||||
if (arg < 0) arg = 0;
|
if (arg < 0) arg = 0;
|
||||||
else if (arg >= ty->h) arg = ty->h - 1;
|
else if (arg >= ty->h) arg = ty->h - 1;
|
||||||
|
if (b) ty->state.cy = arg;
|
||||||
if (b)
|
if (b)
|
||||||
{
|
{
|
||||||
ty->state.cy = arg;
|
|
||||||
arg = _csi_arg_get(&b);
|
arg = _csi_arg_get(&b);
|
||||||
if (arg < 1) arg = 1;
|
if (arg < 1) arg = 1;
|
||||||
arg--;
|
arg--;
|
||||||
|
@ -428,7 +370,6 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
else if (arg >= ty->w) arg = ty->w - 1;
|
else if (arg >= ty->w) arg = ty->w - 1;
|
||||||
if (b) ty->state.cx = arg;
|
if (b) ty->state.cx = arg;
|
||||||
}
|
}
|
||||||
ty->state.cy += ty->state.margin_top;
|
|
||||||
break;
|
break;
|
||||||
case 'G': // to column N
|
case 'G': // to column N
|
||||||
arg = _csi_arg_get(&b);
|
arg = _csi_arg_get(&b);
|
||||||
|
@ -472,12 +413,12 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
case 'S': // scroll up N lines
|
case 'S': // scroll up N lines
|
||||||
arg = _csi_arg_get(&b);
|
arg = _csi_arg_get(&b);
|
||||||
if (arg < 1) arg = 1;
|
if (arg < 1) arg = 1;
|
||||||
for (i = 0; i < arg; i++) _termpty_text_scroll(ty, EINA_FALSE);
|
for (i = 0; i < arg; i++) _termpty_text_scroll(ty);
|
||||||
break;
|
break;
|
||||||
case 'T': // scroll down N lines
|
case 'T': // scroll down N lines
|
||||||
arg = _csi_arg_get(&b);
|
arg = _csi_arg_get(&b);
|
||||||
if (arg < 1) arg = 1;
|
if (arg < 1) arg = 1;
|
||||||
for (i = 0; i < arg; i++) _termpty_text_scroll_rev(ty, EINA_FALSE);
|
for (i = 0; i < arg; i++) _termpty_text_scroll_rev(ty);
|
||||||
break;
|
break;
|
||||||
case 'M': // delete N lines - cy
|
case 'M': // delete N lines - cy
|
||||||
case 'L': // insert N lines - cy
|
case 'L': // insert N lines - cy
|
||||||
|
@ -501,8 +442,8 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
if (arg < 1) arg = 1;
|
if (arg < 1) arg = 1;
|
||||||
for (i = 0; i < arg; i++)
|
for (i = 0; i < arg; i++)
|
||||||
{
|
{
|
||||||
if (*cc == 'M') _termpty_text_scroll(ty, EINA_TRUE);
|
if (*cc == 'M') _termpty_text_scroll(ty);
|
||||||
else _termpty_text_scroll_rev(ty, EINA_TRUE);
|
else _termpty_text_scroll_rev(ty);
|
||||||
}
|
}
|
||||||
ty->state.scroll_y1 = sy1;
|
ty->state.scroll_y1 = sy1;
|
||||||
ty->state.scroll_y2 = sy2;
|
ty->state.scroll_y2 = sy2;
|
||||||
|
@ -607,29 +548,13 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
handled = 1;
|
handled = 1;
|
||||||
ty->state.kbd_lock = mode;
|
ty->state.kbd_lock = mode;
|
||||||
break;
|
break;
|
||||||
case 3: // 132 column mode… should we handle this?
|
case 3: // should we handle this?
|
||||||
handled = 1;
|
handled = 1;
|
||||||
#if defined(SUPPORT_80_132_COLUMNS)
|
ERR("XXX: 132 column mode %i", mode);
|
||||||
if (ty->state.att.is_80_132_mode_allowed)
|
|
||||||
{
|
|
||||||
/* ONLY FOR TESTING PURPOSE FTM */
|
|
||||||
Evas_Object *wn;
|
|
||||||
int w, h;
|
|
||||||
|
|
||||||
wn = termio_win_get(ty->obj);
|
|
||||||
elm_win_size_step_get(wn, &w, &h);
|
|
||||||
evas_object_resize(wn,
|
|
||||||
2 + (mode ? 132 : 80) * w,
|
|
||||||
2 + 24 * h);
|
|
||||||
termpty_resize(ty, mode ? 132 : 80, 24);
|
|
||||||
_termpty_reset_state(ty);
|
|
||||||
_termpty_clear_screen(ty, TERMPTY_CLR_ALL);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
handled = 1;
|
handled = 1;
|
||||||
ERR("TODO: set insert mode to %i", mode);
|
ERR("XXX: set insert mode to %i", mode);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
handled = 1;
|
handled = 1;
|
||||||
|
@ -637,24 +562,11 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
handled = 1;
|
handled = 1;
|
||||||
if (mode)
|
ERR("XXX: origin mode: cursor is at 0,0/cursor limited to screen/start point for line #'s depends on top margin");
|
||||||
{
|
|
||||||
ty->state.margin_top = ty->state.cy;
|
|
||||||
ty->state.cx = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ty->state.cx = 0;
|
|
||||||
ty->state.margin_top = 0;
|
|
||||||
}
|
|
||||||
DBG("XXX: origin mode (%d): cursor is at 0,0"
|
|
||||||
"cursor limited to screen/start point"
|
|
||||||
" for line #'s depends on top margin",
|
|
||||||
mode);
|
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
handled = 1;
|
handled = 1;
|
||||||
DBG("XXX: set wrap mode to %i", mode);
|
DBG("DDD: set wrap mode to %i", mode);
|
||||||
ty->state.wrap = mode;
|
ty->state.wrap = mode;
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
|
@ -704,17 +616,6 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
handled = 1;
|
handled = 1;
|
||||||
// INF("XXX: switch to tek window %i", mode);
|
// INF("XXX: switch to tek window %i", mode);
|
||||||
break;
|
break;
|
||||||
case 40:
|
|
||||||
handled = 1;
|
|
||||||
// INF("XXX: Allow 80 -> 132 Mode %i", mode);
|
|
||||||
#if defined(SUPPORT_80_132_COLUMNS)
|
|
||||||
ty->state.att.is_80_132_mode_allowed = mode;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
case 45: // ignore
|
|
||||||
handled = 1;
|
|
||||||
INF("TODO: Reverse-wraparound Mode");
|
|
||||||
break;
|
|
||||||
case 59: // ignore
|
case 59: // ignore
|
||||||
handled = 1;
|
handled = 1;
|
||||||
// INF("XXX: kanji terminal mode %i", mode);
|
// INF("XXX: kanji terminal mode %i", mode);
|
||||||
|
@ -1114,8 +1015,7 @@ _handle_esc_dcs(Termpty *ty __UNUSED__, const Eina_Unicode *c, const Eina_Unicod
|
||||||
{
|
{
|
||||||
const Eina_Unicode *cc, *be;
|
const Eina_Unicode *cc, *be;
|
||||||
Eina_Unicode buf[4096], *b;
|
Eina_Unicode buf[4096], *b;
|
||||||
int len;
|
|
||||||
|
|
||||||
cc = c;
|
cc = c;
|
||||||
b = buf;
|
b = buf;
|
||||||
be = buf + sizeof(buf) / sizeof(buf[0]);
|
be = buf + sizeof(buf) / sizeof(buf[0]);
|
||||||
|
@ -1130,12 +1030,11 @@ _handle_esc_dcs(Termpty *ty __UNUSED__, const Eina_Unicode *c, const Eina_Unicod
|
||||||
b++;
|
b++;
|
||||||
cc++;
|
cc++;
|
||||||
}
|
}
|
||||||
len = cc - c;
|
|
||||||
if (b == be)
|
if (b == be)
|
||||||
{
|
{
|
||||||
ERR("dcs parsing overflowed (binary data?)");
|
ERR("dcs parsing overflowed (binary data?)");
|
||||||
goto end;
|
return cc - c;
|
||||||
}
|
}
|
||||||
*b = 0;
|
*b = 0;
|
||||||
if ((*cc == ST) || (*cc == '\\')) cc++;
|
if ((*cc == ST) || (*cc == '\\')) cc++;
|
||||||
else return 0;
|
else return 0;
|
||||||
|
@ -1144,51 +1043,12 @@ _handle_esc_dcs(Termpty *ty __UNUSED__, const Eina_Unicode *c, const Eina_Unicod
|
||||||
case '+':
|
case '+':
|
||||||
/* TODO: Set request termcap/terminfo */
|
/* TODO: Set request termcap/terminfo */
|
||||||
break;
|
break;
|
||||||
case '$':
|
|
||||||
/* Request status string */
|
|
||||||
if (len > 1 && buf[1] != 'q')
|
|
||||||
{
|
|
||||||
ERR("invalid/unhandled dsc esc '$%c' (expected '$q')", buf[1]);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if (len < 4)
|
|
||||||
goto end;
|
|
||||||
switch (buf[2])
|
|
||||||
{
|
|
||||||
case '"':
|
|
||||||
if (buf[3] == 'p') /* DECSCL */
|
|
||||||
{
|
|
||||||
char bf[32];
|
|
||||||
snprintf(bf, sizeof(bf), "\033P1$r64;1\"p\033\\");
|
|
||||||
termpty_write(ty, bf, strlen(bf));
|
|
||||||
}
|
|
||||||
else if (buf[3] == 'q') /* DECSCA */
|
|
||||||
{
|
|
||||||
/* TODO: */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ERR("invalid/unhandled dsc esc '$q\"%c'", buf[3]);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'm': /* SGR */
|
|
||||||
/* TODO: */
|
|
||||||
case 'r': /* DECSTBM */
|
|
||||||
/* TODO: */
|
|
||||||
default:
|
|
||||||
ERR("unhandled dsc request status string '$q%c'", buf[2]);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
/* TODO */
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
// many others
|
// many others
|
||||||
ERR("unhandled dcs esc '%c'", buf[0]);
|
ERR("unhandled dcs esc '%c'", buf[0]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
end:
|
return cc - c;
|
||||||
return len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1225,18 +1085,18 @@ _handle_esc(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
case 'M': // move to prev line
|
case 'M': // move to prev line
|
||||||
ty->state.wrapnext = 0;
|
ty->state.wrapnext = 0;
|
||||||
ty->state.cy--;
|
ty->state.cy--;
|
||||||
_termpty_text_scroll_rev_test(ty, EINA_FALSE);
|
_termpty_text_scroll_rev_test(ty);
|
||||||
return 1;
|
return 1;
|
||||||
case 'D': // move to next line
|
case 'D': // move to next line
|
||||||
ty->state.wrapnext = 0;
|
ty->state.wrapnext = 0;
|
||||||
ty->state.cy++;
|
ty->state.cy++;
|
||||||
_termpty_text_scroll_test(ty, EINA_FALSE);
|
_termpty_text_scroll_test(ty);
|
||||||
return 1;
|
return 1;
|
||||||
case 'E': // add \n\r
|
case 'E': // add \n\r
|
||||||
ty->state.wrapnext = 0;
|
ty->state.wrapnext = 0;
|
||||||
ty->state.cx = 0;
|
ty->state.cx = 0;
|
||||||
ty->state.cy++;
|
ty->state.cy++;
|
||||||
_termpty_text_scroll_test(ty, EINA_FALSE);
|
_termpty_text_scroll_test(ty);
|
||||||
return 1;
|
return 1;
|
||||||
case 'Z': // same a 'ESC [ Pn c'
|
case 'Z': // same a 'ESC [ Pn c'
|
||||||
_term_txt_write(ty, "\033[?1;2C");
|
_term_txt_write(ty, "\033[?1;2C");
|
||||||
|
@ -1370,13 +1230,48 @@ _termpty_handle_seq(Termpty *ty, Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
return 1;
|
return 1;
|
||||||
*/
|
*/
|
||||||
case 0x07: // BEL '\a' (bell)
|
case 0x07: // BEL '\a' (bell)
|
||||||
|
if (ty->cb.bell.func) ty->cb.bell.func(ty->cb.bell.data);
|
||||||
|
ty->state.had_cr = 0;
|
||||||
|
return 1;
|
||||||
case 0x08: // BS '\b' (backspace)
|
case 0x08: // BS '\b' (backspace)
|
||||||
|
DBG("->BS");
|
||||||
|
ty->state.wrapnext = 0;
|
||||||
|
ty->state.cx--;
|
||||||
|
if (ty->state.cx < 0) ty->state.cx = 0;
|
||||||
|
ty->state.had_cr = 0;
|
||||||
|
return 1;
|
||||||
case 0x09: // HT '\t' (horizontal tab)
|
case 0x09: // HT '\t' (horizontal tab)
|
||||||
|
DBG("->HT");
|
||||||
|
TERMPTY_SCREEN(ty, ty->state.cx, ty->state.cy).att.tab = 1;
|
||||||
|
ty->state.wrapnext = 0;
|
||||||
|
ty->state.cx += 8;
|
||||||
|
ty->state.cx = (ty->state.cx / 8) * 8;
|
||||||
|
if (ty->state.cx >= ty->w)
|
||||||
|
ty->state.cx = ty->w - 1;
|
||||||
|
ty->state.had_cr = 0;
|
||||||
|
return 1;
|
||||||
case 0x0a: // LF '\n' (new line)
|
case 0x0a: // LF '\n' (new line)
|
||||||
case 0x0b: // VT '\v' (vertical tab)
|
case 0x0b: // VT '\v' (vertical tab)
|
||||||
case 0x0c: // FF '\f' (form feed)
|
case 0x0c: // FF '\f' (form feed)
|
||||||
|
DBG("->LF");
|
||||||
|
if (ty->state.had_cr)
|
||||||
|
TERMPTY_SCREEN(ty, ty->state.had_cr_x, ty->state.had_cr_y).att.newline = 1;
|
||||||
|
ty->state.wrapnext = 0;
|
||||||
|
if (ty->state.crlf) ty->state.cx = 0;
|
||||||
|
ty->state.cy++;
|
||||||
|
_termpty_text_scroll_test(ty);
|
||||||
|
ty->state.had_cr = 0;
|
||||||
|
return 1;
|
||||||
case 0x0d: // CR '\r' (carriage ret)
|
case 0x0d: // CR '\r' (carriage ret)
|
||||||
_handle_cursor_control(ty, c);
|
DBG("->CR");
|
||||||
|
if (ty->state.cx != 0)
|
||||||
|
{
|
||||||
|
ty->state.had_cr_x = ty->state.cx;
|
||||||
|
ty->state.had_cr_y = ty->state.cy;
|
||||||
|
}
|
||||||
|
ty->state.wrapnext = 0;
|
||||||
|
ty->state.cx = 0;
|
||||||
|
ty->state.had_cr = 1;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case 0x0e: // SO (shift out) // Maps G1 character set into GL.
|
case 0x0e: // SO (shift out) // Maps G1 character set into GL.
|
||||||
|
|
|
@ -55,7 +55,7 @@ termpty_text_save_top(Termpty *ty, Termcell *cells, ssize_t w_max)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_termpty_text_scroll(Termpty *ty, Eina_Bool clear)
|
_termpty_text_scroll(Termpty *ty)
|
||||||
{
|
{
|
||||||
Termcell *cells = NULL, *cells2;
|
Termcell *cells = NULL, *cells2;
|
||||||
int y, start_y = 0, end_y = ty->h - 1;
|
int y, start_y = 0, end_y = ty->h - 1;
|
||||||
|
@ -78,9 +78,6 @@ _termpty_text_scroll(Termpty *ty, Eina_Bool clear)
|
||||||
}
|
}
|
||||||
DBG("... scroll!!!!! [%i->%i]", start_y, end_y);
|
DBG("... scroll!!!!! [%i->%i]", start_y, end_y);
|
||||||
|
|
||||||
if (!clear)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (start_y == 0 && end_y == ty->h - 1)
|
if (start_y == 0 && end_y == ty->h - 1)
|
||||||
{
|
{
|
||||||
// screen is a circular buffer now
|
// screen is a circular buffer now
|
||||||
|
@ -89,7 +86,7 @@ _termpty_text_scroll(Termpty *ty, Eina_Bool clear)
|
||||||
|
|
||||||
ty->circular_offset++;
|
ty->circular_offset++;
|
||||||
if (ty->circular_offset >= ty->h)
|
if (ty->circular_offset >= ty->h)
|
||||||
ty->circular_offset = 0;
|
ty->circular_offset = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -105,7 +102,7 @@ _termpty_text_scroll(Termpty *ty, Eina_Bool clear)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_termpty_text_scroll_rev(Termpty *ty, Eina_Bool clear)
|
_termpty_text_scroll_rev(Termpty *ty)
|
||||||
{
|
{
|
||||||
Termcell *cells, *cells2 = NULL;
|
Termcell *cells, *cells2 = NULL;
|
||||||
int y, start_y = 0, end_y = ty->h - 1;
|
int y, start_y = 0, end_y = ty->h - 1;
|
||||||
|
@ -117,15 +114,12 @@ _termpty_text_scroll_rev(Termpty *ty, Eina_Bool clear)
|
||||||
}
|
}
|
||||||
DBG("... scroll rev!!!!! [%i->%i]", start_y, end_y);
|
DBG("... scroll rev!!!!! [%i->%i]", start_y, end_y);
|
||||||
|
|
||||||
if (!clear)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (start_y == 0 && end_y == ty->h - 1)
|
if (start_y == 0 && end_y == ty->h - 1)
|
||||||
{
|
{
|
||||||
// screen is a circular buffer now
|
// screen is a circular buffer now
|
||||||
ty->circular_offset--;
|
ty->circular_offset--;
|
||||||
if (ty->circular_offset < 0)
|
if (ty->circular_offset < 0)
|
||||||
ty->circular_offset = ty->h - 1;
|
ty->circular_offset = ty->h - 1;
|
||||||
|
|
||||||
cells = &(ty->screen[ty->circular_offset * ty->w]);
|
cells = &(ty->screen[ty->circular_offset * ty->w]);
|
||||||
_text_clear(ty, cells, ty->w, 0, EINA_TRUE);
|
_text_clear(ty, cells, ty->w, 0, EINA_TRUE);
|
||||||
|
@ -145,27 +139,27 @@ _termpty_text_scroll_rev(Termpty *ty, Eina_Bool clear)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_termpty_text_scroll_test(Termpty *ty, Eina_Bool clear)
|
_termpty_text_scroll_test(Termpty *ty)
|
||||||
{
|
{
|
||||||
int e = ty->h;
|
int e = ty->h;
|
||||||
|
|
||||||
if (ty->state.scroll_y2 != 0) e = ty->state.scroll_y2;
|
if (ty->state.scroll_y2 != 0) e = ty->state.scroll_y2;
|
||||||
if (ty->state.cy >= e)
|
if (ty->state.cy >= e)
|
||||||
{
|
{
|
||||||
_termpty_text_scroll(ty, clear);
|
_termpty_text_scroll(ty);
|
||||||
ty->state.cy = e - 1;
|
ty->state.cy = e - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_termpty_text_scroll_rev_test(Termpty *ty, Eina_Bool clear)
|
_termpty_text_scroll_rev_test(Termpty *ty)
|
||||||
{
|
{
|
||||||
int b = 0;
|
int b = 0;
|
||||||
|
|
||||||
if (ty->state.scroll_y1 != 0) b = ty->state.scroll_y1;
|
if (ty->state.scroll_y2 != 0) b = ty->state.scroll_y1;
|
||||||
if (ty->state.cy < b)
|
if (ty->state.cy < b)
|
||||||
{
|
{
|
||||||
_termpty_text_scroll_rev(ty, clear);
|
_termpty_text_scroll_rev(ty);
|
||||||
ty->state.cy = b;
|
ty->state.cy = b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,7 +181,7 @@ _termpty_text_append(Termpty *ty, const Eina_Unicode *codepoints, int len)
|
||||||
ty->state.wrapnext = 0;
|
ty->state.wrapnext = 0;
|
||||||
ty->state.cx = 0;
|
ty->state.cx = 0;
|
||||||
ty->state.cy++;
|
ty->state.cy++;
|
||||||
_termpty_text_scroll_test(ty, EINA_TRUE);
|
_termpty_text_scroll_test(ty);
|
||||||
cells = &(TERMPTY_SCREEN(ty, 0, ty->state.cy));
|
cells = &(TERMPTY_SCREEN(ty, 0, ty->state.cy));
|
||||||
}
|
}
|
||||||
if (ty->state.insert)
|
if (ty->state.insert)
|
||||||
|
|
|
@ -7,10 +7,10 @@ typedef enum _Termpty_Clear
|
||||||
|
|
||||||
void termpty_text_save_top(Termpty *ty, Termcell *cells, ssize_t w_max);
|
void termpty_text_save_top(Termpty *ty, Termcell *cells, ssize_t w_max);
|
||||||
void _termpty_text_copy(Termpty *ty, Termcell *cells, Termcell *dest, int count);
|
void _termpty_text_copy(Termpty *ty, Termcell *cells, Termcell *dest, int count);
|
||||||
void _termpty_text_scroll(Termpty *ty, Eina_Bool clear);
|
void _termpty_text_scroll(Termpty *ty);
|
||||||
void _termpty_text_scroll_rev(Termpty *ty, Eina_Bool clear);
|
void _termpty_text_scroll_rev(Termpty *ty);
|
||||||
void _termpty_text_scroll_test(Termpty *ty, Eina_Bool clear);
|
void _termpty_text_scroll_test(Termpty *ty);
|
||||||
void _termpty_text_scroll_rev_test(Termpty *ty, Eina_Bool clear);
|
void _termpty_text_scroll_rev_test(Termpty *ty);
|
||||||
void _termpty_text_append(Termpty *ty, const Eina_Unicode *codepoints, int len);
|
void _termpty_text_append(Termpty *ty, const Eina_Unicode *codepoints, int len);
|
||||||
void _termpty_clear_line(Termpty *ty, Termpty_Clear mode, int limit);
|
void _termpty_clear_line(Termpty *ty, Termpty_Clear mode, int limit);
|
||||||
void _termpty_clear_screen(Termpty *ty, Termpty_Clear mode);
|
void _termpty_clear_screen(Termpty *ty, Termpty_Clear mode);
|
||||||
|
|
Loading…
Reference in New Issue