billiob pushed a commit to branch master. http://git.enlightenment.org/apps/terminology.git/commit/?id=43c6777e573fa9123dbe133f614248d627c576de
commit 43c6777e573fa9123dbe133f614248d627c576de Author: Boris Faure <[email protected]> Date: Sat Feb 9 23:48:15 2019 +0100 termiointernals: add termio_internal_render() used to test selection invalidation later on --- src/bin/termio.c | 358 +-------------------------------------------- src/bin/termio.h | 5 + src/bin/termiointernals.c | 362 ++++++++++++++++++++++++++++++++++++++++++++++ src/bin/termiointernals.h | 4 + src/bin/tyfuzz.c | 14 +- src/bin/win.h | 2 - 6 files changed, 391 insertions(+), 354 deletions(-) diff --git a/src/bin/termio.c b/src/bin/termio.c index 877fe64..3c069d0 100644 --- a/src/bin/termio.c +++ b/src/bin/termio.c @@ -2191,8 +2191,8 @@ _block_media_activate(Evas_Object *obj, Termblock *blk) } } -static void -_block_activate(Evas_Object *obj, Termblock *blk) +void +termio_block_activate(Evas_Object *obj, Termblock *blk) { Termio *sd = evas_object_smart_data_get(obj); @@ -2939,361 +2939,17 @@ _smart_apply(Evas_Object *obj) { Termio *sd = evas_object_smart_data_get(obj); Evas_Coord ox, oy, ow, oh; - Eina_List *l, *ln; + int preedit_x = 0, preedit_y = 0; Termblock *blk; - int x, y, ch1 = 0, ch2 = 0, inv = 0, preedit_x = 0, preedit_y = 0; - const char *preedit_str; - ssize_t w; - int sel_start_x = 0, sel_start_y = 0, sel_end_x = 0, sel_end_y = 0; - Eina_Unicode *cp; + Eina_List *l, *ln; EINA_SAFETY_ON_NULL_RETURN(sd); evas_object_geometry_get(obj, &ox, &oy, &ow, &oh); - EINA_LIST_FOREACH(sd->pty->block.active, l, blk) - { - blk->was_active = blk->active; - blk->active = EINA_FALSE; - } - inv = sd->pty->termstate.reverse; - termpty_backlog_lock(); - termpty_backscroll_adjust(sd->pty, &sd->scroll); - - /* Make selection bottom to top */ - sel_start_x = sd->pty->selection.start.x; - sel_start_y = sd->pty->selection.start.y; - sel_end_x = sd->pty->selection.end.x; - sel_end_y = sd->pty->selection.end.y; - if (!sd->pty->selection.is_top_to_bottom) - { - INT_SWAP(sel_start_y, sel_end_y); - INT_SWAP(sel_start_x, sel_end_x); - } - cp = sd->pty->selection.codepoints; - - /* Look at every visible line */ - for (y = 0; y < sd->grid.h; y++) - { - Termcell *cells; - Evas_Textgrid_Cell *tc; - int cur_sel_start_x = -1, cur_sel_end_x = -1; - int rel_y = y - sd->scroll; - - w = 0; - cells = termpty_cellrow_get(sd->pty, rel_y, &w); - if (!cells) - continue; - tc = evas_object_textgrid_cellrow_get(sd->grid.obj, y); - if (!tc) - continue; - - /* Compute @cur_sel_start_x, @cur_sel_end_x */ - if (sd->pty->selection.codepoints) - { - if (sel_start_y <= rel_y && rel_y <= sel_end_y) - { - if (sd->pty->selection.is_box) - { - cur_sel_start_x = sel_start_x; - cur_sel_end_x = sel_end_x; - } - else - { - cur_sel_start_x = sel_start_x; - cur_sel_end_x = sel_end_x; - if (sel_start_y != sel_end_y) - { - if (rel_y == sel_start_y) - { - cur_sel_end_x = sd->grid.w - 1; - } - else if (y == sel_end_y) - { - cur_sel_start_x = 0; - } - else - { - cur_sel_start_x = 0; - cur_sel_end_x = sd->grid.w - 1; - } - } - } - } - } - - ch1 = -1; - /* Look at every cell in that line */ - for (x = 0; x < sd->grid.w; x++) - { - Eina_Unicode *u = NULL; - - if (cp && cur_sel_start_x <= x && x <= cur_sel_end_x) - u = cp; - - if ((!cells) || (x >= w)) - { - if ((tc[x].codepoint != 0) || - (tc[x].bg != COL_INVIS) || - (tc[x].bg_extended)) - { - if (ch1 < 0) - ch1 = x; - ch2 = x; - } - tc[x].codepoint = 0; - tc[x].bg = (inv) ? COL_INVERSEBG : COL_INVIS; - tc[x].bg_extended = 0; - tc[x].underline = 0; - tc[x].strikethrough = 0; - tc[x].bold = 0; - tc[x].italic = 0; - tc[x].double_width = 0; - - if (u && *u != ' ') - { - termio_sel_set(sd, EINA_FALSE); - u = cp = NULL; - } - } - else - { - int bid, bx = 0, by = 0; - - bid = termpty_block_id_get(&(cells[x]), &bx, &by); - if (bid >= 0) - { - if (ch1 < 0) - ch1 = x; - ch2 = x; - tc[x].codepoint = 0; - tc[x].fg_extended = 0; - tc[x].bg_extended = 0; - tc[x].underline = 0; - tc[x].strikethrough = 0; - tc[x].bold = 0; - tc[x].italic = 0; - tc[x].double_width = 0; - tc[x].fg = COL_INVIS; - tc[x].bg = COL_INVIS; - blk = termpty_block_get(sd->pty, bid); - if (blk) - { - _block_activate(obj, blk); - blk->x = (x - bx); - blk->y = (y - by); - evas_object_move(blk->obj, - ox + (blk->x * sd->font.chw), - oy + (blk->y * sd->font.chh)); - evas_object_resize(blk->obj, - blk->w * sd->font.chw, - blk->h * sd->font.chh); - } - if (u && *u != ' ') - { - termio_sel_set(sd, EINA_FALSE); - u = cp = NULL; - } - } - else if (cells[x].att.invisible) - { - if ((tc[x].codepoint != 0) || - (tc[x].bg != COL_INVIS) || - (tc[x].bg_extended)) - { - if (ch1 < 0) - ch1 = x; - ch2 = x; - } - tc[x].codepoint = 0; - tc[x].bg = (inv) ? COL_INVERSEBG : COL_INVIS; - tc[x].bg_extended = 0; - tc[x].underline = 0; - tc[x].strikethrough = 0; - tc[x].bold = 0; - tc[x].italic = 0; - tc[x].double_width = cells[x].att.dblwidth; - if ((tc[x].double_width) && (tc[x].codepoint == 0) && - (ch2 == x - 1)) - ch2 = x; - if (u && *u != ' ') - { - termio_sel_set(sd, EINA_FALSE); - u = cp = NULL; - } - } - else - { - int fg, bg, fgext, bgext, bold, italic; - Eina_Unicode codepoint; - - // colors - fg = cells[x].att.fg; - bg = cells[x].att.bg; - fgext = cells[x].att.fg256; - bgext = cells[x].att.bg256; - codepoint = cells[x].codepoint; - if (sd->config->font.bolditalic) - { - bold = cells[x].att.bold; - italic = cells[x].att.italic; - } - else - { - bold = 0; - italic = 0; - } - - if ((fg == COL_DEF) && (cells[x].att.inverse ^ inv)) - fg = COL_INVERSEBG; - if (bg == COL_DEF) - { - if (cells[x].att.inverse ^ inv) - bg = COL_INVERSE; - else if (!bgext) - bg = COL_INVIS; - } - if ((cells[x].att.fgintense) && (!fgext)) - fg += 48; - if ((cells[x].att.bgintense) && (!bgext)) - bg += 48; - if ((cells[x].att.bold) && (!fgext)) - fg += 12; - if ((cells[x].att.faint) && (!fgext)) - fg += 24; - if (cells[x].att.inverse ^ inv) - { - int t; - t = fgext; fgext = bgext; bgext = t; - t = fg; fg = bg; bg = t; - } - if ((tc[x].codepoint != codepoint) || - (tc[x].bold != bold) || - (tc[x].italic != italic) || - (tc[x].fg != fg) || - (tc[x].bg != bg) || - (tc[x].fg_extended != fgext) || - (tc[x].bg_extended != bgext) || - (tc[x].underline != cells[x].att.underline) || - (tc[x].strikethrough != cells[x].att.strike)) - { - if (ch1 < 0) - ch1 = x; - ch2 = x; - } - tc[x].fg_extended = fgext; - tc[x].bg_extended = bgext; - tc[x].underline = cells[x].att.underline; - tc[x].strikethrough = cells[x].att.strike; - if (sd->config->font.bolditalic) - { - tc[x].bold = cells[x].att.bold; - tc[x].italic = cells[x].att.italic; - } - else - { - tc[x].bold = 0; - tc[x].italic = 0; - } - tc[x].double_width = cells[x].att.dblwidth; - tc[x].fg = fg; - tc[x].bg = bg; - tc[x].codepoint = codepoint; - if ((tc[x].double_width) && (tc[x].codepoint == 0) && - (ch2 == x - 1)) - ch2 = x; - // cells[x].att.blink - // cells[x].att.blink2 - if (u && *u != codepoint) - { - termio_sel_set(sd, EINA_FALSE); - u = cp = NULL; - } - } - } - } - evas_object_textgrid_cellrow_set(sd->grid.obj, y, tc); - /* only bothering to keep 1 change span per row - not worth doing - * more really */ - if (ch1 >= 0) - evas_object_textgrid_update_add(sd->grid.obj, ch1, y, - ch2 - ch1 + 1, 1); - } - - preedit_str = term_preedit_str_get(sd->term); - if (preedit_str && preedit_str[0]) - { - Eina_Unicode *uni, g; - int len = 0, i, jump, xx, backx; - Eina_Bool dbl; - Evas_Textgrid_Cell *tc; - x = sd->cursor.x, y = sd->cursor.y; - - uni = eina_unicode_utf8_to_unicode(preedit_str, &len); - if (uni) - { - for (i = 0; i < len; i++) - { - jump = 1; - g = uni[i]; - dbl = _termpty_is_dblwidth_get(sd->pty, g); - if (dbl) jump = 2; - backx = 0; - if ((x + jump) > sd->grid.w) - { - if (y < (sd->grid.h - 1)) - { - x = jump; - backx = jump; - y++; - } - } - else - { - x += jump; - backx = jump; - } - tc = evas_object_textgrid_cellrow_get(sd->grid.obj, y); - xx = x - backx; - tc[xx].bold = 1; - tc[xx].bg = COL_BLACK; - tc[xx].fg = COL_WHITE; - tc[xx].fg_extended = 0; - tc[xx].bg_extended = 0; - tc[xx].underline = 1; - tc[xx].strikethrough = 0; - tc[xx].double_width = dbl; - tc[xx].codepoint = g; - if (dbl) - { - xx = x - backx + 1; - tc[xx].bold = 1; - tc[xx].bg = COL_BLACK; - tc[xx].fg = COL_WHITE; - tc[xx].fg_extended = 0; - tc[xx].bg_extended = 0; - tc[xx].underline = 1; - tc[xx].strikethrough = 0; - tc[xx].double_width = 0; - tc[xx].codepoint = 0; - } - evas_object_textgrid_cellrow_set(sd->grid.obj, y, tc); - if (x >= sd->grid.w) - { - if (y < (sd->grid.h - 1)) - { - x = 0; - y++; - } - } - } - evas_object_textgrid_update_add(sd->grid.obj, 0, sd->cursor.y, - sd->grid.w, y - sd->cursor.y + 1); - } - preedit_x = x - sd->cursor.x; - preedit_y = y - sd->cursor.y; - } - termpty_backlog_unlock(); + termio_internal_render(sd, + ox, oy, + &preedit_x, &preedit_y); EINA_LIST_FOREACH_SAFE(sd->pty->block.active, l, ln, blk) { diff --git a/src/bin/termio.h b/src/bin/termio.h index fac37ab..b842e7b 100644 --- a/src/bin/termio.h +++ b/src/bin/termio.h @@ -75,4 +75,9 @@ void termio_sel_set(Termio *sd, Eina_Bool enable); void termio_smart_cb_mouse_move_job(void *data); + +void +termio_block_activate(Evas_Object *obj, Termblock *blk); +const char * +term_preedit_str_get(Term *term); #endif diff --git a/src/bin/termiointernals.c b/src/bin/termiointernals.c index 9ecc2b2..ec1ff62 100644 --- a/src/bin/termiointernals.c +++ b/src/bin/termiointernals.c @@ -5,6 +5,7 @@ #include "termio.h" #include "miniview.h" #include "termpty.h" +#include "termptydbl.h" #include "termptyops.h" #include "termiointernals.h" #include "utf8.h" @@ -2184,3 +2185,364 @@ termio_scroll(Evas_Object *obj, int direction, _termio_scroll_selection(sd, ty, direction, start_y, end_y); } +void +termio_internal_render(Termio *sd, + Evas_Coord ox, Evas_Coord oy, + int *preedit_xp, int *preedit_yp) +{ + int x, y, ch1 = 0, ch2 = 0, inv = 0, preedit_x = 0, preedit_y = 0; + const char *preedit_str; + ssize_t w; + int sel_start_x = 0, sel_start_y = 0, sel_end_x = 0, sel_end_y = 0; + Eina_Unicode *cp; + Termblock *blk; + Eina_List *l; + + EINA_LIST_FOREACH(sd->pty->block.active, l, blk) + { + blk->was_active = blk->active; + blk->active = EINA_FALSE; + } + + + inv = sd->pty->termstate.reverse; + termpty_backlog_lock(); + termpty_backscroll_adjust(sd->pty, &sd->scroll); + + /* Make selection bottom to top */ + sel_start_x = sd->pty->selection.start.x; + sel_start_y = sd->pty->selection.start.y; + sel_end_x = sd->pty->selection.end.x; + sel_end_y = sd->pty->selection.end.y; + if (!sd->pty->selection.is_top_to_bottom) + { + INT_SWAP(sel_start_y, sel_end_y); + INT_SWAP(sel_start_x, sel_end_x); + } + cp = sd->pty->selection.codepoints; + + /* Look at every visible line */ + for (y = 0; y < sd->grid.h; y++) + { + Termcell *cells; + Evas_Textgrid_Cell *tc; + int cur_sel_start_x = -1, cur_sel_end_x = -1; + int rel_y = y - sd->scroll; + + w = 0; + cells = termpty_cellrow_get(sd->pty, rel_y, &w); + if (!cells) + continue; + tc = evas_object_textgrid_cellrow_get(sd->grid.obj, y); + if (!tc) + continue; + + /* Compute @cur_sel_start_x, @cur_sel_end_x */ + if (sd->pty->selection.codepoints) + { + if (sel_start_y <= rel_y && rel_y <= sel_end_y) + { + if (sd->pty->selection.is_box) + { + cur_sel_start_x = sel_start_x; + cur_sel_end_x = sel_end_x; + } + else + { + cur_sel_start_x = sel_start_x; + cur_sel_end_x = sel_end_x; + if (sel_start_y != sel_end_y) + { + if (rel_y == sel_start_y) + { + cur_sel_end_x = sd->grid.w - 1; + } + else if (y == sel_end_y) + { + cur_sel_start_x = 0; + } + else + { + cur_sel_start_x = 0; + cur_sel_end_x = sd->grid.w - 1; + } + } + } + } + } + + ch1 = -1; + /* Look at every cell in that line */ + for (x = 0; x < sd->grid.w; x++) + { + Eina_Unicode *u = NULL; + + if (cp && cur_sel_start_x <= x && x <= cur_sel_end_x) + u = cp; + + if ((!cells) || (x >= w)) + { + if ((tc[x].codepoint != 0) || + (tc[x].bg != COL_INVIS) || + (tc[x].bg_extended)) + { + if (ch1 < 0) + ch1 = x; + ch2 = x; + } + tc[x].codepoint = 0; + tc[x].bg = (inv) ? COL_INVERSEBG : COL_INVIS; + tc[x].bg_extended = 0; + tc[x].underline = 0; + tc[x].strikethrough = 0; + tc[x].bold = 0; + tc[x].italic = 0; + tc[x].double_width = 0; + + if (u && *u != ' ') + { + termio_sel_set(sd, EINA_FALSE); + u = cp = NULL; + } + } + else + { + int bid, bx = 0, by = 0; + + bid = termpty_block_id_get(&(cells[x]), &bx, &by); + if (bid >= 0) + { + if (ch1 < 0) + ch1 = x; + ch2 = x; + tc[x].codepoint = 0; + tc[x].fg_extended = 0; + tc[x].bg_extended = 0; + tc[x].underline = 0; + tc[x].strikethrough = 0; + tc[x].bold = 0; + tc[x].italic = 0; + tc[x].double_width = 0; + tc[x].fg = COL_INVIS; + tc[x].bg = COL_INVIS; + blk = termpty_block_get(sd->pty, bid); + if (blk) + { + termio_block_activate(sd->self, blk); + blk->x = (x - bx); + blk->y = (y - by); + evas_object_move(blk->obj, + ox + (blk->x * sd->font.chw), + oy + (blk->y * sd->font.chh)); + evas_object_resize(blk->obj, + blk->w * sd->font.chw, + blk->h * sd->font.chh); + } + if (u && *u != ' ') + { + termio_sel_set(sd, EINA_FALSE); + u = cp = NULL; + } + } + else if (cells[x].att.invisible) + { + if ((tc[x].codepoint != 0) || + (tc[x].bg != COL_INVIS) || + (tc[x].bg_extended)) + { + if (ch1 < 0) + ch1 = x; + ch2 = x; + } + tc[x].codepoint = 0; + tc[x].bg = (inv) ? COL_INVERSEBG : COL_INVIS; + tc[x].bg_extended = 0; + tc[x].underline = 0; + tc[x].strikethrough = 0; + tc[x].bold = 0; + tc[x].italic = 0; + tc[x].double_width = cells[x].att.dblwidth; + if ((tc[x].double_width) && (tc[x].codepoint == 0) && + (ch2 == x - 1)) + ch2 = x; + if (u && *u != ' ') + { + termio_sel_set(sd, EINA_FALSE); + u = cp = NULL; + } + } + else + { + int fg, bg, fgext, bgext, bold, italic; + Eina_Unicode codepoint; + + // colors + fg = cells[x].att.fg; + bg = cells[x].att.bg; + fgext = cells[x].att.fg256; + bgext = cells[x].att.bg256; + codepoint = cells[x].codepoint; + if (sd->config->font.bolditalic) + { + bold = cells[x].att.bold; + italic = cells[x].att.italic; + } + else + { + bold = 0; + italic = 0; + } + + if ((fg == COL_DEF) && (cells[x].att.inverse ^ inv)) + fg = COL_INVERSEBG; + if (bg == COL_DEF) + { + if (cells[x].att.inverse ^ inv) + bg = COL_INVERSE; + else if (!bgext) + bg = COL_INVIS; + } + if ((cells[x].att.fgintense) && (!fgext)) + fg += 48; + if ((cells[x].att.bgintense) && (!bgext)) + bg += 48; + if ((cells[x].att.bold) && (!fgext)) + fg += 12; + if ((cells[x].att.faint) && (!fgext)) + fg += 24; + if (cells[x].att.inverse ^ inv) + { + int t; + t = fgext; fgext = bgext; bgext = t; + t = fg; fg = bg; bg = t; + } + if ((tc[x].codepoint != codepoint) || + (tc[x].bold != bold) || + (tc[x].italic != italic) || + (tc[x].fg != fg) || + (tc[x].bg != bg) || + (tc[x].fg_extended != fgext) || + (tc[x].bg_extended != bgext) || + (tc[x].underline != cells[x].att.underline) || + (tc[x].strikethrough != cells[x].att.strike)) + { + if (ch1 < 0) + ch1 = x; + ch2 = x; + } + tc[x].fg_extended = fgext; + tc[x].bg_extended = bgext; + tc[x].underline = cells[x].att.underline; + tc[x].strikethrough = cells[x].att.strike; + if (sd->config->font.bolditalic) + { + tc[x].bold = cells[x].att.bold; + tc[x].italic = cells[x].att.italic; + } + else + { + tc[x].bold = 0; + tc[x].italic = 0; + } + tc[x].double_width = cells[x].att.dblwidth; + tc[x].fg = fg; + tc[x].bg = bg; + tc[x].codepoint = codepoint; + if ((tc[x].double_width) && (tc[x].codepoint == 0) && + (ch2 == x - 1)) + ch2 = x; + // cells[x].att.blink + // cells[x].att.blink2 + if (u && *u != codepoint) + { + termio_sel_set(sd, EINA_FALSE); + u = cp = NULL; + } + } + } + } + evas_object_textgrid_cellrow_set(sd->grid.obj, y, tc); + /* only bothering to keep 1 change span per row - not worth doing + * more really */ + if (ch1 >= 0) + evas_object_textgrid_update_add(sd->grid.obj, ch1, y, + ch2 - ch1 + 1, 1); + } + + preedit_str = term_preedit_str_get(sd->term); + if (preedit_str && preedit_str[0]) + { + Eina_Unicode *uni, g; + int len = 0, i, jump, xx, backx; + Eina_Bool dbl; + Evas_Textgrid_Cell *tc; + x = sd->cursor.x, y = sd->cursor.y; + + uni = eina_unicode_utf8_to_unicode(preedit_str, &len); + if (uni) + { + for (i = 0; i < len; i++) + { + jump = 1; + g = uni[i]; + dbl = _termpty_is_dblwidth_get(sd->pty, g); + if (dbl) jump = 2; + backx = 0; + if ((x + jump) > sd->grid.w) + { + if (y < (sd->grid.h - 1)) + { + x = jump; + backx = jump; + y++; + } + } + else + { + x += jump; + backx = jump; + } + tc = evas_object_textgrid_cellrow_get(sd->grid.obj, y); + xx = x - backx; + tc[xx].bold = 1; + tc[xx].bg = COL_BLACK; + tc[xx].fg = COL_WHITE; + tc[xx].fg_extended = 0; + tc[xx].bg_extended = 0; + tc[xx].underline = 1; + tc[xx].strikethrough = 0; + tc[xx].double_width = dbl; + tc[xx].codepoint = g; + if (dbl) + { + xx = x - backx + 1; + tc[xx].bold = 1; + tc[xx].bg = COL_BLACK; + tc[xx].fg = COL_WHITE; + tc[xx].fg_extended = 0; + tc[xx].bg_extended = 0; + tc[xx].underline = 1; + tc[xx].strikethrough = 0; + tc[xx].double_width = 0; + tc[xx].codepoint = 0; + } + evas_object_textgrid_cellrow_set(sd->grid.obj, y, tc); + if (x >= sd->grid.w) + { + if (y < (sd->grid.h - 1)) + { + x = 0; + y++; + } + } + } + evas_object_textgrid_update_add(sd->grid.obj, 0, sd->cursor.y, + sd->grid.w, y - sd->cursor.y + 1); + } + preedit_x = x - sd->cursor.x; + preedit_y = y - sd->cursor.y; + } + termpty_backlog_unlock(); + *preedit_xp = preedit_x; + *preedit_yp = preedit_y; +} diff --git a/src/bin/termiointernals.h b/src/bin/termiointernals.h index 641fa3d..fb5ddeb 100644 --- a/src/bin/termiointernals.h +++ b/src/bin/termiointernals.h @@ -132,4 +132,8 @@ termio_scroll(Evas_Object *obj, int direction, int start_y, int end_y); void termio_cursor_to_xy(Termio *sd, Evas_Coord x, Evas_Coord y, int *cx, int *cy); +void +termio_internal_render(Termio *sd, + Evas_Coord ox, Evas_Coord oy, + int *preedit_xp, int *preedit_yp); #endif diff --git a/src/bin/tyfuzz.c b/src/bin/tyfuzz.c index e30144c..b104081 100644 --- a/src/bin/tyfuzz.c +++ b/src/bin/tyfuzz.c @@ -66,7 +66,7 @@ main_config_sync(const Config *config EINA_UNUSED) Termio * -termio_get_from_obj(Evas_Object *obj) +termio_get_from_obj(Evas_Object *obj EINA_UNUSED) { return &_sd; } @@ -187,6 +187,18 @@ termio_font_size_set(Evas_Object *obj EINA_UNUSED, _sd.font.size = size; } +const char * +term_preedit_str_get(Term *term EINA_UNUSED) +{ + return NULL; +} + +void +termio_block_activate(Evas_Object *obj EINA_UNUSED, + Termblock *blk EINA_UNUSED) +{ +} + #ifndef TYTEST void termio_set_cursor_shape(Evas_Object *obj EINA_UNUSED, diff --git a/src/bin/win.h b/src/bin/win.h index 78a62b3..1152484 100644 --- a/src/bin/win.h +++ b/src/bin/win.h @@ -66,8 +66,6 @@ void term_down(Term *term); void term_left(Term *term); void term_right(Term *term); -const char * -term_preedit_str_get(Term *term); Ecore_IMF_Context * term_imf_context_get(Term *term); --
