begin on custom command infra, fix home/end for emacs, and fix about
dialog to restart properly and dismiss layer to be above about. SVN revision: 73085
This commit is contained in:
parent
5afd73501f
commit
689e2c2dd7
|
@ -322,10 +322,6 @@ collections {
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// overlayed options and controls
|
// overlayed options and controls
|
||||||
part { name: "terminology.dismiss"; type: SWALLOW;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "terminology.about"; type: SWALLOW;
|
part { name: "terminology.about"; type: SWALLOW;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
|
@ -360,6 +356,13 @@ collections {
|
||||||
target: "terminology.about";
|
target: "terminology.about";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// swallow to hold invisile rect to click on to dismiss things
|
||||||
|
part { name: "terminology.dismiss"; type: SWALLOW;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// overlayed options and controls
|
// overlayed options and controls
|
||||||
part { name: "terminology.options"; type: SWALLOW;
|
part { name: "terminology.options"; type: SWALLOW;
|
||||||
|
@ -893,9 +896,20 @@ collections {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
programs {
|
programs {
|
||||||
|
program { name: "begin";
|
||||||
|
signal: "begin";
|
||||||
|
source: "terminology";
|
||||||
|
action: ACTION_STOP;
|
||||||
|
target: "show";
|
||||||
|
target: "show2";
|
||||||
|
after: "begin2";
|
||||||
|
}
|
||||||
|
program { name: "begin2";
|
||||||
|
action: STATE_SET "default" 0.0;
|
||||||
|
target: "terminology.text";
|
||||||
|
after: "show";
|
||||||
|
}
|
||||||
program { name: "show";
|
program { name: "show";
|
||||||
signal: "show";
|
|
||||||
source: "";
|
|
||||||
action: STATE_SET "up" 0.0;
|
action: STATE_SET "up" 0.0;
|
||||||
transition: LINEAR 45.0;
|
transition: LINEAR 45.0;
|
||||||
target: "terminology.text";
|
target: "terminology.text";
|
||||||
|
|
|
@ -97,6 +97,7 @@ about_toggle(Evas_Object *win, Evas_Object *bg, Evas_Object *term)
|
||||||
_cb_mouse_down, term);
|
_cb_mouse_down, term);
|
||||||
|
|
||||||
edje_object_signal_emit(bg, "about,show", "terminology");
|
edje_object_signal_emit(bg, "about,show", "terminology");
|
||||||
|
elm_object_signal_emit(ab_layout, "begin" ,"terminology");
|
||||||
ab_out = EINA_TRUE;
|
ab_out = EINA_TRUE;
|
||||||
elm_object_focus_set(ab_layout, EINA_TRUE);
|
elm_object_focus_set(ab_layout, EINA_TRUE);
|
||||||
if (ab_del_timer)
|
if (ab_del_timer)
|
||||||
|
|
|
@ -34,8 +34,11 @@ static const Keyout appcur_keyout[] =
|
||||||
KEY("Right", "\033OC"),
|
KEY("Right", "\033OC"),
|
||||||
KEY("Up", "\033OA"),
|
KEY("Up", "\033OA"),
|
||||||
KEY("Down", "\033OB"),
|
KEY("Down", "\033OB"),
|
||||||
KEY("Home", "\033[7~"),
|
KEY("Home", "\033OH"),
|
||||||
KEY("End", "\033[8~"),
|
KEY("End", "\033OF"),
|
||||||
|
//// why did i change these?
|
||||||
|
// KEY("Home", "\033[7~"),
|
||||||
|
// KEY("End", "\033[8~"),
|
||||||
KEY("F1", "\033OP"),
|
KEY("F1", "\033OP"),
|
||||||
KEY("F2", "\033OQ"),
|
KEY("F2", "\033OQ"),
|
||||||
KEY("F3", "\033OR"),
|
KEY("F3", "\033OR"),
|
||||||
|
@ -266,6 +269,7 @@ keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev)
|
||||||
|
|
||||||
if (ty->state.appcursor)
|
if (ty->state.appcursor)
|
||||||
{
|
{
|
||||||
|
printf("appcur...\n");
|
||||||
if (_key_try(ty, appcur_keyout, ev)) return;
|
if (_key_try(ty, appcur_keyout, ev)) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1614,6 +1614,16 @@ _smart_pty_bell(void *data)
|
||||||
evas_object_smart_callback_call(data, "bell", NULL);
|
evas_object_smart_callback_call(data, "bell", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_smart_pty_command(void *data)
|
||||||
|
{
|
||||||
|
Evas_Object *obj = data;
|
||||||
|
Termio *sd;
|
||||||
|
sd = evas_object_smart_data_get(obj);
|
||||||
|
if (!sd) return;
|
||||||
|
printf("COMMAND: '%s'\n", sd->pty->cur_cmd);
|
||||||
|
}
|
||||||
|
|
||||||
Evas_Object *
|
Evas_Object *
|
||||||
termio_add(Evas_Object *parent, Config *config, const char *cmd, int w, int h)
|
termio_add(Evas_Object *parent, Config *config, const char *cmd, int w, int h)
|
||||||
{
|
{
|
||||||
|
@ -1649,6 +1659,8 @@ termio_add(Evas_Object *parent, Config *config, const char *cmd, int w, int h)
|
||||||
sd->pty->cb.exited.data = obj;
|
sd->pty->cb.exited.data = obj;
|
||||||
sd->pty->cb.bell.func = _smart_pty_bell;
|
sd->pty->cb.bell.func = _smart_pty_bell;
|
||||||
sd->pty->cb.bell.data = obj;
|
sd->pty->cb.bell.data = obj;
|
||||||
|
sd->pty->cb.command.func = _smart_pty_command;
|
||||||
|
sd->pty->cb.command.data = obj;
|
||||||
_smart_size(obj, w, h, EINA_FALSE);
|
_smart_size(obj, w, h, EINA_FALSE);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
|
@ -649,9 +649,9 @@ _cursor_copy(Termstate *state, Termstate *dest)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_csi_arg_get(char **ptr)
|
_csi_arg_get(Eina_Unicode **ptr)
|
||||||
{
|
{
|
||||||
char *b = *ptr;
|
Eina_Unicode *b = *ptr;
|
||||||
int octal = 0;
|
int octal = 0;
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
|
|
||||||
|
@ -674,12 +674,13 @@ _csi_arg_get(char **ptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_handle_esc_csi(Termpty *ty, const int *c, int *ce)
|
_handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
{
|
{
|
||||||
int *cc, arg, first = 1, i;
|
Eina_Unicode *cc;
|
||||||
char buf[4096], *b;
|
int arg, first = 1, i;
|
||||||
|
Eina_Unicode buf[4096], *b;
|
||||||
|
|
||||||
cc = (int *)c;
|
cc = (Eina_Unicode *)c;
|
||||||
b = buf;
|
b = buf;
|
||||||
while ((cc < ce) && (*cc >= '0') && (*cc <= '?'))
|
while ((cc < ce) && (*cc >= '0') && (*cc <= '?'))
|
||||||
{
|
{
|
||||||
|
@ -693,7 +694,7 @@ _handle_esc_csi(Termpty *ty, const int *c, int *ce)
|
||||||
if (cc == ce) return -2;
|
if (cc == ce) return -2;
|
||||||
*b = 0;
|
*b = 0;
|
||||||
b = buf;
|
b = buf;
|
||||||
DBG(" CSI: '%c' args '%s'", *cc, buf);
|
// DBG(" CSI: '%c' args '%s'", *cc, buf);
|
||||||
switch (*cc)
|
switch (*cc)
|
||||||
{
|
{
|
||||||
case 'm': // color set
|
case 'm': // color set
|
||||||
|
@ -1383,7 +1384,7 @@ _handle_esc_csi(Termpty *ty, const int *c, int *ce)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!handled) ERR("unhandled '%c' : '%s'", *cc, buf);
|
if (!handled) ERR("unhandled '%c'", *cc);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
|
@ -1454,7 +1455,7 @@ _handle_esc_csi(Termpty *ty, const int *c, int *ce)
|
||||||
break;
|
break;
|
||||||
*/
|
*/
|
||||||
default:
|
default:
|
||||||
ERR("unhandled CSI '%c' (0x%02x), buf='%s'", *cc, *cc, buf);
|
ERR("unhandled CSI '%c' (0x%02x)", *cc, *cc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
cc++;
|
cc++;
|
||||||
|
@ -1462,12 +1463,14 @@ _handle_esc_csi(Termpty *ty, const int *c, int *ce)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_handle_esc_xterm(Termpty *ty, const int *c, int *ce)
|
_handle_esc_xterm(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
{
|
{
|
||||||
int *cc;
|
Eina_Unicode *cc;
|
||||||
char buf[4096], *b;
|
Eina_Unicode buf[4096], *b;
|
||||||
|
char *s;
|
||||||
cc = (int *)c;
|
int len = 0;
|
||||||
|
|
||||||
|
cc = (Eina_Unicode *)c;
|
||||||
b = buf;
|
b = buf;
|
||||||
while ((cc < ce) && (*cc >= ' ') && (*cc < 0x7f))
|
while ((cc < ce) && (*cc >= ' ') && (*cc < 0x7f))
|
||||||
{
|
{
|
||||||
|
@ -1482,26 +1485,51 @@ _handle_esc_xterm(Termpty *ty, const int *c, int *ce)
|
||||||
{
|
{
|
||||||
case '0':
|
case '0':
|
||||||
// XXX: title + name - callback
|
// XXX: title + name - callback
|
||||||
b = &(buf[2]);
|
s = eina_unicode_unicode_to_utf8(&(buf[2]), &len);
|
||||||
if (ty->prop.title) eina_stringshare_del(ty->prop.title);
|
if (ty->prop.title) eina_stringshare_del(ty->prop.title);
|
||||||
if (ty->prop.icon) eina_stringshare_del(ty->prop.icon);
|
if (ty->prop.icon) eina_stringshare_del(ty->prop.icon);
|
||||||
ty->prop.title = eina_stringshare_add(b);
|
if (b)
|
||||||
ty->prop.icon = eina_stringshare_add(b);
|
{
|
||||||
|
ty->prop.title = eina_stringshare_add(s);
|
||||||
|
ty->prop.icon = eina_stringshare_add(s);
|
||||||
|
free(s);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ty->prop.title = NULL;
|
||||||
|
ty->prop.icon = NULL;
|
||||||
|
}
|
||||||
if (ty->cb.set_title.func) ty->cb.set_title.func(ty->cb.set_title.data);
|
if (ty->cb.set_title.func) ty->cb.set_title.func(ty->cb.set_title.data);
|
||||||
if (ty->cb.set_icon.func) ty->cb.set_title.func(ty->cb.set_icon.data);
|
if (ty->cb.set_icon.func) ty->cb.set_title.func(ty->cb.set_icon.data);
|
||||||
break;
|
break;
|
||||||
case '1':
|
case '1':
|
||||||
// XXX: icon name - callback
|
// XXX: icon name - callback
|
||||||
b = &(buf[2]);
|
s = eina_unicode_unicode_to_utf8(&(buf[2]), &len);
|
||||||
if (ty->prop.icon) eina_stringshare_del(ty->prop.icon);
|
if (ty->prop.icon) eina_stringshare_del(ty->prop.icon);
|
||||||
ty->prop.icon = eina_stringshare_add(b);
|
if (s)
|
||||||
|
{
|
||||||
|
ty->prop.icon = eina_stringshare_add(s);
|
||||||
|
free(s);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ty->prop.icon = NULL;
|
||||||
|
}
|
||||||
if (ty->cb.set_icon.func) ty->cb.set_title.func(ty->cb.set_icon.data);
|
if (ty->cb.set_icon.func) ty->cb.set_title.func(ty->cb.set_icon.data);
|
||||||
break;
|
break;
|
||||||
case '2':
|
case '2':
|
||||||
// XXX: title - callback
|
// XXX: title - callback
|
||||||
b = &(buf[2]);
|
s = eina_unicode_unicode_to_utf8(&(buf[2]), &len);
|
||||||
if (ty->prop.title) eina_stringshare_del(ty->prop.title);
|
if (ty->prop.title) eina_stringshare_del(ty->prop.title);
|
||||||
ty->prop.title = eina_stringshare_add(b);
|
if (s)
|
||||||
|
{
|
||||||
|
ty->prop.title = eina_stringshare_add(s);
|
||||||
|
free(s);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ty->prop.title = NULL;
|
||||||
|
}
|
||||||
if (ty->cb.set_title.func) ty->cb.set_title.func(ty->cb.set_title.data);
|
if (ty->cb.set_title.func) ty->cb.set_title.func(ty->cb.set_title.data);
|
||||||
break;
|
break;
|
||||||
case '4':
|
case '4':
|
||||||
|
@ -1510,14 +1538,42 @@ _handle_esc_xterm(Termpty *ty, const int *c, int *ce)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// many others
|
// many others
|
||||||
ERR("unhandled xterm esc '%c' -> '%s'", buf[0], buf);
|
ERR("unhandled xterm esc '%c'", buf[0]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return cc - c;
|
return cc - c;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_handle_esc(Termpty *ty, const int *c, int *ce)
|
_handle_esc_terminology(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
|
{
|
||||||
|
Eina_Unicode *cc;
|
||||||
|
Eina_Unicode buf[4096], *b;
|
||||||
|
char *s;
|
||||||
|
int slen = 0;
|
||||||
|
|
||||||
|
cc = (Eina_Unicode *)c;
|
||||||
|
b = buf;
|
||||||
|
while ((cc < ce) && (*cc != 0x0))
|
||||||
|
{
|
||||||
|
*b = *cc;
|
||||||
|
b++;
|
||||||
|
cc++;
|
||||||
|
}
|
||||||
|
*b = 0;
|
||||||
|
if (*cc == 0x0) cc++;
|
||||||
|
else return -2;
|
||||||
|
// commands are stored in the buffer, 0 bytes not allowd (end marker)
|
||||||
|
s = eina_unicode_unicode_to_utf8(buf, &slen);
|
||||||
|
ty->cur_cmd = s;
|
||||||
|
if (ty->cb.command.func) ty->cb.command.func(ty->cb.command.data);
|
||||||
|
ty->cur_cmd = NULL;
|
||||||
|
if (s) free(s);
|
||||||
|
return cc - c;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_handle_esc(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
{
|
{
|
||||||
if ((ce - c) < 2) return 0;
|
if ((ce - c) < 2) return 0;
|
||||||
DBG("ESC: '%c'", c[1]);
|
DBG("ESC: '%c'", c[1]);
|
||||||
|
@ -1527,6 +1583,8 @@ _handle_esc(Termpty *ty, const int *c, int *ce)
|
||||||
return 2 + _handle_esc_csi(ty, c + 2, ce);
|
return 2 + _handle_esc_csi(ty, c + 2, ce);
|
||||||
case ']':
|
case ']':
|
||||||
return 2 + _handle_esc_xterm(ty, c + 2, ce);
|
return 2 + _handle_esc_xterm(ty, c + 2, ce);
|
||||||
|
case '}':
|
||||||
|
return 2 + _handle_esc_terminology(ty, c + 2, ce);
|
||||||
case '=': // set alternate keypad mode
|
case '=': // set alternate keypad mode
|
||||||
ty->state.alt_kp = 1;
|
ty->state.alt_kp = 1;
|
||||||
return 2;
|
return 2;
|
||||||
|
@ -1626,9 +1684,10 @@ _handle_esc(Termpty *ty, const int *c, int *ce)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_handle_seq(Termpty *ty, const int *c, int *ce)
|
_handle_seq(Termpty *ty, Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
{
|
{
|
||||||
int *cc, len = 0;
|
Eina_Unicode *cc;
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
printf(" B: ");
|
printf(" B: ");
|
||||||
|
@ -1794,9 +1853,10 @@ _handle_seq(Termpty *ty, const int *c, int *ce)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_handle_buf(Termpty *ty, const int *codepoints, int len)
|
_handle_buf(Termpty *ty, const Eina_Unicode *codepoints, int len)
|
||||||
{
|
{
|
||||||
int *c, *ce, n, *b, bytes;
|
Eina_Unicode *c, *ce, *b;
|
||||||
|
int n, bytes;
|
||||||
|
|
||||||
c = (int *)codepoints;
|
c = (int *)codepoints;
|
||||||
ce = &(c[len]);
|
ce = &(c[len]);
|
||||||
|
@ -1810,7 +1870,7 @@ _handle_buf(Termpty *ty, const int *codepoints, int len)
|
||||||
ERR("memerr");
|
ERR("memerr");
|
||||||
}
|
}
|
||||||
INF("realloc add %i + %i", (int)(ty->buflen * sizeof(int)), (int)(len * sizeof(int)));
|
INF("realloc add %i + %i", (int)(ty->buflen * sizeof(int)), (int)(len * sizeof(int)));
|
||||||
bytes = len * sizeof(int);
|
bytes = len * sizeof(Eina_Unicode);
|
||||||
memcpy(&(b[ty->buflen]), codepoints, bytes);
|
memcpy(&(b[ty->buflen]), codepoints, bytes);
|
||||||
ty->buf = b;
|
ty->buf = b;
|
||||||
ty->buflen += len;
|
ty->buflen += len;
|
||||||
|
@ -1822,11 +1882,11 @@ _handle_buf(Termpty *ty, const int *codepoints, int len)
|
||||||
n = _handle_seq(ty, c, ce);
|
n = _handle_seq(ty, c, ce);
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
int *tmp = ty->buf;
|
Eina_Unicode *tmp = ty->buf;
|
||||||
ty->buf = NULL;
|
ty->buf = NULL;
|
||||||
ty->buflen = 0;
|
ty->buflen = 0;
|
||||||
bytes = ((char *)ce - (char *)c) + sizeof(int);
|
bytes = ((char *)ce - (char *)c) + sizeof(Eina_Unicode);
|
||||||
INF("malloc til %i", (int)(bytes - sizeof(int)));
|
INF("malloc til %i", (int)(bytes - sizeof(Eina_Unicode)));
|
||||||
ty->buf = malloc(bytes);
|
ty->buf = malloc(bytes);
|
||||||
if (!ty->buf)
|
if (!ty->buf)
|
||||||
{
|
{
|
||||||
|
@ -1834,7 +1894,7 @@ _handle_buf(Termpty *ty, const int *codepoints, int len)
|
||||||
}
|
}
|
||||||
bytes = (char *)ce - (char *)c;
|
bytes = (char *)ce - (char *)c;
|
||||||
memcpy(ty->buf, c, bytes);
|
memcpy(ty->buf, c, bytes);
|
||||||
ty->buflen = bytes / sizeof(int);
|
ty->buflen = bytes / sizeof(Eina_Unicode);
|
||||||
ty->buf[ty->buflen] = 0;
|
ty->buf[ty->buflen] = 0;
|
||||||
free(tmp);
|
free(tmp);
|
||||||
break;
|
break;
|
||||||
|
@ -1858,16 +1918,16 @@ _handle_buf(Termpty *ty, const int *codepoints, int len)
|
||||||
n = _handle_seq(ty, c, ce);
|
n = _handle_seq(ty, c, ce);
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
bytes = ((char *)ce - (char *)c) + sizeof(int);
|
bytes = ((char *)ce - (char *)c) + sizeof(Eina_Unicode);
|
||||||
ty->buf = malloc(bytes);
|
ty->buf = malloc(bytes);
|
||||||
INF("malloc %i", (int)(bytes - sizeof(int)));
|
INF("malloc %i", (int)(bytes - sizeof(Eina_Unicode)));
|
||||||
if (!ty->buf)
|
if (!ty->buf)
|
||||||
{
|
{
|
||||||
ERR("memerr");
|
ERR("memerr");
|
||||||
}
|
}
|
||||||
bytes = (char *)ce - (char *)c;
|
bytes = (char *)ce - (char *)c;
|
||||||
memcpy(ty->buf, c, bytes);
|
memcpy(ty->buf, c, bytes);
|
||||||
ty->buflen = bytes / sizeof(int);
|
ty->buflen = bytes / sizeof(Eina_Unicode);
|
||||||
ty->buf[ty->buflen] = 0;
|
ty->buf[ty->buflen] = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1906,7 +1966,7 @@ _cb_fd_read(void *data, Ecore_Fd_Handler *fd_handler __UNUSED__)
|
||||||
{
|
{
|
||||||
Termpty *ty = data;
|
Termpty *ty = data;
|
||||||
char buf[4097];
|
char buf[4097];
|
||||||
int codepoint[4097];
|
Eina_Unicode codepoint[4097];
|
||||||
int len, i, j, reads;
|
int len, i, j, reads;
|
||||||
|
|
||||||
// read up to 64 * 4096 bytes
|
// read up to 64 * 4096 bytes
|
||||||
|
|
|
@ -90,7 +90,7 @@ struct _Termpty
|
||||||
struct {
|
struct {
|
||||||
void (*func) (void *data);
|
void (*func) (void *data);
|
||||||
void *data;
|
void *data;
|
||||||
} change, scroll, set_title, set_icon, cancel_sel, exited, bell;
|
} change, scroll, set_title, set_icon, cancel_sel, exited, bell, command;
|
||||||
} cb;
|
} cb;
|
||||||
struct {
|
struct {
|
||||||
const char *title;
|
const char *title;
|
||||||
|
@ -99,6 +99,7 @@ struct _Termpty
|
||||||
int w, h;
|
int w, h;
|
||||||
int fd, slavefd;
|
int fd, slavefd;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
const char *cur_cmd;
|
||||||
Termcell *screen, *screen2;
|
Termcell *screen, *screen2;
|
||||||
Termsave **back;
|
Termsave **back;
|
||||||
int backmax, backpos;
|
int backmax, backpos;
|
||||||
|
|
Loading…
Reference in New Issue