023.Fcitx在SublimeText2输入中文
SublimeText2中不能输入中文,目前没有完美的解决办法.
结合资料[1]和[2]目前可以做到:
1) 完美输入中文,输入框位置正常,光标跟随,退格好用.
2) 在ST2中调用nautilus好用,即”Preferences/Browse Packages”可用.
@史荣久 / 2013-08-16 / CC-BY-SA-3.0
1.背景故事
据csslayer说,fcitx 4.2.X中的某版因为bug的副作用,使ST2可以输入中文.然后bug修复了,就又不好使了. 资料[1]中,cssplayer给出来正解,但ST2没有后续跟进,于是出现了cjacker的dirty-fix. 可以输入中文了,但问题又来了,nautilus不好用,资料[2]提到是Gtk2和Gtk3不可混搭的问题.
故事讲完了,我的配置是 ubuntu 12.04 64bit, fcitx-4.2.6.1, ST2-v2.0.2-b2221
2.补丁补丁
首先在[1]的sublime_imfix.c
中追加加[2]的on_load
方法,即
void __attribute__ ((constructor)) on_load(void)
{
// Clear `LD_PRELOAD` environment variable
putenv("LD_PRELOAD=");
}
如果没有编译环境,则安装
sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev
然后编译,在当前目录下会生成libsublime-imfix.so
gcc -shared -o libsublime-imfix.so sublime_imfix.c \
`pkg-config --libs --cflags gtk+-2.0` -fPIC
3.启动脚本
为了省事,直接在libsublime-imfix.so下建立以下脚本,对sublime-text-2.desktop中的Exec所指的命令修改
#!/bin/bash
PDIR=`dirname $(readlink -f $0)`
NAME=/usr/share/applications/sublime-text-2.desktop
for file in `cat $NAME|grep Exec|awk -F'[= ]' '{print $2}'|uniq`; do
#statements
read -p "modify $file , enter to continue,ctrl-c to break"
back=$PDIR/`basename $file`.bak
echo "backup $file to $back"
cp $file $back
echo "modify the file,need root privs"
sudo sed -i "2 a LD_PRELOAD=$PDIR/libsublime-imfix.so \\\\" $file
cat $file
done
修改完毕,可以直接启动了.
其实,还有一个 which sublime-text
没有修改,留着在命令行中启动原始版.
使用稳定版,不需要经常升级,就不用老修改启动脚本了.
4.参考资料
[1] http://www.sublimetext.com/forum/viewtopic.php?t=7006
[2] http://liberize.github.io/2013/06/24/sublime-text-upgrade-notes/