LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1243|回复: 13

fcitx导致emacs崩溃,bug?

[复制链接]
发表于 2003-6-11 13:35:00 | 显示全部楼层 |阅读模式
软件:
fcitx-1.8.5, emacs 21.3 (RH7.3自带的那个版本), RH7.3系统
症状:
在emacs21.3中输入汉字,当用鼠标点击输入法状态条上的“全角/半角”或“中文/英文”或“输入法”切换按钮时,emacs崩溃。
使用快捷键做这些切换时,没有问题。所以不妨碍正常使用。然而这总是fcitx的美中不足吧,或者这个bug的更多影响还没有被发现。希望下一个版本改正!
**********************************************
另外,使用miniChinput没有这个问题,虽然不太好用。稳定大概是RH选择miniChinput的原因吧。fcitx在快速演进,功能已经很强大了,若更加注意编码的稳定性,前途很好。
发表于 2003-6-11 15:15:51 | 显示全部楼层
的确有这个问题,不过用shift+space来切换没事,看代码中……
发表于 2003-6-12 01:58:09 | 显示全部楼层
http://www.linuxfans.org/nuke/mo ... geninfo&did=920
试试这个,应该没有问题了
 楼主| 发表于 2003-6-12 14:28:31 | 显示全部楼层
最初由 euboy 发表
http://www.linuxfans.org/nuke/mo ... geninfo&did=920
试试这个,应该没有问题了

我也是用的fcitx-1.8.5版本呀,有什么不同?
请说说为什么出现我遇到的问题,如何解决的,这样用起来才有信心嘛。
发表于 2003-6-12 16:03:26 | 显示全部楼层
好像这个问题原因在于emacs,正常点的时候,它返回的是ButtonRelease,然而有的时候,会返回33和6,这两个是随机的。我现在用的方法很土,就是不检查鼠标的释放事件,就能在emacs里随便点了。不知道真正的原因在哪里??
我是把xim.c里面改了改:

  1.         case Button1:
  2.             if (event->xbutton.window == InputWindow)
  3.                 MouseClick (event->xbutton.x, event->xbutton.y, 1);
  4.             else if (event->xbutton.window == MainWindow) {
  5.                 if (IsInBox (event->xbutton.x, event->xbutton.y, 6, 1, 24, 1 + MAINWND_HEIGHT  - 1)) {
  6.                     //Change IME
  7.                     XPoint          point;

  8.                     //                    WaitButtonRelease (&point);
  9.                     //                    if (IsInBox (event->xbutton.x, event->xbutton.y, 6, 1, 24, 1 + MAINWND_HEIGHT  - 1))
  10.                         SwitchIM (-1,0);
  11.                 }
  12.                 else if (IsInBox (event->xbutton.x, event->xbutton.y, 26, 1, 44, MAINWND_HEIGHT - 1)) {
  13.                     // In PUNC box
  14.                     XPoint          point;

  15.                     DrawPuncIcon (!bPunc);
  16.                     //                    WaitButtonRelease (&point);
  17.                     //                    if (IsInBox (point.x, point.y, 26, 1, 44, MAINWND_HEIGHT - 1))
  18.                         bPunc = !bPunc;
  19.                     DrawPuncIcon (bPunc);
  20.                 }
  21.                 else if (IsInBox (event->xbutton.x, event->xbutton.y, 46, 1, 64, MAINWND_HEIGHT - 1)) {
  22.                     // In CORNER box
  23.                     XPoint          point;

  24.                     DrawCornerIcon (!bCorner);
  25.                     //                    WaitButtonRelease (&point);
  26.                     //                    if (IsInBox (point.x, point.y, 46, 1, 64, MAINWND_HEIGHT - 1))
  27.                         bCorner = !bCorner;
  28.                     DrawCornerIcon (bCorner);
  29.                 }
  30.                 else {
  31.                     MouseClick (event->xbutton.x, event->xbutton.y, 0);
  32.                 }
  33.             }
复制代码

就是注释掉了一些东西。
发表于 2003-6-12 16:33:33 | 显示全部楼层
最初由 friday 发表
我也是用的fcitx-1.8.5版本呀,有什么不同?
请说说为什么出现我遇到的问题,如何解决的,这样用起来才有信心嘛。


fcitx中处理事件有一处没有判定指针的状态,常导致fcitx崩溃,我改了它,然后在emacs使用也就正常了。当然我以前没发现你说的这个bug,
发表于 2003-6-12 17:05:16 | 显示全部楼层

哪个地方

最初由 euboy 发表
fcitx中处理事件有一处没有判定指针的状态,常导致fcitx崩溃,我改了它,然后在emacs使用也就正常了。当然我以前没发现你说的这个bug,

免得我自己乱找……
发表于 2003-6-12 19:48:31 | 显示全部楼层
函数SwitchIM ()里头用到了CurrentIC,
如果该指针空,调用该函数就会产生中断信号.
发表于 2003-6-12 20:21:56 | 显示全部楼层
空。

现在越来越喜欢fcitx,经常用linux的原因,就是因为现在的这个fcitx。真的是越用越爽,哈哈!!
 楼主| 发表于 2003-6-12 23:17:48 | 显示全部楼层
我发帖子的目的就是找出问题,现在tram有了一个方案,euboy也有一个,不过关于bug出在哪里,tram的意见是emacs,euboy的意见是fcitx。我是倾向于后者的,因为emacs实在是一个有着很长历史的优秀软件,代码被检查过多次,然而输入法模块在emacs中毕竟不那么重要,或许会出问题呢?
大家努力吧,若发现了emacs的bug就报告给维护者,这也是linuxsir的贡献,若发现fcitx的不足,由yuking兄改正了,fcitx更完美了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表