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:
Boris Faure 2013-05-02 10:24:57 +02:00
parent 33b1854eae
commit b6d2b1b4ad
6 changed files with 76 additions and 205 deletions

View File

@ -4282,16 +4282,6 @@ termio_textgrid_get(Evas_Object *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
_smart_mirror_del(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *info __UNUSED__)
{

View File

@ -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);
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_win_get(Evas_Object *obj);
Evas_Object *termio_mirror_add(Evas_Object *obj);
const char *termio_title_get(Evas_Object *obj);
const char *termio_icon_name_get(Evas_Object *obj);

View File

@ -36,9 +36,6 @@ typedef struct _Termexp Termexp;
//#define SUPPORT_ITALIC 1
#define SUPPORT_DBLWIDTH 1
// Only for testing purpose
//#define SUPPORT_80_132_COLUMNS 1
struct _Termatt
{
unsigned char fg, bg;
@ -63,9 +60,6 @@ struct _Termatt
unsigned short autowrapped : 1;
unsigned short newline : 1;
unsigned short tab : 1;
#if defined(SUPPORT_80_132_COLUMNS)
unsigned short is_80_132_mode_allowed : 1;
#endif
};
struct _Termstate
@ -77,7 +71,6 @@ struct _Termstate
unsigned char chset[4];
int scroll_y1, scroll_y2;
int had_cr_x, had_cr_y;
int margin_top; // soon, more to come...
unsigned int multibyte : 1;
unsigned int alt_kp : 1;
unsigned int insert : 1;

View File

@ -5,9 +5,6 @@
#include "termptyesc.h"
#include "termptyops.h"
#include "termptyext.h"
#if defined(SUPPORT_80_132_COLUMNS)
#include "termio.h"
#endif
#undef CRITICAL
#undef ERR
@ -33,6 +30,7 @@ static int
_csi_arg_get(Eina_Unicode **ptr)
{
Eina_Unicode *b = *ptr;
int octal = 0;
int sum = 0;
while ((*b) && (!isdigit(*b))) b++;
@ -41,9 +39,11 @@ _csi_arg_get(Eina_Unicode **ptr)
*ptr = NULL;
return 0;
}
if (*b == '0') octal = 1;
while (isdigit(*b))
{
sum *= 10;
if (octal) sum *= 8;
else sum *= 10;
sum += *b - '0';
b++;
}
@ -51,63 +51,6 @@ _csi_arg_get(Eina_Unicode **ptr)
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
_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;
b = buf;
while ((cc < ce) && (*cc <= '?'))
while ((cc < ce) && (*cc >= '0') && (*cc <= '?'))
{
_handle_cursor_control(ty, cc);
*b = *cc;
b++;
cc++;
@ -127,7 +69,7 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
if (cc == ce) return 0;
*b = 0;
b = buf;
DBG(" CSI: '%c' args '%s'", *cc, (char *) buf);
// DBG(" CSI: '%c' args '%s'", *cc, buf);
switch (*cc)
{
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++)
{
ty->state.cy--;
_termpty_text_scroll_rev_test(ty, EINA_FALSE);
_termpty_text_scroll_rev_test(ty);
}
break;
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++)
{
ty->state.cy++;
_termpty_text_scroll_test(ty, EINA_FALSE);
_termpty_text_scroll_test(ty);
}
break;
case 'D': // cursor left N
@ -416,9 +358,9 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
arg--;
if (arg < 0) arg = 0;
else if (arg >= ty->h) arg = ty->h - 1;
if (b) ty->state.cy = arg;
if (b)
{
ty->state.cy = arg;
arg = _csi_arg_get(&b);
if (arg < 1) arg = 1;
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;
if (b) ty->state.cx = arg;
}
ty->state.cy += ty->state.margin_top;
break;
case 'G': // to column N
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
arg = _csi_arg_get(&b);
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;
case 'T': // scroll down N lines
arg = _csi_arg_get(&b);
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;
case 'M': // delete 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;
for (i = 0; i < arg; i++)
{
if (*cc == 'M') _termpty_text_scroll(ty, EINA_TRUE);
else _termpty_text_scroll_rev(ty, EINA_TRUE);
if (*cc == 'M') _termpty_text_scroll(ty);
else _termpty_text_scroll_rev(ty);
}
ty->state.scroll_y1 = sy1;
ty->state.scroll_y2 = sy2;
@ -607,29 +548,13 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
handled = 1;
ty->state.kbd_lock = mode;
break;
case 3: // 132 column mode… should we handle this?
case 3: // should we handle this?
handled = 1;
#if defined(SUPPORT_80_132_COLUMNS)
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
ERR("XXX: 132 column mode %i", mode);
break;
case 4:
handled = 1;
ERR("TODO: set insert mode to %i", mode);
ERR("XXX: set insert mode to %i", mode);
break;
case 5:
handled = 1;
@ -637,24 +562,11 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
break;
case 6:
handled = 1;
if (mode)
{
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);
ERR("XXX: origin mode: cursor is at 0,0/cursor limited to screen/start point for line #'s depends on top margin");
break;
case 7:
handled = 1;
DBG("XXX: set wrap mode to %i", mode);
DBG("DDD: set wrap mode to %i", mode);
ty->state.wrap = mode;
break;
case 8:
@ -704,17 +616,6 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
handled = 1;
// INF("XXX: switch to tek window %i", mode);
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
handled = 1;
// 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;
Eina_Unicode buf[4096], *b;
int len;
cc = c;
b = buf;
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++;
cc++;
}
len = cc - c;
if (b == be)
{
{
ERR("dcs parsing overflowed (binary data?)");
goto end;
}
return cc - c;
}
*b = 0;
if ((*cc == ST) || (*cc == '\\')) cc++;
else return 0;
@ -1144,51 +1043,12 @@ _handle_esc_dcs(Termpty *ty __UNUSED__, const Eina_Unicode *c, const Eina_Unicod
case '+':
/* TODO: Set request termcap/terminfo */
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:
// many others
ERR("unhandled dcs esc '%c'", buf[0]);
break;
}
end:
return len;
return cc - c;
}
static int
@ -1225,18 +1085,18 @@ _handle_esc(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
case 'M': // move to prev line
ty->state.wrapnext = 0;
ty->state.cy--;
_termpty_text_scroll_rev_test(ty, EINA_FALSE);
_termpty_text_scroll_rev_test(ty);
return 1;
case 'D': // move to next line
ty->state.wrapnext = 0;
ty->state.cy++;
_termpty_text_scroll_test(ty, EINA_FALSE);
_termpty_text_scroll_test(ty);
return 1;
case 'E': // add \n\r
ty->state.wrapnext = 0;
ty->state.cx = 0;
ty->state.cy++;
_termpty_text_scroll_test(ty, EINA_FALSE);
_termpty_text_scroll_test(ty);
return 1;
case 'Z': // same a 'ESC [ Pn c'
_term_txt_write(ty, "\033[?1;2C");
@ -1370,13 +1230,48 @@ _termpty_handle_seq(Termpty *ty, Eina_Unicode *c, Eina_Unicode *ce)
return 1;
*/
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)
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)
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 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);
ty->state.had_cr = 0;
return 1;
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;
case 0x0e: // SO (shift out) // Maps G1 character set into GL.

View File

@ -55,7 +55,7 @@ termpty_text_save_top(Termpty *ty, Termcell *cells, ssize_t w_max)
}
void
_termpty_text_scroll(Termpty *ty, Eina_Bool clear)
_termpty_text_scroll(Termpty *ty)
{
Termcell *cells = NULL, *cells2;
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);
if (!clear)
return;
if (start_y == 0 && end_y == ty->h - 1)
{
// screen is a circular buffer now
@ -89,7 +86,7 @@ _termpty_text_scroll(Termpty *ty, Eina_Bool clear)
ty->circular_offset++;
if (ty->circular_offset >= ty->h)
ty->circular_offset = 0;
ty->circular_offset = 0;
}
else
{
@ -105,7 +102,7 @@ _termpty_text_scroll(Termpty *ty, Eina_Bool clear)
}
void
_termpty_text_scroll_rev(Termpty *ty, Eina_Bool clear)
_termpty_text_scroll_rev(Termpty *ty)
{
Termcell *cells, *cells2 = NULL;
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);
if (!clear)
return;
if (start_y == 0 && end_y == ty->h - 1)
{
// screen is a circular buffer now
ty->circular_offset--;
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]);
_text_clear(ty, cells, ty->w, 0, EINA_TRUE);
@ -145,27 +139,27 @@ _termpty_text_scroll_rev(Termpty *ty, Eina_Bool clear)
}
void
_termpty_text_scroll_test(Termpty *ty, Eina_Bool clear)
_termpty_text_scroll_test(Termpty *ty)
{
int e = ty->h;
if (ty->state.scroll_y2 != 0) e = ty->state.scroll_y2;
if (ty->state.cy >= e)
{
_termpty_text_scroll(ty, clear);
_termpty_text_scroll(ty);
ty->state.cy = e - 1;
}
}
void
_termpty_text_scroll_rev_test(Termpty *ty, Eina_Bool clear)
_termpty_text_scroll_rev_test(Termpty *ty)
{
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)
{
_termpty_text_scroll_rev(ty, clear);
_termpty_text_scroll_rev(ty);
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.cx = 0;
ty->state.cy++;
_termpty_text_scroll_test(ty, EINA_TRUE);
_termpty_text_scroll_test(ty);
cells = &(TERMPTY_SCREEN(ty, 0, ty->state.cy));
}
if (ty->state.insert)

View File

@ -7,10 +7,10 @@ typedef enum _Termpty_Clear
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_scroll(Termpty *ty, Eina_Bool clear);
void _termpty_text_scroll_rev(Termpty *ty, Eina_Bool clear);
void _termpty_text_scroll_test(Termpty *ty, Eina_Bool clear);
void _termpty_text_scroll_rev_test(Termpty *ty, Eina_Bool clear);
void _termpty_text_scroll(Termpty *ty);
void _termpty_text_scroll_rev(Termpty *ty);
void _termpty_text_scroll_test(Termpty *ty);
void _termpty_text_scroll_rev_test(Termpty *ty);
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_screen(Termpty *ty, Termpty_Clear mode);