WikidPad在Linux下输入法不能正常使用(转贴)

WikidPad在Linux下输入法不能正常使用(转贴)

 

(该问题困扰我很久了,再次感谢这位达人!)

http://hi.baidu.com/gerald07/blog/item/22ed58d285d36fdd572c8452.html

WikidPad在Linux下输入法不能正常使用
2010-09-29 11:28

WikidPad是一款非常好的基于wxPython的Wiki笔记软件,由于使用Python编写,它可以跨平台使用。

但是,WikidPad在Linux下与中文输入法有冲突。

  • IBus在WikidPad的文本框中能正常打开,但是退格时会删除前面的字而不是删除输入法中已键入的字符。
  • fcitx在WikidPad的文本框中不能正常打开,只能先从其它地方打开,然后到文本框中进行输入,也有退格后优先删除文本框中文字的问题。
  • Scim在WikidPad中根本无法输入。

WikidPad的文本输入框使用的是StyledTextCtrl,它绑定了一些基本的命令按键,其中就包括了Backspace,所以遇到Backspace时会直接执行删除文本框前一个字的命令,而不会将其传递给输入法。如果解绑此键,则输入法中退格正常,但是在文本框中不会退格,而会增加一个退格键的字符(Chr(8),显示为“BS”)。

幸运的是,通过阅读源代码,发现解决方法如下:

  1. 有些输入法无法打开的问题主要是因为WikidPad默认将Ctrl-Space作为了自动完成的快捷键,与输入法的默认开关快捷键冲突,而将其拦截,导致无法打开输入法。修改源代码如下:
    • ./extensions/KeyBindings.py:找到Ctrl-Space,将其改成其它组合键,如Ctrl-Shift-Return,输入法的打开和关闭就正常了。
  2. 第二个问题是因为StyledTextCtrl中通过CmdKeyAssign方法绑定并拦截了Backspace键,所以退格键不会被传递到输入法,同样被拦截的还有回车键(Return)。修改源代码如下:
    • ./lib/pwiki/EnhancedScintillaControl.py:在_DEFAULT_STC_KEYS中找到
      • (wx.stc.STC_KEY_ESCAPE, wx.stc.STC_SCMOD_NORM, wx.stc.STC_CMD_CANCEL)
      • (wx.stc.STC_KEY_BACK, wx.stc.STC_SCMOD_NORM, wx.stc.STC_CMD_DELETEBACK)
      • (wx.stc.STC_KEY_RETURN, wx.stc.STC_SCMOD_NORM, wx.stc.STC_CMD_NEWLINE)
      将其注释或删除,就可以解绑并让输入法获取Esc、退格和回车键。
    • ./lib/pwiki/WikiTxtCtrl.py:在最后加上_IME_KEYS={wx.WXK_BACK:wx.stc.STC_CMD_DELETEBACK, wx.WXK_RETURN:wx.stc.STC_CMD_NEWLINE, wx.WXK_ESCAPE:wx.stc.STC_CMD_CANCEL}。再在OnChar_ImeWorkaround函数里添加红色部分内容:
      def OnChar_ImeWorkaround(self, evt):
      	key=evt.GetKeyCode()
      	if key in _IME_KEYS:
      		self.CmdKeyExecute(_IME_KEYS[key])
      		return
      这样就重新绑定了上面解绑的键。
  3. ./lib/pwiki/Configuration.py:在GLOBALDEFAULTS中找到("main", "editor_useImeWorkaround")并将其默认设置改成u"True",这样就使得上面针对输入法的函数的修改生效。如果修改默认值后依然无效,则可能是已经生成了配置文件,需要到个人目录中找到配置文件(如~/.WikidPad.config)并修改[main]中的editor_useimeworkaround值为True

奇怪的是,这个问题似乎只在Linux中体现出来,可能是因为Windows中输入法的工作方式经过了系统处理吧,鄙人不懂这个,不作深究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值