Ubuntu下SublimeText中文问题处理
Ubuntu下SublimeText中文问题处理
最近碰到了 Sublime 里面,中文输入法不能生效的问题。这对于经常是输入中文是非常不方便的。
在网上查了下资料,主要是说 Sublime 跟输入法框架起冲突了。Sublime 跟 Ubuntu 的默认输入法框架,比如 iBus 或者 Fcitx 存在兼容性问题,所以就导致输入不了中文。
解决办法就是在 Sublime 启动的时候,用一段代码来修复这个输入法的问题。
解决方案如下:
新建一个 sublime_imfix.c 文件,然后填写下面的内容:
#include <gtk/gtkimcontext.h>
void gtk_im_context_set_client_window (GtkIMContext *context,
GdkWindow *window)
{
GtkIMContextClass *klass;
g_return_if_fail (GTK_IS_IM_CONTEXT (context));
klass = GTK_IM_CONTEXT_GET_CLASS (context);
if (klass->set_client_window)
klass->set_client_window (context, window);
g_object_set_data(G_OBJECT(context),"window",window);
if(!GDK_IS_WINDOW (window))
return;
int width = gdk_window_get_width(window);
int height = gdk_window_get_height(window);
if(width != 0 && height !=0)
gtk_im_context_focus_in(context);
}
看起来这段代码就是对 GTK 输入法做了下适配,可以处理输入法的焦点问题。 代码中出现了 width 、height 等变量名。
然后将上面的 C 文件编译成共享库,猜测 Sublime 支持这样的动态库扩展。
gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC
然后将 libsublime-imfix.so 拷贝到 sublime_text 所在文件夹,我这里是 /opt/sublime_text 目录下。
sudo mv libsublime-imfix.so /opt/sublime_text/
如果你本机没有安装 C/C++ 环境的话,要先安装下:
sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev
修改文件/usr/bin/subl的内容
sudo vim /usr/bin/subl
将 sublime 的启动脚本改为,意思就是将这个动态库当做一个命令行参数传给 Sublime 程序:
#!/bin/sh
LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text "$@"
上面这样修改可以让从命令行启动生效。如果是想从快捷方式启动也生效的话,需要再修改下 Sublime 的快捷方式,sublime_text.desktop:
cd /usr/share/applications/
# 下面这个快捷方式的名称换成你本地 Sublime 的
sudo vim sublime-text.desktop
文件内容替换:
将 [Desktop Entry] 中的
Exec=/opt/sublime_text/sublime_text %F
替换成Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text %F"
。将 [Desktop Action Window] 中的
Exec=/opt/sublime_text/sublime_text -n
替换成Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text -n"
。将 [Desktop Action Document] 中的
Exec=/opt/sublime_text/sublime_text --command new_file
替换成Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text --command new_file"
。
上面修改的内容依旧是指定这个编译好的动态库地址,然后让 Sublime 启动的时候去加载它,让它处理这个中文输入法的问题。
做完上面这几点,启动 Sublime 后输入中文总算是正常了。