解决Ubuntu下sublime中不能输入中文的问题

时间:2023-03-08 17:30:02
解决Ubuntu下sublime中不能输入中文的问题

解决Ubuntu下sublime中不能输入中文的问题

Ubuntu下安装sublime后,不能输入中文,而在其他软件中能正常输入,这是sublime的bug,解决方案是在通过shell在每次运行sublime前自动添加一个动态修正库,解决过程如下:

进入某个目录如~:

cd

新建一个C源代码

subl 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 != && height !=)
gtk_im_context_focus_in(context);
}

在能编译之前可能需要安装依赖包,通过以下命令完成:

sudo apt-get install build-essential
sudo apt-get install libgtk2.-dev

然后编译C文件:

gcc -shared -o libsublime-imfix.so sublime-imfix.c  `pkg-config --libs --cflags gtk+-2.0` -fPIC

接下来在每次运行sublime程序之前告诉程序链接上这个.so库文件即可在sublime中输入中文,其命令是LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text "$@",其中/opt/sublime_text/是sublime安装的默认目录。命令行的subl还是Dash的Sublime Text,或是文件浏览器里的open with> sublime text,他们都能启动sublime程序,但不必寻找他们的启动入口,而后一一改之。他们都依赖于执行/opt/sublime_text/sublime_text,利用此特点,将/opt/sublime_text/sublime_text二进制另存,之后写个名为/opt/sublime_text/sublime_text的shell脚本,其中实现在执行新建此shell脚本以前的/opt/sublime_text/sublime_text二进制之前,告诉程序链接.so修正库文件。过程如下:

cd /opt/sublime_text/

sudo mv sublime_text sublime_text0

sudo vim sublime_text    # 不熟悉vim者亦可sudo gedit sublime_text

在一行内写入以下语句后保存:

LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text0 "$@"

sudo chmod +x sublime_text

至此应该可以在sublime中输入中文了。