任意位置建立sublime_imfix.c文件, 代码以下html
#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); }
将 sublime_imfix.c 编译成共享库libsublime-imfix.so,命令以下:linux
# ps: 若是缺乏组件,则:sudo apt-get install libgtk2.0-dev gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC
而后将libsublime-imfix.so拷贝到sublime_text所在文件夹vim
sudo mv libsublime-imfix.so /opt/sublime_text/
修改文件/usr/bin/subl的内容bash
sudo vim /usr/bin/subl #!/bin/sh exec /opt/sublime_text/sublime_text "$@" => #!/bin/sh LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text "$@" 此时,在命令中执行 subl 将能够使用搜狗for linux的中文输入
完美解决问题:还须要修改文件sublime_text.desktop的内容app
sudo vim /usr/share/applications/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" 注意:修改时请注意双引号"",不然会致使不能打开带有空格文件名的文件。