LinuxSir.cn,穿越时空的Linuxsir!

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

解决KDE程序中使用scim,终端输出很多烦人信息的ebuild(附件在回帖)。

[复制链接]
发表于 2008-1-18 09:02:46 | 显示全部楼层 |阅读模式
问题:在KDE程序中使scim作为输入法时,如果KDE程序是从终端启动,那么会在终端中输出很多的调试信息。从google来的结果看。这个问题在2005年已经出现,当时Sir上的帖子中贴的输出已经有了这个问题,只不过大家一直没有当作BUG看待。只有Mandavia发行版本才为RPM包打了一个补丁,未测试其效果。

原理:输出信息系scim-qtimm和为qt-3的qt-x11-immoudles组件等打的补丁中,使用了很多的调试输出的调用并且没有注释掉。

解决方法:注释掉这些无关紧要的代码即可清静。

警告:这里只做建议性修改方法,具体目录请根据个人环境变通。强烈建议等待热心网友做的ebuild(本人不会)。对于任何尝试过程中造成的后果,本人概不负责。

操作步骤:
1、qt代码的修改方法。限qt-3.3.8-r4的ebuild。
     先将代码解压:

  1. sudo ebuild /usr/portage/x11-libs/qt/qt-3.3.8-r4.ebuild unpack
复制代码

    然后cd到/var/tmp/portage/x11-libs/qt-3.3.8-r4/work/qt-x11-free-3.3.8/src/kernel目录,使用vi编辑qinputcontext.cpp文件,将527行到539中的3句qDebug的输出语句注释掉:

  1.    527
  2.    528     if ( type == QEvent::IMStart ) {
  3.    529 //      qDebug( "sending IMStart with %d chars to %p",
  4.    530 //              text.length(), receiver );
  5.    531         event = new QIMEvent( type, text, cursorPosition );
  6.    532     } else if ( type == QEvent::IMEnd ) {
  7.    533 //      qDebug( "sending IMEnd with %d chars to %p, text=%s",
  8.    534 //              text.length(), receiver, (const char*)text.local8Bit() );
  9.    535         event = new QIMEvent( type, text, cursorPosition );
  10.    536     } else if ( type == QEvent::IMCompose ) {
  11.    537 //      qDebug( "sending IMCompose to %p with %d chars, cpos=%d, sellen=%d,
  12.         text=%s",
  13.    538 //              receiver, text.length(), cursorPosition, selLength,
  14.    539 //              (const char*)text.local8Bit() );
  15.    540         event = new QIMComposeEvent( type, text, cursorPosition, selLength
  16.        );
  17.    541     }
复制代码

      然后,切换到/var/tmp/portage/x11-libs/qt-3.3.8-r4/work/qt-x11-free-3.3.8/plugins/src/inputmethods/imsw-multi目录,编辑qmultiinputcontext.cpp文件,将309,310的两行调试语句注视掉:

  1.    306
  2.    307         currentIMKey = key;
  3.    308
  4.    309 //      qDebug( "QMultiInputContext::changeInputMethod(): index=%d, slave=%       s",
  5.    310 //              imIndex, (const char *)_slave->identifierName() );
  6.    311     }
  7.    312 }
  8.    313
复制代码

   最后依次执行

  1. sudo ebuild /usr/portage/x11-libs/qt/qt-3.3.8-r4.ebuild compile
  2. sudo ebuild /usr/portage/x11-libs/qt/qt-3.3.8-r4.ebuild install
  3. sudo ebuild /usr/portage/x11-libs/qt/qt-3.3.8-r4.ebuild qmerge
复制代码

  介此qt补丁的修改工作完毕。
2、下面是修改scim-qtimm原理同上

  1. sudo ebuild /usr/portage/app-i18n/scim-qtimm/scim-qtimm-0.9.4.ebuild unpack
  2. cd /var/tmp/portage/app-i18n/scim-qtimm-0.9.4/work/scim-qtimm-0.9.4/src
复制代码

     先编辑plugin.cpp,将构造和析构函数中的qDebug语句注视掉:

  1.      9 class ScimInputContextPlugin : public QInputContextPlugin
  2.     10 {
  3.     11 public:
  4.     12     ScimInputContextPlugin() : QInputContextPlugin() {
  5.     13 //        qDebug("ScimInputContextPlugin()");
  6.     14     }
  7.     15
  8.     16     ~ScimInputContextPlugin()
  9.     17     {
  10.     18   //      qDebug("~ScimInputContextPlugin()");
  11.     19     }
复制代码

    再编辑qsciminputcontext.cpp文件,将310-312的3行注视掉:

  1.     305             config_module_name = config_list [0];                             
  2.     306     } else {
  3.     307         config_module_name = "dummy";                                   
  4.     308     }
  5.     309                                                                              
  6.     310  //   if (config_module_name != "kconfig") {
  7.     311 //        std::cerr << "WARNING: please edit ~/.scim/global and change /DefaultConfigModule to kconfig\n";
  8.     312   //  }
  9.     313
  10.     314     const char *engine_list_str = getenv ("QT_IM_SCIM_IMENGINE_MODULES");
  11.     315     if (engine_list_str != NULL) {
  12.     316         std::vector <String> spec_engine_list;
  13.     317         scim_split_string_list (spec_engine_list, engine_list_str, ',');
  14.     318         
复制代码

    最后:

  1. sudo ebuild /usr/portage/app-i18n/scim-qtimm/scim-qtimm-0.9.4.ebuild compile
  2. sudo ebuild /usr/portage/app-i18n/scim-qtimm/scim-qtimm-0.9.4.ebuild install
  3. sudo ebuild /usr/portage/app-i18n/scim-qtimm/scim-qtimm-0.9.4.ebuild qmerge
复制代码


终端启动一个KDE程序,切换输入法打几个字试试,是不是清静了?
 楼主| 发表于 2008-1-18 17:23:19 | 显示全部楼层
用KDE+scim也不少吧?谁来做个新的ebuild呢?
回复 支持 反对

使用道具 举报

发表于 2008-1-18 18:35:49 | 显示全部楼层
你可以先试着作一个补丁
解压缩
cp qt-xxx qt-xxx.orig
在qt-xxx里修改
改完 diff -urN qt-xxx{.orig,} > qt-xxx.patch
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-18 18:37:08 | 显示全部楼层
Post by zhllg;1808616
你可以先试着作一个补丁
解压缩
cp qt-xxx qt-xxx.orig
在qt-xxx里修改
改完 diff -urN qt-xxx{.orig,} > qt-xxx.patch


好的,我尝试一下:)
回复 支持 反对

使用道具 举报

发表于 2008-1-18 19:20:17 | 显示全部楼层
cp时别忘了-r,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-18 20:14:32 | 显示全部楼层
Post by zhllg;1808619
cp时别忘了-r,


多谢提醒。这样,我索性照着原来的ebuild抄了一份。不知道这样是否符合标准。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2008-1-18 20:27:18 | 显示全部楼层
这是个问题
比如编程的时候要求获取kdialog中的输入内容,就会有这些东西,解决的方法很强悍,直接在启动kdialog的时候加个2>/dev/null,把一切错误扔进黑洞
回复 支持 反对

使用道具 举报

发表于 2008-1-18 20:29:29 | 显示全部楼层
你的补丁叫什么名字?补丁放在files目录里
提交对ebuild的修改最好也提交补丁,这样一目了然
提醒一下,如果你已经知道这个,当我没说:
ebuild是一定要改的,只需要在src_unpack()里加一行即可
epatch ${FILESDIR}/your-patch-name.diff
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-18 20:52:35 | 显示全部楼层
Post by zhllg;1808630
你的补丁叫什么名字?补丁放在files目录里
提交对ebuild的修改最好也提交补丁,这样一目了然
提醒一下,如果你已经知道这个,当我没说:
ebuild是一定要改的,只需要在src_unpack()里加一行即可
epatch ${FILESDIR}/your-patch-name.diff

我是这样做的,不知道是否可行。在另一个overlay里面创建的x11-libs/qt目录。然后拷贝了一份qt-3.3.8-r4为r5。然后照你说的做。补丁拷贝到files目录里。并且修改了ebuild中的内容。然后就是用ebuild命令生成摘要,之后emerge测试通过。

代码补丁的命名规则我是按照原来的补丁的规则起的,只是改了下时间:qt-x11-immodule-unified-qt3.3.8-20080118-gentoo.diff

ebuild的补丁我没有做,现在马上生成一个。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-18 21:06:10 | 显示全部楼层

  1. --- qt-3.3.8-r4.ebuild        2008-01-18 20:52:55.000000000 +0800
  2. +++ qt-3.3.8-r5.ebuild        2008-01-18 19:53:49.000000000 +0800
  3. @@ -138,6 +138,7 @@

  4.         if use immqt || use immqt-bc ; then
  5.                 epatch ../${IMMQT_P}.diff
  6. +                epatch ${FILESDIR}/qt-x11-immodule-unified-qt3.3.8-20080118-gentoo.diff
  7.                 sh make-symlinks.sh || die "make symlinks failed"
  8.         fi

复制代码


这是ebuild的patch,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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