免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2772 | 回复: 9
打印 上一主题 下一主题

怎么DFBterm用着有问题呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-10 13:38 |只看该作者 |倒序浏览
DFBterm是基于DFB的终端。
在官网上下的 DFBTerm-0.8.15.tar.gz 和 LiTE-0.8.10.tar.gz ,编译成功后,运行./dfbterm时为什么写命令时却是两个字母两个字母的显示呢?

比如:我敲一下 f ,就会出现两个f,然后删除也 是两个两个的删。

太奇怪了,大家遇到过这种情况没有呢?

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
2 [报告]
发表于 2009-03-10 13:55 |只看该作者
可能输入回显没有去掉
可以修改一下源代码相关部分

论坛徽章:
0
3 [报告]
发表于 2009-03-10 14:17 |只看该作者
呵,是啊,我也这么想的,可是大概的是哪儿呢?
虽然代码不多,但是确实有点晕啊!

论坛徽章:
0
4 [报告]
发表于 2009-03-10 14:24 |只看该作者
我感觉应该是这个函数,所以,版主,我把它复制下来了,您看一下大概哪儿应该是控制回显的地方呢?

static void term_handle_key (Term *term, DFBWindowEvent *evt)
{
     struct _vtx *vtx = term->vtx;
     term->modifiers = evt->modifiers;
     if (evt->type == DWET_KEYUP)
          return;

     if (evt->modifiers == DIMM_CONTROL && evt->key_symbol == DIKS_ENTER) {
          IDirectFBWindow *window = term->lw->window;
          if (term->hot_key) {
               window->UngrabKey (window, DIKS_ENTER, DIMM_CONTROL);
               lite_restore_window (term->lw);
               window->RequestFocus (window);
               term->hot_key = DFB_FALSE;
          }
          else {
               DFBResult ret;
               ret = window->GrabKey (window, DIKS_ENTER, DIMM_CONTROL);
               if (ret) {
                    DirectFBError ("IDirectFBWindow::GrabKey() failed", ret);
                    return;
               }
               lite_minimize_window (term->lw);
               term->hot_key = DFB_TRUE;
          }
          return;
     }
     if (evt->modifiers  == DIMM_CONTROL &&
         evt->key_symbol >= DIKS_SMALL_A &&
         evt->key_symbol <= DIKS_SMALL_Z) {
          char c = evt->key_symbol - DIKS_SMALL_A + 1;
          vt_writechild (&vtx->vt, &c, 1);
     }
     else if ((evt->key_symbol >   9 && evt->key_symbol < 127) ||
              (evt->key_symbol > 127 && evt->key_symbol < 256)) {
          char c = evt->key_symbol & 0xff;
          if (evt->modifiers & DIMM_CONTROL) {
               switch (evt->key_symbol) {
                    case ' ':
                         vt_writechild (&vtx->vt, "\000", 1);
                         break;
                    case '3':
                    case '[':
                         vt_writechild (&vtx->vt, "\033", 1);
                         break;
                    case '4':
                    case '\\':
                         vt_writechild (&vtx->vt, "\034", 1);
                         break;
                    case '5':
                    case ']':
                         vt_writechild (&vtx->vt, "\035", 1);
                         break;
                    case '6':
                         vt_writechild (&vtx->vt, "\036", 1);
                         break;
                    case '7':
                    case '-':
                         vt_writechild (&vtx->vt, "\037", 1);
                         break;
                    default:
                         vt_writechild (&vtx->vt, &c, 1);
                         break;
               }
          }
          else
               vt_writechild (&vtx->vt, &c, 1);
     }
     else {
          switch (evt->key_symbol) {
               case DIKS_BACKSPACE:
                    vt_writechild (&vtx->vt, "\177", 1);
                    break;
               case DIKS_TAB:
                    if (evt->modifiers & DIMM_SHIFT)   /* back tab */
                         vt_writechild (&vtx->vt, "\033[Z", 3);
                    else
                         vt_writechild (&vtx->vt, "\t", 1);
                    break;
               case DIKS_DELETE:
                    vt_writechild (&vtx->vt, "\033[3~", 4);
                    break;
               case DIKS_INSERT:
                    vt_writechild (&vtx->vt, "\033[2~", 4);
                    break;
               case DIKS_CURSOR_LEFT:
                    if (vtx->vt.mode & VTMODE_APP_CURSOR)
                         vt_writechild (&vtx->vt, "\033OD", 3);
                    else
                         vt_writechild (&vtx->vt, "\033[D", 3);
                    break;
               case DIKS_CURSOR_RIGHT:
                    if (vtx->vt.mode & VTMODE_APP_CURSOR)
                         vt_writechild (&vtx->vt, "\033OC", 3);
                    else
                         vt_writechild (&vtx->vt, "\033[C", 3);
                    break;
               case DIKS_CURSOR_UP:
                    if (vtx->vt.mode & VTMODE_APP_CURSOR)
                         vt_writechild (&vtx->vt, "\033OA", 3);
                    else
                         vt_writechild (&vtx->vt, "\033[A", 3);
                    break;
               case DIKS_CURSOR_DOWN:
                    if (vtx->vt.mode & VTMODE_APP_CURSOR)
                         vt_writechild (&vtx->vt, "\033OB", 3);
                    else
                         vt_writechild (&vtx->vt, "\033[B", 3);
                    break;
               case DIKS_HOME:
                    vt_writechild (&vtx->vt, "\033OH", 3);
                    break;
               case DIKS_END:
                    vt_writechild (&vtx->vt, "\033OF", 3);
                    break;
               case DIKS_PAGE_UP:
                    vt_writechild (&vtx->vt, "\033[5~", 4);
                    break;
               case DIKS_PAGE_DOWN:
                    vt_writechild (&vtx->vt, "\033[6~", 4);
                    break;
               case DIKS_F1:
                    vt_writechild (&vtx->vt, "\033OP", 3);
                    break;
               case DIKS_F2:
                    vt_writechild (&vtx->vt, "\033OQ", 3);
                    break;
               case DIKS_F3:
                    vt_writechild (&vtx->vt, "\033OR", 3);
                    break;
               case DIKS_F4:
                    vt_writechild (&vtx->vt, "\033OS", 3);
                    break;
               case DIKS_F5 ... DIKS_F12:
                    {
                         char buf[6];

                         sprintf (buf, "\033[%d~", f5_f12_remap[evt->key_symbol - DIKS_F5]);
                         vt_writechild (&vtx->vt, buf, strlen(buf));
                    }
                    break;
               default:
                    return;
          }
     }
     if (vtx->selected) {
          vtx->selstartx = vtx->selendx;
          vtx->selstarty = vtx->selendy;
          vt_draw_selection (vtx);  /* un-render selection */
          vtx->selected = 0;
     }
     if (vtx->vt.scrollbackoffset) {
          vtx->vt.scrollbackoffset = 0;

          vt_update (vtx, UPDATE_SCROLLBACK);
          vt_cursor_state (term, 1);

          term_update_scrollbar (term);
     }
}

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
5 [报告]
发表于 2009-03-10 14:44 |只看该作者
这个函数不像,不知道高手们看出什么来没

论坛徽章:
0
6 [报告]
发表于 2009-03-10 14:52 |只看该作者
看来确实不好找啊!

论坛徽章:
0
7 [报告]
发表于 2009-03-10 16:11 |只看该作者
呵,搞定了,原来把 .directfbrc 中的system改为sdl,就ok了!

也不知道为什么!

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
8 [报告]
发表于 2009-03-10 16:21 |只看该作者
使用sdl不用fbdev了?

论坛徽章:
0
9 [报告]
发表于 2009-03-10 16:43 |只看该作者
呵, 刚忘说了,改成fbdev也是OK的

论坛徽章:
0
10 [报告]
发表于 2009-12-16 17:05 |只看该作者

请问~

请问是修改家目录底下的.directfb吗?

可是我在里面加了system=fbdev

还是不行...还是有打一个字出现两个字的问题?

请问有其它办法吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP