From: Enlightenment S. <no-...@en...> - 2012-07-05 16:23:07
|
Log: terminology: display ACS_*. should fix ncurses issues Author: billiob Date: 2012-07-05 09:22:57 -0700 (Thu, 05 Jul 2012) New Revision: 73369 Trac: http://trac.enlightenment.org/e/changeset/73369 Modified: trunk/terminology/src/bin/termpty.c Modified: trunk/terminology/src/bin/termpty.c =================================================================== --- trunk/terminology/src/bin/termpty.c 2012-07-05 15:12:54 UTC (rev 73368) +++ trunk/terminology/src/bin/termpty.c 2012-07-05 16:22:57 UTC (rev 73369) @@ -1620,6 +1620,7 @@ case '(': // charset 0 ty->state.chset[0] = c[2]; ty->state.multibyte = 0; + ty->state.charsetch = c[2]; return 3; case ')': // charset 1 ty->state.chset[1] = c[2]; |
From: Enlightenment S. <no-...@en...> - 2012-10-06 20:23:28
|
Log: terminology: fix vim issue Author: billiob Date: 2012-10-06 13:23:20 -0700 (Sat, 06 Oct 2012) New Revision: 77549 Trac: http://trac.enlightenment.org/e/changeset/77549 Modified: trunk/terminology/src/bin/termptyops.c Modified: trunk/terminology/src/bin/termptyops.c =================================================================== --- trunk/terminology/src/bin/termptyops.c 2012-10-06 17:10:58 UTC (rev 77548) +++ trunk/terminology/src/bin/termptyops.c 2012-10-06 20:23:20 UTC (rev 77549) @@ -127,7 +127,7 @@ int e = ty->h; if (ty->state.scroll_y2 != 0) e = ty->state.scroll_y2; - if (ty->state.cy >= e) + if (ty->state.cy >= e && ty->state.cy >= ty->h) { _termpty_text_scroll(ty); ty->state.cy = e - 1; |
From: Enlightenment S. <no-...@en...> - 2012-10-06 20:53:52
|
Log: terminology: add missing parentheses Author: billiob Date: 2012-10-06 13:53:45 -0700 (Sat, 06 Oct 2012) New Revision: 77551 Trac: http://trac.enlightenment.org/e/changeset/77551 Modified: trunk/terminology/src/bin/termptyops.c Modified: trunk/terminology/src/bin/termptyops.c =================================================================== --- trunk/terminology/src/bin/termptyops.c 2012-10-06 20:23:46 UTC (rev 77550) +++ trunk/terminology/src/bin/termptyops.c 2012-10-06 20:53:45 UTC (rev 77551) @@ -127,7 +127,7 @@ int e = ty->h; if (ty->state.scroll_y2 != 0) e = ty->state.scroll_y2; - if (ty->state.cy >= e && ty->state.cy >= ty->h) + if ((ty->state.cy >= e) && (ty->state.cy >= ty->h)) { _termpty_text_scroll(ty); ty->state.cy = e - 1; |
From: Enlightenment S. <no-...@en...> - 2012-10-09 07:47:36
|
Log: terminology: revert 77549,77551 about fixing a vim issue. Will investigate further. Author: billiob Date: 2012-10-09 00:47:24 -0700 (Tue, 09 Oct 2012) New Revision: 77616 Trac: http://trac.enlightenment.org/e/changeset/77616 Modified: trunk/terminology/src/bin/termptyops.c Modified: trunk/terminology/src/bin/termptyops.c =================================================================== --- trunk/terminology/src/bin/termptyops.c 2012-10-09 07:35:08 UTC (rev 77615) +++ trunk/terminology/src/bin/termptyops.c 2012-10-09 07:47:24 UTC (rev 77616) @@ -127,7 +127,7 @@ int e = ty->h; if (ty->state.scroll_y2 != 0) e = ty->state.scroll_y2; - if ((ty->state.cy >= e) && (ty->state.cy >= ty->h)) + if (ty->state.cy >= e) { _termpty_text_scroll(ty); ty->state.cy = e - 1; |
From: Enlightenment S. <no-...@en...> - 2012-10-15 08:18:39
|
Log: terminology: reset scroll markers once done Author: billiob Date: 2012-10-15 01:18:27 -0700 (Mon, 15 Oct 2012) New Revision: 77987 Trac: http://trac.enlightenment.org/e/changeset/77987 Modified: trunk/terminology/src/bin/termptyops.c Modified: trunk/terminology/src/bin/termptyops.c =================================================================== --- trunk/terminology/src/bin/termptyops.c 2012-10-15 08:17:15 UTC (rev 77986) +++ trunk/terminology/src/bin/termptyops.c 2012-10-15 08:18:27 UTC (rev 77987) @@ -97,6 +97,7 @@ _termpty_text_copy(ty, cells2, cells, ty->w); } _text_clear(ty, cells2, ty->w, ' ', EINA_TRUE); + ty->state.scroll_y2 = 0; } void @@ -119,6 +120,7 @@ _termpty_text_copy(ty, cells, cells2, ty->w); } _text_clear(ty, cells, ty->w, ' ', EINA_TRUE); + ty->state.scroll_y2 = 0; } void |
From: Enlightenment S. <no-...@en...> - 2012-10-16 19:38:42
|
Log: terminology: reset scroll state on "clear all" Author: billiob Date: 2012-10-16 12:38:32 -0700 (Tue, 16 Oct 2012) New Revision: 78070 Trac: http://trac.enlightenment.org/e/changeset/78070 Modified: trunk/terminology/src/bin/termptyops.c Modified: trunk/terminology/src/bin/termptyops.c =================================================================== --- trunk/terminology/src/bin/termptyops.c 2012-10-16 18:01:21 UTC (rev 78069) +++ trunk/terminology/src/bin/termptyops.c 2012-10-16 19:38:32 UTC (rev 78070) @@ -277,6 +277,7 @@ break; case TERMPTY_CLR_ALL: _text_clear(ty, cells, ty->w * ty->h, 0, EINA_TRUE); + ty->state.scroll_y2 = 0; break; default: break; |
From: Enlightenment S. <no-...@en...> - 2012-10-20 14:02:56
|
Log: terminology: ' ' can be underlined or striken through This fixes cursorline in vim when it uses underline Author: billiob Date: 2012-10-20 07:02:49 -0700 (Sat, 20 Oct 2012) New Revision: 78285 Trac: http://trac.enlightenment.org/e/changeset/78285 Modified: trunk/terminology/src/bin/termio.c Modified: trunk/terminology/src/bin/termio.c =================================================================== --- trunk/terminology/src/bin/termio.c 2012-10-20 14:02:36 UTC (rev 78284) +++ trunk/terminology/src/bin/termio.c 2012-10-20 14:02:49 UTC (rev 78285) @@ -502,7 +502,9 @@ } if (cells[j].att.fgintense) fg += 48; if (cells[j].att.bgintense) bg += 48; - if ((codepoint == ' ') || (codepoint == 0)) + if (((codepoint == ' ') || (codepoint == 0)) && + (!cells[j].att.strike) && + (!cells[j].att.underline)) fg = COL_INVIS; } if ((tc[x].codepoint != codepoint) || |
From: Enlightenment S. <no-...@en...> - 2012-10-24 21:34:33
|
Log: terminology: correctly set device id In vim, 'set ttymouse' was returning 'xterm' and not 'xterm2' because the device id was incorrectly returned. Author: billiob Date: 2012-10-24 14:34:25 -0700 (Wed, 24 Oct 2012) New Revision: 78411 Trac: http://trac.enlightenment.org/e/changeset/78411 Modified: trunk/terminology/src/bin/termptyesc.c Modified: trunk/terminology/src/bin/termptyesc.c =================================================================== --- trunk/terminology/src/bin/termptyesc.c 2012-10-24 19:50:35 UTC (rev 78410) +++ trunk/terminology/src/bin/termptyesc.c 2012-10-24 21:34:25 UTC (rev 78411) @@ -469,15 +469,17 @@ case 'c': // query device id { char bf[32]; -// 0 Base VT100, no options -// 1 Preprocessor option (STP) -// 2 Advanced video option (AVO) -// 3 AVO and STP -// 4 Graphics processor option (GO) -// 5 GO and STP -// 6 GO and AVO -// 7 GO, STP, and AVO - snprintf(bf, sizeof(bf), "\033[>1;271;%ic", 0); +// 0 → VT100 +// 1 → VT220 +// 2 → VT240 +// 18 → VT330 +// 19 → VT340 +// 24 → VT320 +// 41 → VT420 +// 61 → VT510 +// 64 → VT520 +// 65 → VT525 + snprintf(bf, sizeof(bf), "\033[>0;271;%ic", 0); termpty_write(ty, bf, strlen(bf)); } break; |
From: Enlightenment S. <no-...@en...> - 2012-10-24 21:34:43
|
Log: terminology: rewrite mouse handling Fix mouse in vim. Should also fix it in mc. Author: billiob Date: 2012-10-24 14:34:36 -0700 (Wed, 24 Oct 2012) New Revision: 78412 Trac: http://trac.enlightenment.org/e/changeset/78412 Modified: trunk/terminology/src/bin/termio.c trunk/terminology/src/bin/termpty.h trunk/terminology/src/bin/termptyesc.c Modified: trunk/terminology/src/bin/termio.c =================================================================== --- trunk/terminology/src/bin/termio.c 2012-10-24 21:34:25 UTC (rev 78411) +++ trunk/terminology/src/bin/termio.c 2012-10-24 21:34:36 UTC (rev 78412) @@ -1247,26 +1247,46 @@ { char buf[64]; Eina_Bool ret = EINA_FALSE; - - if (sd->pty->mouse_rep == MOUSE_OFF) return EINA_FALSE; + + if (sd->pty->mouse_mode == MOUSE_OFF) return EINA_FALSE; if (!sd->mouse.button) { /* Need to remember the first button pressed for terminal handling */ sd->mouse.button = ev->button; } - switch (sd->pty->mouse_rep) + switch (sd->pty->mouse_ext) { - case MOUSE_X10: + case MOUSE_EXT_NONE: if ((cx < (0xff - ' ')) && (cy < (0xff - ' '))) { int btn = ev->button - 1; - - if (btn <= 2) + + if (sd->pty->mouse_mode == MOUSE_X10) { + if (btn <= 2) + { + buf[0] = 0x1b; + buf[1] = '['; + buf[2] = 'M'; + buf[3] = btn + ' '; + buf[4] = cx + 1 + ' '; + buf[5] = cy + 1 + ' '; + buf[6] = 0; + termpty_write(sd->pty, buf, strlen(buf)); + ret = EINA_TRUE; + } + } + else + { + int shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; + int meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; + int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; + + if (btn > 2) btn = 0; buf[0] = 0x1b; buf[1] = '['; buf[2] = 'M'; - buf[3] = btn + ' '; + buf[3] = (btn | shift | meta | ctrl) + ' '; buf[4] = cx + 1 + ' '; buf[5] = cy + 1 + ' '; buf[6] = 0; @@ -1275,14 +1295,14 @@ } } break; - case MOUSE_UTF8: // ESC.[.M.BTN/FLGS.UTF8.YUTF8 + case MOUSE_EXT_UTF8: // ESC.[.M.BTN/FLGS.XUTF8.YUTF8 { int btn = ev->button - 1; int shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; int meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; int v, i; - + if (btn > 2) btn = 0; buf[0] = 0x1b; buf[1] = '['; @@ -1308,37 +1328,30 @@ ret = EINA_TRUE; } break; - case MOUSE_SGR: // ESC.[.<.NUM.;.NUM.;.NUM.M + case MOUSE_EXT_SGR: // ESC.[.<.NUM.;.NUM.;.NUM.M { int btn = ev->button - 1; int shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; int meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; - + snprintf(buf, sizeof(buf), "%c[<%i;%i;%iM", 0x1b, (btn | shift | meta | ctrl), cx + 1, cy + 1); termpty_write(sd->pty, buf, strlen(buf)); ret = EINA_TRUE; } break; - case MOUSE_NORMAL: - case MOUSE_NORMAL_BTN_MOVE: - case MOUSE_URXVT: // ESC.[.M.BTN/FLGS.X.Y - if ((cx < (0xff - ' ')) && (cy < (0xff - ' '))) + case MOUSE_EXT_URXVT: // ESC.[.NUM.;.NUM.;.NUM.M { int btn = ev->button - 1; int shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; int meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; - + if (btn > 2) btn = 0; - buf[0] = 0x1b; - buf[1] = '['; - buf[2] = 'M'; - buf[3] = (btn | shift | meta | ctrl) + ' '; - buf[4] = cx + 1 + ' '; - buf[5] = cy + 1 + ' '; - buf[6] = 0; + snprintf(buf, sizeof(buf), "%c[%i;%i;%iM", 0x1b, + (btn | shift | meta | ctrl) + ' ', + cx + 1 + ' ', cy + 1 + ' '); termpty_write(sd->pty, buf, strlen(buf)); ret = EINA_TRUE; } @@ -1354,21 +1367,41 @@ { char buf[64]; Eina_Bool ret = EINA_FALSE; - - if (sd->pty->mouse_rep == MOUSE_OFF) return EINA_FALSE; + int btn, shift, meta, ctrl; + + if ((sd->pty->mouse_mode == MOUSE_OFF) || + (sd->pty->mouse_mode == MOUSE_X10)) + return EINA_FALSE; if (sd->mouse.button == ev->button) sd->mouse.button = 0; - switch (sd->pty->mouse_rep) + + btn = ev->button - 1; + shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; + meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; + ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; + + switch (sd->pty->mouse_ext) { - case MOUSE_UTF8: // ESC.[.M.BTN/FLGS.UTF8.YUTF8 + case MOUSE_EXT_NONE: + if ((cx < (0xff - ' ')) && (cy < (0xff - ' '))) { - int btn = 3; - int shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; - int meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; - int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; + if (btn > 2) btn = 0; + buf[0] = 0x1b; + buf[1] = '['; + buf[2] = 'M'; + buf[3] = (btn | shift | meta | ctrl) + ' '; + buf[4] = cx + 1 + ' '; + buf[5] = cy + 1 + ' '; + buf[6] = 0; + termpty_write(sd->pty, buf, strlen(buf)); + ret = EINA_TRUE; + } + break; + case MOUSE_EXT_UTF8: // ESC.[.M.BTN/FLGS.XUTF8.YUTF8 + { int v, i; - - btn = 3; + + if (btn > 2) btn = 0; buf[0] = 0x1b; buf[1] = '['; buf[2] = 'M'; @@ -1393,36 +1426,20 @@ ret = EINA_TRUE; } break; - case MOUSE_SGR: // ESC.[.<.NUM.;.NUM.;.NUM.M + case MOUSE_EXT_SGR: // ESC.[.<.NUM.;.NUM.;.NUM.m { - int btn = 3; - int shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; - int meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; - int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; - snprintf(buf, sizeof(buf), "%c[<%i;%i;%im", 0x1b, (btn | shift | meta | ctrl), cx + 1, cy + 1); termpty_write(sd->pty, buf, strlen(buf)); ret = EINA_TRUE; } break; - case MOUSE_NORMAL: - case MOUSE_NORMAL_BTN_MOVE: - case MOUSE_URXVT: // ESC.[.M.BTN/FLGS.X.Y - if ((cx < (0xff - ' ')) && (cy < (0xff - ' '))) + case MOUSE_EXT_URXVT: // ESC.[.NUM.;.NUM.;.NUM.M { - int btn = 3; - int shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; - int meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; - int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; - - buf[0] = 0x1b; - buf[1] = '['; - buf[2] = 'M'; - buf[3] = (btn | shift | meta | ctrl) + ' '; - buf[4] = cx + 1 + ' '; - buf[5] = cy + 1 + ' '; - buf[6] = 0; + if (btn > 2) btn = 0; + snprintf(buf, sizeof(buf), "%c[%i;%i;%iM", 0x1b, + (btn | shift | meta | ctrl) + ' ', + cx + 1 + ' ', cy + 1 + ' '); termpty_write(sd->pty, buf, strlen(buf)); ret = EINA_TRUE; } @@ -1438,24 +1455,50 @@ { char buf[64]; Eina_Bool ret = EINA_FALSE; - - if (sd->pty->mouse_rep == MOUSE_OFF) return EINA_FALSE; - switch (sd->pty->mouse_rep) + int btn, shift, meta, ctrl; + + if ((sd->pty->mouse_mode == MOUSE_OFF) || + (sd->pty->mouse_mode == MOUSE_X10) || + (sd->pty->mouse_mode == MOUSE_NORMAL)) + return EINA_FALSE; + + if ((!sd->mouse.button) && (sd->pty->mouse_mode == MOUSE_NORMAL_BTN_MOVE)) + return EINA_FALSE; + + if (!change) return EINA_TRUE; + + btn = sd->mouse.button - 1; + shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; + meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; + ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; + + switch (sd->pty->mouse_ext) { - case MOUSE_NORMAL_BTN_MOVE: // ESC.[.M.BTN/FLGS.X.Y - if (change) + case MOUSE_EXT_NONE: + if ((cx < (0xff - ' ')) && (cy < (0xff - ' '))) { - int btn = sd->mouse.button - 1; - int shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; - int meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; - int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; + + if (btn > 2) btn = 0; + buf[0] = 0x1b; + buf[1] = '['; + buf[2] = 'M'; + buf[3] = (btn | shift | meta | ctrl) + ' '; + buf[4] = cx + 1 + ' '; + buf[5] = cy + 1 + ' '; + buf[6] = 0; + termpty_write(sd->pty, buf, strlen(buf)); + ret = EINA_TRUE; + } + break; + case MOUSE_EXT_UTF8: // ESC.[.M.BTN/FLGS.XUTF8.YUTF8 + { int v, i; - + if (btn > 2) btn = 0; buf[0] = 0x1b; buf[1] = '['; buf[2] = 'M'; - buf[3] = (btn | shift | meta | ctrl) + ' ' + 32; + buf[3] = (btn | shift | meta | ctrl) + ' '; i = 4; v = cx + 1 + ' '; if (v <= 127) buf[i++] = v; @@ -1473,10 +1516,27 @@ } buf[i] = 0; termpty_write(sd->pty, buf, strlen(buf)); + ret = EINA_TRUE; } - /* Always handle this, even if we don't send position update */ - ret = EINA_TRUE; break; + case MOUSE_EXT_SGR: // ESC.[.<.NUM.;.NUM.;.NUM.M + { + snprintf(buf, sizeof(buf), "%c[<%i;%i;%iM", 0x1b, + (btn | shift | meta | ctrl), cx + 1, cy + 1); + termpty_write(sd->pty, buf, strlen(buf)); + ret = EINA_TRUE; + } + break; + case MOUSE_EXT_URXVT: // ESC.[.NUM.;.NUM.;.NUM.M + { + if (btn > 2) btn = 0; + snprintf(buf, sizeof(buf), "%c[%i;%i;%iM", 0x1b, + (btn | shift | meta | ctrl) + ' ', + cx + 1 + ' ', cy + 1 + ' '); + termpty_write(sd->pty, buf, strlen(buf)); + ret = EINA_TRUE; + } + break; default: break; } Modified: trunk/terminology/src/bin/termpty.h =================================================================== --- trunk/terminology/src/bin/termpty.h 2012-10-24 21:34:25 UTC (rev 78411) +++ trunk/terminology/src/bin/termpty.h 2012-10-24 21:34:36 UTC (rev 78412) @@ -19,15 +19,18 @@ #define COL_INVERSEBG 11 #define MOUSE_OFF 0 -#define MOUSE_X10 1 -#define MOUSE_NORMAL 2 -#define MOUSE_UTF8 3 -#define MOUSE_SGR 4 -#define MOUSE_URXVT 5 -#define MOUSE_NORMAL_BTN_MOVE 6 +#define MOUSE_X10 1 // Press only +#define MOUSE_NORMAL 2 // Press+release only +#define MOUSE_NORMAL_BTN_MOVE 3 // Press+release+motion while pressed +#define MOUSE_NORMAL_ALL_MOVE 4 // Press+release+all motion -// choose - italic OR double-width support +#define MOUSE_EXT_NONE 0 +#define MOUSE_EXT_UTF8 1 +#define MOUSE_EXT_SGR 2 +#define MOUSE_EXT_URXVT 3 +// choose - italic OR double-width support + //#define SUPPORT_ITALIC 1 #define SUPPORT_DBLWIDTH 1 @@ -109,7 +112,8 @@ Termstate state, save, swap; int exit_code; unsigned int altbuf : 1; - unsigned int mouse_rep : 3; + unsigned int mouse_mode : 3; + unsigned int mouse_ext : 2; }; struct _Termcell Modified: trunk/terminology/src/bin/termptyesc.c =================================================================== --- trunk/terminology/src/bin/termptyesc.c 2012-10-24 21:34:25 UTC (rev 78411) +++ trunk/terminology/src/bin/termptyesc.c 2012-10-24 21:34:36 UTC (rev 78412) @@ -566,8 +566,9 @@ break; case 9: handled = 1; - if (mode) ty->mouse_rep = MOUSE_X10; - else ty->mouse_rep = MOUSE_OFF; + INF("XXX: set mouse (X10) %i", mode); + if (mode) ty->mouse_mode = MOUSE_X10; + else ty->mouse_mode = MOUSE_OFF; break; case 12: // ignore handled = 1; @@ -620,8 +621,8 @@ break; case 1000: handled = 1; - if (mode) ty->mouse_rep = MOUSE_NORMAL; - else ty->mouse_rep = MOUSE_OFF; + if (mode) ty->mouse_mode = MOUSE_NORMAL; + else ty->mouse_mode = MOUSE_OFF; INF("XXX: set mouse (press+release only) to %i", mode); break; case 1001: @@ -630,12 +631,14 @@ break; case 1002: handled = 1; - if (mode) ty->mouse_rep = MOUSE_NORMAL_BTN_MOVE; - else ty->mouse_rep = MOUSE_OFF; + if (mode) ty->mouse_mode = MOUSE_NORMAL_BTN_MOVE; + else ty->mouse_mode = MOUSE_OFF; INF("XXX: set mouse (press+release+motion while pressed) %i", mode); break; case 1003: handled = 1; + if (mode) ty->mouse_mode = MOUSE_NORMAL_ALL_MOVE; + else ty->mouse_mode = MOUSE_OFF; ERR("XXX: set mouse (press+release+all motion) %i", mode); break; case 1004: // i dont know what focus repporting is? @@ -644,14 +647,14 @@ break; case 1005: handled = 1; - if (mode) ty->mouse_rep = MOUSE_UTF8; - else ty->mouse_rep = MOUSE_OFF; + if (mode) ty->mouse_ext = MOUSE_EXT_UTF8; + else ty->mouse_ext = MOUSE_EXT_NONE; INF("XXX: set mouse (xterm utf8 style) %i", mode); break; case 1006: handled = 1; - if (mode) ty->mouse_rep = MOUSE_SGR; - else ty->mouse_rep = MOUSE_OFF; + if (mode) ty->mouse_ext = MOUSE_EXT_SGR; + else ty->mouse_ext = MOUSE_EXT_NONE; INF("XXX: set mouse (xterm sgr style) %i", mode); break; case 1010: // ignore @@ -664,8 +667,8 @@ break; case 1015: handled = 1; - if (mode) ty->mouse_rep = MOUSE_URXVT; - else ty->mouse_rep = MOUSE_OFF; + if (mode) ty->mouse_ext = MOUSE_EXT_URXVT; + else ty->mouse_ext = MOUSE_EXT_NONE; INF("XXX: set mouse (rxvt-unicode style) %i", mode); break; case 1034: // ignore |
From: Enlightenment S. <no-...@en...> - 2012-10-25 19:36:55
|
Log: terminology: report mouse wheel Author: billiob Date: 2012-10-25 12:36:46 -0700 (Thu, 25 Oct 2012) New Revision: 78471 Trac: http://trac.enlightenment.org/e/changeset/78471 Modified: trunk/terminology/src/bin/termio.c Modified: trunk/terminology/src/bin/termio.c =================================================================== --- trunk/terminology/src/bin/termio.c 2012-10-25 17:47:03 UTC (rev 78470) +++ trunk/terminology/src/bin/termio.c 2012-10-25 19:36:46 UTC (rev 78471) @@ -1247,6 +1247,7 @@ { char buf[64]; Eina_Bool ret = EINA_FALSE; + int btn; if (sd->pty->mouse_mode == MOUSE_OFF) return EINA_FALSE; if (!sd->mouse.button) @@ -1254,12 +1255,13 @@ /* Need to remember the first button pressed for terminal handling */ sd->mouse.button = ev->button; } + + btn = ev->button - 1; switch (sd->pty->mouse_ext) { case MOUSE_EXT_NONE: if ((cx < (0xff - ' ')) && (cy < (0xff - ' '))) { - int btn = ev->button - 1; if (sd->pty->mouse_mode == MOUSE_X10) { @@ -1297,7 +1299,6 @@ break; case MOUSE_EXT_UTF8: // ESC.[.M.BTN/FLGS.XUTF8.YUTF8 { - int btn = ev->button - 1; int shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; int meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; @@ -1330,7 +1331,6 @@ break; case MOUSE_EXT_SGR: // ESC.[.<.NUM.;.NUM.;.NUM.M { - int btn = ev->button - 1; int shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; int meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; @@ -1343,7 +1343,6 @@ break; case MOUSE_EXT_URXVT: // ESC.[.NUM.;.NUM.;.NUM.M { - int btn = ev->button - 1; int shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; int meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; @@ -1844,15 +1843,88 @@ sd = evas_object_smart_data_get(data); if (!sd) return; - if (sd->pty->altbuf) return; if (evas_key_modifier_is_set(ev->modifiers, "Control")) return; if (evas_key_modifier_is_set(ev->modifiers, "Alt")) return; if (evas_key_modifier_is_set(ev->modifiers, "Shift")) return; - sd->scroll -= (ev->z * 4); - if (sd->scroll > sd->pty->backscroll_num) - sd->scroll = sd->pty->backscroll_num; - else if (sd->scroll < 0) sd->scroll = 0; - _smart_update_queue(data, sd); + + if (sd->pty->mouse_mode == MOUSE_OFF) + { + + sd->scroll -= (ev->z * 4); + if (sd->scroll > sd->pty->backscroll_num) + sd->scroll = sd->pty->backscroll_num; + else if (sd->scroll < 0) sd->scroll = 0; + _smart_update_queue(data, sd); + } + else + { + char buf[64]; + int btn = (ev->z >= 0) ? 1 + 64 : 2 + 64; + int cx, cy; + + _smart_xy_to_cursor(data, ev->canvas.x, ev->canvas.y, &cx, &cy); + + switch (sd->pty->mouse_ext) + { + case MOUSE_EXT_NONE: + if ((cx < (0xff - ' ')) && (cy < (0xff - ' '))) + { + buf[0] = 0x1b; + buf[1] = '['; + buf[2] = 'M'; + buf[3] = btn + ' '; + buf[4] = cx + 1 + ' '; + buf[5] = cy + 1 + ' '; + buf[6] = 0; + termpty_write(sd->pty, buf, strlen(buf)); + } + break; + case MOUSE_EXT_UTF8: // ESC.[.M.BTN/FLGS.XUTF8.YUTF8 + { + int v, i; + + buf[0] = 0x1b; + buf[1] = '['; + buf[2] = 'M'; + buf[3] = btn + ' '; + i = 4; + v = cx + 1 + ' '; + if (v <= 127) buf[i++] = v; + else + { // 14 bits for cx/cy - enough i think + buf[i++] = 0xc0 + (v >> 6); + buf[i++] = 0x80 + (v & 0x3f); + } + v = cy + 1 + ' '; + if (v <= 127) buf[i++] = v; + else + { // 14 bits for cx/cy - enough i think + buf[i++] = 0xc0 + (v >> 6); + buf[i++] = 0x80 + (v & 0x3f); + } + buf[i] = 0; + termpty_write(sd->pty, buf, strlen(buf)); + } + break; + case MOUSE_EXT_SGR: // ESC.[.<.NUM.;.NUM.;.NUM.M + { + snprintf(buf, sizeof(buf), "%c[<%i;%i;%iM", 0x1b, + btn, cx + 1, cy + 1); + termpty_write(sd->pty, buf, strlen(buf)); + } + break; + case MOUSE_EXT_URXVT: // ESC.[.NUM.;.NUM.;.NUM.M + { + snprintf(buf, sizeof(buf), "%c[%i;%i;%iM", 0x1b, + btn + ' ', + cx + 1 + ' ', cy + 1 + ' '); + termpty_write(sd->pty, buf, strlen(buf)); + } + break; + default: + break; + } + } } static void |
From: Enlightenment S. <no-...@en...> - 2012-10-25 20:27:20
|
Log: terminology: fix mouse button release handling Need to send 3 to indicate Release instead of the button number. Author: billiob Date: 2012-10-25 13:27:11 -0700 (Thu, 25 Oct 2012) New Revision: 78472 Trac: http://trac.enlightenment.org/e/changeset/78472 Modified: trunk/terminology/src/bin/termio.c Modified: trunk/terminology/src/bin/termio.c =================================================================== --- trunk/terminology/src/bin/termio.c 2012-10-25 19:36:46 UTC (rev 78471) +++ trunk/terminology/src/bin/termio.c 2012-10-25 20:27:11 UTC (rev 78472) @@ -1262,7 +1262,6 @@ case MOUSE_EXT_NONE: if ((cx < (0xff - ' ')) && (cy < (0xff - ' '))) { - if (sd->pty->mouse_mode == MOUSE_X10) { if (btn <= 2) @@ -1366,7 +1365,7 @@ { char buf[64]; Eina_Bool ret = EINA_FALSE; - int btn, shift, meta, ctrl; + int shift, meta, ctrl; if ((sd->pty->mouse_mode == MOUSE_OFF) || (sd->pty->mouse_mode == MOUSE_X10)) @@ -1374,7 +1373,6 @@ if (sd->mouse.button == ev->button) sd->mouse.button = 0; - btn = ev->button - 1; shift = evas_key_modifier_is_set(ev->modifiers, "Shift") ? 4 : 0; meta = evas_key_modifier_is_set(ev->modifiers, "Alt") ? 8 : 0; ctrl = evas_key_modifier_is_set(ev->modifiers, "Control") ? 16 : 0; @@ -1384,11 +1382,10 @@ case MOUSE_EXT_NONE: if ((cx < (0xff - ' ')) && (cy < (0xff - ' '))) { - if (btn > 2) btn = 0; buf[0] = 0x1b; buf[1] = '['; buf[2] = 'M'; - buf[3] = (btn | shift | meta | ctrl) + ' '; + buf[3] = (3 | shift | meta | ctrl) + ' '; buf[4] = cx + 1 + ' '; buf[5] = cy + 1 + ' '; buf[6] = 0; @@ -1400,11 +1397,10 @@ { int v, i; - if (btn > 2) btn = 0; buf[0] = 0x1b; buf[1] = '['; buf[2] = 'M'; - buf[3] = (btn | shift | meta | ctrl) + ' '; + buf[3] = (3 | shift | meta | ctrl) + ' '; i = 4; v = cx + 1 + ' '; if (v <= 127) buf[i++] = v; @@ -1428,16 +1424,15 @@ case MOUSE_EXT_SGR: // ESC.[.<.NUM.;.NUM.;.NUM.m { snprintf(buf, sizeof(buf), "%c[<%i;%i;%im", 0x1b, - (btn | shift | meta | ctrl), cx + 1, cy + 1); + (3 | shift | meta | ctrl), cx + 1, cy + 1); termpty_write(sd->pty, buf, strlen(buf)); ret = EINA_TRUE; } break; case MOUSE_EXT_URXVT: // ESC.[.NUM.;.NUM.;.NUM.M { - if (btn > 2) btn = 0; snprintf(buf, sizeof(buf), "%c[%i;%i;%iM", 0x1b, - (btn | shift | meta | ctrl) + ' ', + (3 | shift | meta | ctrl) + ' ', cx + 1 + ' ', cy + 1 + ' '); termpty_write(sd->pty, buf, strlen(buf)); ret = EINA_TRUE; @@ -1476,7 +1471,6 @@ case MOUSE_EXT_NONE: if ((cx < (0xff - ' ')) && (cy < (0xff - ' '))) { - if (btn > 2) btn = 0; buf[0] = 0x1b; buf[1] = '['; |
From: Enlightenment S. <no-...@en...> - 2012-10-29 19:02:52
|
Log: terminology: fix potential segfault when writing after end of line Author: billiob Date: 2012-10-29 12:02:40 -0700 (Mon, 29 Oct 2012) New Revision: 78619 Trac: http://trac.enlightenment.org/e/changeset/78619 Modified: trunk/terminology/src/bin/termptyops.c Modified: trunk/terminology/src/bin/termptyops.c =================================================================== --- trunk/terminology/src/bin/termptyops.c 2012-10-29 18:28:58 UTC (rev 78618) +++ trunk/terminology/src/bin/termptyops.c 2012-10-29 19:02:40 UTC (rev 78619) @@ -208,6 +208,7 @@ { ty->state.wrapnext = 0; ty->state.cx++; + if (ty->state.cx >= (ty->w - 1)) return; #if defined(SUPPORT_DBLWIDTH) if (cells[ty->state.cx].att.dblwidth) { |
From: Enlightenment S. <no-...@en...> - 2012-10-29 22:04:28
|
Log: terminology: fix is_dblwidth should use a proper bitmap someday?\226?\128?\166 Fixes #1687 Author: billiob Date: 2012-10-29 15:04:21 -0700 (Mon, 29 Oct 2012) New Revision: 78627 Trac: http://trac.enlightenment.org/e/changeset/78627 Modified: trunk/terminology/src/bin/termptydbl.c Modified: trunk/terminology/src/bin/termptydbl.c =================================================================== --- trunk/terminology/src/bin/termptydbl.c 2012-10-29 22:02:46 UTC (rev 78626) +++ trunk/terminology/src/bin/termptydbl.c 2012-10-29 22:04:21 UTC (rev 78627) @@ -17,42 +17,36 @@ return EINA_FALSE; // (F) if ((g == 0x3000) || - ((g >= 0xff01) && (g <= 0xffe6))) + ((g >= 0xff01) && (g <= 0xff60)) || + ((g >= 0xffe0) && (g <= 0xff06))) return EINA_TRUE; // (W) - // if ( // 1XXX - (((g >> 12) == 0x1) && - (((g >= 0x1100) && (g <= 0x11ff)))) || + ((g >= 0x1100) && (g <= 0x115f)) || // 2XXX - (((g >> 12) == 0x2) && - (((g >= 0x2329) && (g <= 0x232A)) || - ((g >= 0x2E80) && (g <= 0x4dbf)))) || - // 4XXX - (((g >> 12) == 0x4) && - (((g >= 0x4e00) && (g <= 0x9fff)))) || + ((g == 0x2329) || (g == 0x232a)) || + ((g >= 0x2e80) && (g <= 0x2ffb)) || + // 3XXX -> A4C6 + ((g >= 0x3001) && (g <= 0x303f)) || + ((g >= 0x3041) && (g <= 0x3247)) || + ((g >= 0x3250) && (g <= 0x4dbf)) || + ((g >= 0x4e00) && (g <= 0xa4c6)) || // aXXX - ((((g >> 12) >= 0xa) && ((g >> 12) <= 0xd)) && - (((g >= 0xa000) && (g <= 0xa4c6)) || - ((g >= 0xa960) && (g <= 0xa97c)) || - ((g >= 0xac00) && (g <= 0xd7a3)) || - ((g >= 0xd7b0) && (g <= 0xd7fb)))) || + ((g >= 0xa960) && (g <= 0xa97c)) || + ((g >= 0xac00) && (g <= 0xd7a3)) || // fXXX - (((g >> 12) == 0xf) && - (((g >= 0xf900) && (g <= 0xfaff)) || - ((g >= 0xfe10) && (g <= 0xfe6b)))) || + ((g >= 0xf900) && (g <= 0xfaff)) || + ((g >= 0xfe10) && (g <= 0xfe19)) || + ((g >= 0xfe30) && (g <= 0xfe6b)) || // 1XXXX - (((g >> 16) == 0x1) && - (((g >= 0x1b000) && (g <= 0x1b001)) || - ((g >= 0x1f200) && (g <= 0x1f202)) || - ((g >= 0x1f210) && (g <= 0x1f251)))) || + ((g >= 0x1b000) && (g <= 0x1b001)) || + ((g >= 0x1f200) && (g <= 0x1f202)) || + ((g >= 0x1f210) && (g <= 0x1f251)) || // 2XXXX - (((g >> 16) == 0x2) && - (((g >= 0x20000) && (g <= 0x2fffd)))) || + ((g >= 0x20000) && (g <= 0x2fffd)) || // 3XXXX - (((g >> 12) == 0x3) && - (((g >= 0x30000) && (g <= 0x3FFFD))))) + ((g >= 0x30000) && (g <= 0x3FFFD))) return EINA_TRUE; // FIXME: can optimize by breaking into tree and ranges // (A) |
From: Enlightenment S. <no-...@en...> - 2012-11-24 20:27:47
|
Log: terminology: fix mouse motion for all modes Author: billiob Date: 2012-11-24 12:27:40 -0800 (Sat, 24 Nov 2012) New Revision: 79642 Trac: http://trac.enlightenment.org/e/changeset/79642 Modified: trunk/terminology/src/bin/termio.c Modified: trunk/terminology/src/bin/termio.c =================================================================== --- trunk/terminology/src/bin/termio.c 2012-11-24 19:55:37 UTC (rev 79641) +++ trunk/terminology/src/bin/termio.c 2012-11-24 20:27:40 UTC (rev 79642) @@ -1505,7 +1505,7 @@ buf[0] = 0x1b; buf[1] = '['; buf[2] = 'M'; - buf[3] = (btn | shift | meta | ctrl) + ' '; + buf[3] = (btn | shift | meta | ctrl | 32) + ' '; i = 4; v = cx + 1 + ' '; if (v <= 127) buf[i++] = v; @@ -1529,7 +1529,7 @@ case MOUSE_EXT_SGR: // ESC.[.<.NUM.;.NUM.;.NUM.M { snprintf(buf, sizeof(buf), "%c[<%i;%i;%iM", 0x1b, - (btn | shift | meta | ctrl), cx + 1, cy + 1); + (btn | shift | meta | ctrl | 32), cx + 1, cy + 1); termpty_write(sd->pty, buf, strlen(buf)); ret = EINA_TRUE; } @@ -1538,7 +1538,7 @@ { if (btn > 2) btn = 0; snprintf(buf, sizeof(buf), "%c[%i;%i;%iM", 0x1b, - (btn | shift | meta | ctrl) + ' ', + (btn | shift | meta | ctrl | 32) + ' ', cx + 1 + ' ', cy + 1 + ' '); termpty_write(sd->pty, buf, strlen(buf)); ret = EINA_TRUE; |
From: Enlightenment S. <no-...@en...> - 2012-12-10 21:52:48
|
Log: terminology: ' ' can be underlined or striken through Commit on rev 78285 got wrongly removed. Please, use svn revert (or git revert) instead of pushing some old working code you had. I do hate wasting my time twice on the same bug I fixed weeks ago. Author: billiob Date: 2012-12-10 13:52:39 -0800 (Mon, 10 Dec 2012) New Revision: 80623 Trac: http://trac.enlightenment.org/e/changeset/80623 Modified: trunk/terminology/src/bin/termio.c Modified: trunk/terminology/src/bin/termio.c =================================================================== --- trunk/terminology/src/bin/termio.c 2012-12-10 20:54:19 UTC (rev 80622) +++ trunk/terminology/src/bin/termio.c 2012-12-10 21:52:39 UTC (rev 80623) @@ -502,7 +502,9 @@ } if (cells[j].att.fgintense) fg += 48; if (cells[j].att.bgintense) bg += 48; - if ((codepoint == ' ') || (codepoint == 0)) + if (((codepoint == ' ') || (codepoint == 0)) && + (!cells[j].att.strike) && + (!cells[j].att.underline)) fg = COL_INVIS; } if ((tc[x].codepoint != codepoint) || |
From: Enlightenment S. <no-...@en...> - 2012-12-14 18:52:27
|
Log: terminology: cleanup escape sequences parsing. Fix #1628 Charset length for example was not correctly handled and could even lead to segfaults. Author: billiob Date: 2012-12-14 10:52:19 -0800 (Fri, 14 Dec 2012) New Revision: 80980 Trac: http://trac.enlightenment.org/e/changeset/80980 Modified: trunk/terminology/src/bin/termptyesc.c Modified: trunk/terminology/src/bin/termptyesc.c =================================================================== --- trunk/terminology/src/bin/termptyesc.c 2012-12-14 17:44:04 UTC (rev 80979) +++ trunk/terminology/src/bin/termptyesc.c 2012-12-14 18:52:19 UTC (rev 80980) @@ -16,12 +16,16 @@ #define ERR(...) EINA_LOG_DOM_ERR(_termpty_log_dom, __VA_ARGS__) #define WRN(...) EINA_LOG_DOM_WARN(_termpty_log_dom, __VA_ARGS__) #define INF(...) EINA_LOG_DOM_INFO(_termpty_log_dom, __VA_ARGS__) -#define DBG(...) EINA_LOG_DOM_DBG(_termpty_log_dom, __VA_ARGS__) +#define DBG(...) EINA_LOG_DOM_ERR(_termpty_log_dom, __VA_ARGS__) #define ST 0x9c // String Terminator #define BEL 0x07 // Bell #define ESC 033 // Escape +/* XXX: all handle_ functions return the number of bytes successfully read, 0 + * if not enought bytes could be read + */ + static int _csi_arg_get(Eina_Unicode **ptr) { @@ -62,10 +66,7 @@ b++; cc++; } - // if cc == ce then we got to the end of the string with no end marker - // so return -2 to indicate to go back to the escape beginning when - // there is more bufer available - if (cc == ce) return -2; + if (cc == ce) return 0; *b = 0; b = buf; // DBG(" CSI: '%c' args '%s'", *cc, buf); @@ -892,7 +893,7 @@ } *b = 0; if ((*cc == ST) || (*cc == BEL) || (*cc == '\\')) cc++; - else return -2; + else return 0; switch (buf[0]) { case '0': @@ -946,6 +947,8 @@ break; case '4': // XXX: set palette entry. not supported. + DBG("set palette, not supported"); + if ((cc - c) < 3) return 0; b = &(buf[2]); break; default: @@ -974,7 +977,7 @@ } *b = 0; if (*cc == 0x0) cc++; - else return -2; + else return 0; // commands are stored in the buffer, 0 bytes not allowd (end marker) s = eina_unicode_unicode_to_utf8(buf, &slen); ty->cur_cmd = s; @@ -1008,7 +1011,7 @@ } *b = 0; if ((*cc == ST) || (*cc == '\\')) cc++; - else return -2; + else return 0; switch (buf[0]) { case '+': @@ -1025,73 +1028,89 @@ static int _handle_esc(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce) { - if ((ce - c) < 2) return 0; - DBG("ESC: '%c'", c[1]); - switch (c[1]) + int len = ce - c; + + if (len < 1) return 0; + DBG("ESC: '%c'", c[0]); + switch (c[0]) { case '[': - return 2 + _handle_esc_csi(ty, c + 2, ce); + len = _handle_esc_csi(ty, c + 1, ce); + if (len == 0) return 0; + return 1 + len; case ']': - return 2 + _handle_esc_xterm(ty, c + 2, ce); + len = _handle_esc_xterm(ty, c + 1, ce); + if (len == 0) return 0; + return 1 + len; case '}': - return 2 + _handle_esc_terminology(ty, c + 2, ce); + len = _handle_esc_terminology(ty, c + 1, ce); + if (len == 0) return 0; + return 1 + len; case 'P': - return 2 + _handle_esc_dcs(ty, c + 2, ce); + len = _handle_esc_dcs(ty, c + 1, ce); + if (len == 0) return 0; + return 1 + len; case '=': // set alternate keypad mode ty->state.alt_kp = 1; - return 2; + return 1; case '>': // set numeric keypad mode ty->state.alt_kp = 0; - return 2; + return 1; case 'M': // move to prev line ty->state.wrapnext = 0; ty->state.cy--; _termpty_text_scroll_rev_test(ty); - return 2; + return 1; case 'D': // move to next line ty->state.wrapnext = 0; ty->state.cy++; _termpty_text_scroll_test(ty); - return 2; + return 1; case 'E': // add \n\r ty->state.wrapnext = 0; ty->state.cx = 0; ty->state.cy++; _termpty_text_scroll_test(ty); - return 2; + return 1; case 'Z': // same a 'ESC [ Pn c' _term_txt_write(ty, "\033[?1;2C"); - return 2; + return 1; case 'c': // reset terminal to initial state DBG("reset to init mode and clear"); _termpty_reset_state(ty); _termpty_clear_screen(ty, TERMPTY_CLR_ALL); if (ty->cb.cancel_sel.func) ty->cb.cancel_sel.func(ty->cb.cancel_sel.data); - return 2; + return 1; case '(': // charset 0 - ty->state.chset[0] = c[2]; + if (len < 2) return 0; + ty->state.chset[0] = c[1]; ty->state.multibyte = 0; - ty->state.charsetch = c[2]; - return 3; + ty->state.charsetch = c[1]; + return 2; case ')': // charset 1 - ty->state.chset[1] = c[2]; + if (len < 2) return 0; + ty->state.chset[1] = c[1]; ty->state.multibyte = 0; - return 3; + return 2; case '*': // charset 2 - ty->state.chset[2] = c[2]; + if (len < 2) return 0; + ty->state.chset[2] = c[1]; ty->state.multibyte = 0; - return 3; + return 2; case '+': // charset 3 - ty->state.chset[3] = c[2]; + if (len < 2) return 0; + ty->state.chset[3] = c[1]; ty->state.multibyte = 0; - return 3; + return 2; case '$': // charset -2 - ty->state.chset[2] = c[2]; + if (len < 2) return 0; + ty->state.chset[2] = c[1]; ty->state.multibyte = 1; - return 3; + return 2; case '#': // #8 == test mode -> fill screen with "E"; - if (c[2] == '8') + if (len < 2) return 0; + if (c[1] == '8') { int i, size; Termcell *cells; @@ -1110,30 +1129,31 @@ for (i = 0; i < size; i++) cells[i].codepoint = 'E'; } } - return 3; + return 2; case '@': // just consume this plus next char - return 3; + if (len < 2) return 0; + return 2; case '7': // save cursor pos _termpty_cursor_copy(&(ty->state), &(ty->save)); - return 2; + return 1; case '8': // restore cursor pos _termpty_cursor_copy(&(ty->save), &(ty->state)); - return 2; + return 1; /* case 'G': // query gfx mode - return 3; + return 2; case 'H': // set tab at current column - return 2; + return 1; case 'n': // single shift 2 - return 2; + return 1; case 'o': // single shift 3 - return 2; + return 1; */ default: - ERR("eek - esc unhandled '%c' (0x%02x)", c[1], c[1]); - break; + ERR("eek - esc unhandled '%c' (0x%02x)", c[0], c[0]); + return 1; } - return 1; + return 0; } int @@ -1257,7 +1277,9 @@ */ case 0x1b: // ESC (escape) ty->state.had_cr = 0; - return _handle_esc(ty, c, ce); + len = _handle_esc(ty, c + 1, ce); + if (len == 0) return 0; + return 1 + len; /* case 0x1c: // FS (file separator) return 1; @@ -1282,13 +1304,11 @@ } else if (c[0] == 0x9b) // ANSI ESC!!! { - int v; - printf("ANSI CSI!!!!!\n"); ty->state.had_cr = 0; - v = _handle_esc_csi(ty, c + 1, ce); - if (v == -2) return 0; - return v + 1; + len = _handle_esc_csi(ty, c + 1, ce); + if (len == 0) return 0; + return 1 + len; } cc = (int *)c; |
From: Enlightenment S. <no-...@en...> - 2012-12-22 18:10:01
|
Log: terminology: remove trailing newline when selecting text. Fix #1967 Patch by Panagiotis Galatsanos <galatsanosp at gmail com> Author: billiob Date: 2012-12-22 10:09:17 -0800 (Sat, 22 Dec 2012) New Revision: 81644 Trac: http://trac.enlightenment.org/e/changeset/81644 Modified: trunk/terminology/src/bin/termio.c Modified: trunk/terminology/src/bin/termio.c =================================================================== --- trunk/terminology/src/bin/termio.c 2012-12-22 16:29:50 UTC (rev 81643) +++ trunk/terminology/src/bin/termio.c 2012-12-22 18:09:17 UTC (rev 81644) @@ -773,7 +773,16 @@ for (i = 0; i < ev->len; i++) { tmp[i] = s[i]; - if (tmp[i] == '\n') tmp[i] = '\r'; + if (tmp[i] == '\n') + { + // remove trailing new line + if (i != (ev->len - 2)) tmp[i] = '\r'; + else + { + tmp[i] = '\0'; + break; + } + } } termpty_write(sd->pty, tmp, ev->len - 1); free(tmp); |
From: Enlightenment S. <no-...@en...> - 2013-01-20 16:48:25
|
Log: terminology: read colors from theme Author: billiob Date: 2013-01-20 08:48:18 -0800 (Sun, 20 Jan 2013) New Revision: 83019 Trac: http://trac.enlightenment.org/e/changeset/83019 Modified: trunk/terminology/src/bin/col.c trunk/terminology/src/bin/col.h trunk/terminology/src/bin/main.c trunk/terminology/src/bin/options_theme.c trunk/terminology/src/bin/termio.c trunk/terminology/src/bin/termio.h Modified: trunk/terminology/src/bin/col.c =================================================================== --- trunk/terminology/src/bin/col.c 2013-01-20 16:29:23 UTC (rev 83018) +++ trunk/terminology/src/bin/col.c 2013-01-20 16:48:18 UTC (rev 83019) @@ -1,7 +1,17 @@ +#include "private.h" #include "col.h" +#include <Edje.h> -const Color colors[2][2][12] = +typedef struct _Color Color; + +struct _Color { + unsigned char r, g, b, a; +}; + + +static const Color colors[2][2][12] = +{ { // normal { // normal { 0xaa, 0xaa, 0xaa, 0xff }, // COL_DEF @@ -64,7 +74,7 @@ } }; -const Color colors256[256] = +static const Color colors256[256] = { // basic 16 repeated /* @@ -383,3 +393,62 @@ { 0xe4, 0xe4, 0xe4, 0xff }, { 0xee, 0xee, 0xee, 0xff }, }; + +void colors_term_init(Evas_Object *textgrid, Evas_Object *bg) +{ + int c, n, l, k, j, i; + int r, g, b, a; + char buf[32]; + + for (c = 0; c < 4 * 12; c++) + { + snprintf(buf, sizeof(buf) - 1, "color-%d", c); + + n = c + 24 * ( c / 24); + + if (edje_object_color_class_get(bg, buf, + &r, &g, &b, &a, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL)) + { + evas_object_textgrid_palette_set( + textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, c, + r, g, b, a); + } + else + { + Color color = colors[c/24][(c%24)/12][c%12]; + + /* normal */ + evas_object_textgrid_palette_set( + textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n, + color.r, color.g, color.b, color.a); + /* faint */ + evas_object_textgrid_palette_set( + textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n + 24, + r/2, g/2, b/2, a/2); + } + } + for (c = 0; c < 256; c++) + { + snprintf(buf, sizeof(buf) - 1, "256color-%d", c); + + if (edje_object_color_class_get(bg, buf, + &r, &g, &b, &a, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL)) + { + evas_object_textgrid_palette_set( + textgrid, EVAS_TEXTGRID_PALETTE_EXTENDED, c, + r, g, b, a); + } + else + { + Color color = colors256[c]; + + evas_object_textgrid_palette_set( + textgrid, EVAS_TEXTGRID_PALETTE_EXTENDED, c, + color.r, color.g, color.b, color.a); + } + } +} Modified: trunk/terminology/src/bin/col.h =================================================================== --- trunk/terminology/src/bin/col.h 2013-01-20 16:29:23 UTC (rev 83018) +++ trunk/terminology/src/bin/col.h 2013-01-20 16:48:18 UTC (rev 83019) @@ -1,9 +1,8 @@ -typedef struct _Color Color; +#ifndef _COL_H__ +#define _COL_H__ 1 -struct _Color -{ - unsigned char r, g, b, a; -}; +#include <Evas.h> -extern const Color colors[2][2][12]; -extern const Color colors256[256]; +void colors_term_init(Evas_Object *textgrid, Evas_Object *bg); + +#endif Modified: trunk/terminology/src/bin/main.c =================================================================== --- trunk/terminology/src/bin/main.c 2013-01-20 16:29:23 UTC (rev 83018) +++ trunk/terminology/src/bin/main.c 2013-01-20 16:48:18 UTC (rev 83019) @@ -697,6 +697,8 @@ term->term = o = termio_add(wn->win, config, cmd, login_shell, cd, size_w, size_h); + colors_term_init(termio_textgrid_get(term->term), term->bg); + termio_win_set(o, wn->win); termio_theme_set(o, term->bg); evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); Modified: trunk/terminology/src/bin/options_theme.c =================================================================== --- trunk/terminology/src/bin/options_theme.c 2013-01-20 16:29:23 UTC (rev 83018) +++ trunk/terminology/src/bin/options_theme.c 2013-01-20 16:48:18 UTC (rev 83019) @@ -69,6 +69,7 @@ config_save(config, NULL); if (!theme_apply(edje, config, "terminology/background")) ERR("Couldn't find terminology theme!"); + colors_term_init(termio_textgrid_get(t->term), edje); } static int Modified: trunk/terminology/src/bin/termio.c =================================================================== --- trunk/terminology/src/bin/termio.c 2013-01-20 16:29:23 UTC (rev 83018) +++ trunk/terminology/src/bin/termio.c 2013-01-20 16:48:18 UTC (rev 83019) @@ -2167,30 +2167,6 @@ evas_object_show(o); sd->grid.obj = o; - for (n = 0, l = 0; l < 2; l++) // normal/intense - { - for (k = 0; k < 2; k++) // normal/faint - { - for (j = 0; j < 2; j++) // normal/bright - { - for (i = 0; i < 12; i++, n++) //colors - evas_object_textgrid_palette_set - (o, EVAS_TEXTGRID_PALETTE_STANDARD, n, - colors[l][j][i].r / (k + 1), - colors[l][j][i].g / (k + 1), - colors[l][j][i].b / (k + 1), - colors[l][j][i].a / (k + 1)); - } - } - } - for (n = 0; n < 256; n++) - { - evas_object_textgrid_palette_set - (o, EVAS_TEXTGRID_PALETTE_EXTENDED, n, - colors256[n].r, colors256[n].g, - colors256[n].b, colors256[n].a); - } - /* Setup cursor */ o = edje_object_add(evas_object_evas_get(obj)); evas_object_pass_events_set(o, EINA_TRUE); @@ -2873,3 +2849,12 @@ return EINA_TRUE; } + +Evas_Object * +termio_textgrid_get(Evas_Object *obj) +{ + Termio *sd = evas_object_smart_data_get(obj); + if (!sd) return NULL; + + return sd->grid.obj; +} Modified: trunk/terminology/src/bin/termio.h =================================================================== --- trunk/terminology/src/bin/termio.h 2013-01-20 16:29:23 UTC (rev 83018) +++ trunk/terminology/src/bin/termio.h 2013-01-20 16:48:18 UTC (rev 83019) @@ -2,6 +2,7 @@ #define _TERMIO_H__ 1 #include "config.h" +#include "col.h" Evas_Object *termio_add(Evas_Object *parent, Config *config, const char *cmd, Eina_Bool login_shell, const char *cd, int w, int h); void termio_win_set(Evas_Object *obj, Evas_Object *win); @@ -20,5 +21,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); #endif |
From: Enlightenment S. <no-...@en...> - 2013-01-20 21:02:29
|
Log: terminology: add faint color support from edj Author: billiob Date: 2013-01-20 13:02:22 -0800 (Sun, 20 Jan 2013) New Revision: 83022 Trac: http://trac.enlightenment.org/e/changeset/83022 Modified: trunk/terminology/src/bin/col.c Modified: trunk/terminology/src/bin/col.c =================================================================== --- trunk/terminology/src/bin/col.c 2013-01-20 16:48:23 UTC (rev 83021) +++ trunk/terminology/src/bin/col.c 2013-01-20 21:02:22 UTC (rev 83022) @@ -411,9 +411,14 @@ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) { + /* normal */ evas_object_textgrid_palette_set( - textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, c, + textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n, r, g, b, a); + /* faint */ + evas_object_textgrid_palette_set( + textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n + 24, + r/2, g/2, b/2, a/2); } else { |
From: Enlightenment S. <no-...@en...> - 2013-01-21 22:51:33
|
Log: use device id from xterm Should fix some emacs compatibility issues. Bug was fixed with help from 'ptyproxy' I wrote: https://github.com/billiob/ptyproxy Author: billiob Date: 2013-01-21 14:51:26 -0800 (Mon, 21 Jan 2013) New Revision: 83047 Trac: http://trac.enlightenment.org/e/changeset/83047 Modified: trunk/terminology/src/bin/termptyesc.c Modified: trunk/terminology/src/bin/termptyesc.c =================================================================== --- trunk/terminology/src/bin/termptyesc.c 2013-01-21 19:57:27 UTC (rev 83046) +++ trunk/terminology/src/bin/termptyesc.c 2013-01-21 22:51:26 UTC (rev 83047) @@ -480,7 +480,7 @@ // 61 → VT510 // 64 → VT520 // 65 → VT525 - snprintf(bf, sizeof(bf), "\033[>0;271;%ic", 0); + snprintf(bf, sizeof(bf), "\033[>41;285;%ic", 0); termpty_write(ty, bf, strlen(bf)); } break; |
From: Enlightenment S. <no-...@en...> - 2013-01-24 21:29:57
|
Log: terminology: fix clear screen Author: billiob Date: 2013-01-24 13:29:49 -0800 (Thu, 24 Jan 2013) New Revision: 83309 Trac: http://trac.enlightenment.org/e/changeset/83309 Modified: trunk/terminology/src/bin/termptyops.c Modified: trunk/terminology/src/bin/termptyops.c =================================================================== --- trunk/terminology/src/bin/termptyops.c 2013-01-24 21:06:41 UTC (rev 83308) +++ trunk/terminology/src/bin/termptyops.c 2013-01-24 21:29:49 UTC (rev 83309) @@ -288,7 +288,9 @@ if (ty->state.cy < (ty->h - 1)) { cells = &(TERMPTY_SCREEN(ty, 0, (ty->state.cy + 1))); - _text_clear(ty, cells, ty->w * (ty->h - ty->state.cy - 1), 0, EINA_TRUE); + _text_clear(ty, cells, + ty->w * (ty->h - ty->circular_offset - 1 - ty->state.cy), + 0, EINA_TRUE); } break; case TERMPTY_CLR_BEGIN: |
From: Enlightenment S. <no-...@en...> - 2013-01-26 22:22:46
|
Log: termpty_init/shutdown() are now called globally Author: billiob Date: 2013-01-26 14:22:39 -0800 (Sat, 26 Jan 2013) New Revision: 83360 Trac: http://trac.enlightenment.org/e/changeset/83360 Modified: trunk/terminology/src/bin/main.c trunk/terminology/src/bin/termio.c Modified: trunk/terminology/src/bin/main.c =================================================================== --- trunk/terminology/src/bin/main.c 2013-01-26 18:57:01 UTC (rev 83359) +++ trunk/terminology/src/bin/main.c 2013-01-26 22:22:39 UTC (rev 83360) @@ -1229,7 +1229,9 @@ if (!term) return NULL; if (!config) abort(); - + + termpty_init(); + term->wn = wn; term->hold = hold; term->config = config; @@ -2051,6 +2053,8 @@ main_win_free(wn); } + termpty_shutdown(); + config_shutdown(); eina_log_domain_unregister(_log_domain); _log_domain = -1; Modified: trunk/terminology/src/bin/termio.c =================================================================== --- trunk/terminology/src/bin/termio.c 2013-01-26 18:57:01 UTC (rev 83359) +++ trunk/terminology/src/bin/termio.c 2013-01-26 22:22:39 UTC (rev 83360) @@ -2358,8 +2358,6 @@ sd->glayer = NULL; ecore_imf_shutdown(); - termpty_shutdown(); - _parent_sc.del(obj); } @@ -2564,7 +2562,6 @@ ELM_GESTURE_STATE_ABORT, _smart_cb_gest_zoom_abort, obj); - termpty_init(); sd->pty = termpty_new(cmd, login_shell, cd, w, h, config->scrollback); sd->pty->cb.change.func = _smart_pty_change; |
From: Enlightenment S. <no-...@en...> - 2013-01-30 23:09:54
|
Log: load about from theme if possible Author: billiob Date: 2013-01-30 15:09:47 -0800 (Wed, 30 Jan 2013) New Revision: 83494 Trac: http://trac.enlightenment.org/e/changeset/83494 Modified: trunk/terminology/src/bin/about.c Modified: trunk/terminology/src/bin/about.c =================================================================== --- trunk/terminology/src/bin/about.c 2013-01-30 23:09:42 UTC (rev 83493) +++ trunk/terminology/src/bin/about.c 2013-01-30 23:09:47 UTC (rev 83494) @@ -2,6 +2,8 @@ #include <Elementary.h> #include "about.h" +#include "config.h" +#include "termio.h" static Evas_Object *ab_layout = NULL, *ab_over = NULL; static Eina_Bool ab_out = EINA_FALSE; @@ -34,12 +36,17 @@ saved_bg = bg; if (!ab_layout) { + Config *config = termio_config_get(term); char buf[PATH_MAX]; ab_layout = o = elm_layout_add(win); - snprintf(buf, sizeof(buf), "%s/themes/default.edj", - elm_app_data_dir_get()); - elm_layout_file_set(o, buf, "terminology/about"); + if (elm_layout_file_set(o, config_theme_path_get(config), + "terminology/about") == 0) + { + snprintf(buf, sizeof(buf), "%s/themes/default.edj", + elm_app_data_dir_get()); + elm_layout_file_set(o, buf, "terminology/about"); + } elm_object_part_text_set (o, "terminology.text", "<b>Terminology "PACKAGE_VERSION"</b><br>" |
From: Enlightenment S. <no-...@en...> - 2013-02-16 14:44:56
|
Log: box selection on alt/ctrl/shift Author: billiob Date: 2013-02-16 06:44:45 -0800 (Sat, 16 Feb 2013) New Revision: 83999 Trac: http://trac.enlightenment.org/e/changeset/83999 Modified: trunk/terminology/src/bin/termio.c Modified: trunk/terminology/src/bin/termio.c =================================================================== --- trunk/terminology/src/bin/termio.c 2013-02-16 14:33:16 UTC (rev 83998) +++ trunk/terminology/src/bin/termio.c 2013-02-16 14:44:45 UTC (rev 83999) @@ -1950,7 +1950,9 @@ } else { - if (evas_key_modifier_is_set(ev->modifiers, "Shift")) + if (evas_key_modifier_is_set(ev->modifiers, "Shift") || + evas_key_modifier_is_set(ev->modifiers, "Control") || + evas_key_modifier_is_set(ev->modifiers, "Alt")) { sd->cur.sel1.x = cx; sd->cur.sel1.y = cy - sd->scroll; |
From: Enlightenment S. <no-...@en...> - 2013-02-16 18:16:37
|
Log: fix clearing lines with circular buffer. Fixes #2263. Author: billiob Date: 2013-02-16 10:16:25 -0800 (Sat, 16 Feb 2013) New Revision: 84004 Trac: http://trac.enlightenment.org/e/changeset/84004 Modified: trunk/terminology/src/bin/termptyops.c Modified: trunk/terminology/src/bin/termptyops.c =================================================================== --- trunk/terminology/src/bin/termptyops.c 2013-02-16 17:05:00 UTC (rev 84003) +++ trunk/terminology/src/bin/termptyops.c 2013-02-16 18:16:25 UTC (rev 84004) @@ -285,10 +285,26 @@ _termpty_clear_line(ty, mode, ty->w); if (ty->state.cy < (ty->h - 1)) { + int l = ty->h - (ty->state.cy + 1); + cells = &(TERMPTY_SCREEN(ty, 0, (ty->state.cy + 1))); - _text_clear(ty, cells, - ty->w * (ty->h - ty->circular_offset - 1 - ty->state.cy), - 0, EINA_TRUE); + if (l > ty->circular_offset) + { + cells = &(TERMPTY_SCREEN(ty, 0, (ty->state.cy + 1))); + _text_clear(ty, cells, + ty->w * (ty->circular_offset - l), + 0, EINA_TRUE); + cells = ty->screen; + _text_clear(ty, cells, + ty->w * ty->circular_offset, + 0, EINA_TRUE); + } + else + { + _text_clear(ty, cells, + ty->w * l, + 0, EINA_TRUE); + } } break; case TERMPTY_CLR_BEGIN: |