Test system: Ubuntu 12.10 (theoretically all Linux distributions are generic)
Input Method: Fcitx 4.2.6.1
Sublime text version: Sublime text 3 dev (Build 3026)
--------------------------------------------------------------------
My Computer Configuration is: linuxMint17.1
Input Method: Sogou Input Method
Sublime text version: Sublime text 3
1. Save the following code as a sublime-imfix.c
file
/*Sublime-imfix.cuse ld_preload to interpose some function to fix sublime Input method support for Linux. by Cjacker huanggcc-shared-o libsublime-imfix.so sublime-imfix.c ' pkg-config--libs--cflags gtk+-2.0 '-fPICLD_PRELOAD= ./libsublime-imfix.so Subl*/#include <gtk/gtk.h> #include <gdk/gdkx.h>typedef gdksegment gdkregionbox;struct_gdkregion{LongSizeLongnumrects; Gdkregionbox *rects; Gdkregionbox extents;}; Gtkimcontext *local_context;voidGdk_region_get_clipbox (ConstGdkregion *region, Gdkrectangle *rectangle) {g_return_if_fail (region! = NULL); G_return_if_fail (Rectangle! = NULL); Rectangle->x = region->extents.x1; Rectangle->y = region->extents.y1; Rectangle->width = region->extents.x2-region->extents.x1; Rectangle->height = region->extents.y2-region->extents.y1; Gdkrectangle rect; Rect.x = rectangle->x; Rect.y = rectangle->y; Rect.width =0; Rect.height = rectangle->height;//The caret width is 2; //maybe sometimes we'll make a mistake, but for most of the time, it should is the caret. if(Rectangle->width = =2&& Gtk_is_im_context (Local_context)) {gtk_im_context_set_cursor_location (local_context, rectangle); }}//This was needed, for example, if you input something in file dialog and return to the edit area//context would lost, so here we set it again.StaticGdkfilterreturn Event_filter (gdkxevent *xevent, Gdkevent *Event, Gpointer im_context) {XEvent *xev = (XEvent *) XEvent;if(Xev->type = = Keyrelease && gtk_is_im_context (im_context)) {Gdkwindow * win = G_object_get_data (G_object (Im_context),"window");if(Gdk_is_window (Win)) Gtk_im_context_set_client_window (Im_context, Win); }returnGdk_filter_continue;}voidGtk_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);if(! Gdk_is_window (WINDOW))return; G_object_set_data (G_object (context),"window", window);intwidth = gdk_window_get_width (window);intHeight = gdk_window_get_height (window);if(Width! =0&& Height! =0) {gtk_im_context_focus_in (context); Local_context = context; } gdk_window_add_filter (window, event_filter, context);}
2. Install the C + + compiler environment and GTK Libgtk2.0-dev
sudo apt-get install Build-essentialsudo apt-get install LIBGTK2. 0-dev
3. Compiling a shared internal library
Gcc-shared-o libsublime-imfix.so sublime-imfix.c ' pkg-config--libs--cflags gtk+-2.0'-fPIC
4. Set ld_preload and start Sublime Text
Ld_preload=./libsublime-imfix.so Subl
5. Change /usr/share/applications/sublime_text.desktop
to
[Desktop Entry] [...] Exec=env ld_preload=/opt/sublime_text/libsublime-imfix.so/opt/sublime_text/sublime_text%F[...] [Desktop Action Window] [...] Exec=env ld_preload=/opt/sublime_text/libsublime-imfix.so/opt/sublime_text/sublime_text-n[...] [Desktop Action Document] [...] Exec=env ld_preload=/opt/sublime_text/libsublime-imfix.so/opt/sublime_text/sublime_text--command new_file[...]
Don't forget to put it libsublime-imfix.so
/opt/sublime_text/
in the middle
6. Change /usr/bin/subl
to
#!/bin/sh
Export ld_preload=/opt/sublime_text/libsublime-imfix.so
Exec/opt/sublime_text/sublime_text "[Email protected]"
Restart the computer, you can see sublime can input Chinese.
Ubuntu Sublime Text 3 does not support the Chinese solution