②话不说▼ 2013▼ 手册 sublime 中文

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/

《023.Fcitx在SublimeText2输入中文》 SublimeText2中不能输入中文,目前没有完美的解决办法。
题图:子不教父之过,开始操心了:那天下幼儿园,在操场干架两架,打哭了两个小朋友。