WikidPad是一款非常好的基于wxPython的Wiki笔记软件,由于使用Python编写,它可以跨平台使用。
但是,WikidPad在Linux下与中文输入法有冲突。
- IBus在WikidPad的文本框中能正常打开,但是退格时会删除前面的字而不是删除输入法中已键入的字符。
- fcitx在WikidPad的文本框中不能正常打开,只能先从其它地方打开,然后到文本框中进行输入,也有退格后优先删除文本框中文字的问题。
- Scim在WikidPad中根本无法输入。
WikidPad的文本输入框使用的是StyledTextCtrl,它绑定了一些基本的命令按键,其中就包括了Backspace,所以遇到Backspace时会直接执行删除文本框前一个字的命令,而不会将其传递给输入法。如果解绑此键,则输入法中退格正常,但是在文本框中不会退格,而会增加一个退格键的字符(Chr(8),显示为“BS”)。
幸运的是,通过阅读源代码,发现解决方法如下:
- 有些输入法无法打开的问题主要是因为WikidPad默认将Ctrl-Space作为了自动完成的快捷键,与输入法的默认开关快捷键冲突,而将其拦截,导致无法打开输入法。修改源代码如下:
- ./extensions/KeyBindings.py:找到Ctrl-Space,将其改成其它组合键,如Ctrl-Shift-Return,输入法的打开和关闭就正常了。
- 第二个问题是因为StyledTextCtrl中通过CmdKeyAssign方法绑定并拦截了Backspace键,所以退格键不会被传递到输入法,同样被拦截的还有回车键(Return)。修改源代码如下:
- ./lib/pwiki/Configuration.py:在GLOBALDEFAULTS中找到("main", "editor_useImeWorkaround")并将其默认设置改成u"True",这样就使得上面针对输入法的函数的修改生效。如果修改默认值后依然无效,则可能是已经生成了配置文件,需要到个人目录中找到配置文件(如~/.WikidPad.config)并修改[main]中的editor_useimeworkaround值为True。
奇怪的是,这个问题似乎只在Linux中体现出来,可能是因为Windows中输入法的工作方式经过了系统处理吧,鄙人不懂这个,不作深究。