How to switch to fcitx input method in Ubuntu Sublime Text 2

  
                

Sublime Text 2 is a code editor. If you want to input Chinese, you need to use the fcitx input method. Recently, some netizens have encountered the situation that Sublime Text 2 cannot use the fcitx input method. The following small series will introduce you to Ubuntu. Sublime Text 2 cannot switch the solution to the fcitx input method.

Save to save this following code ~ /sublime-imfix.c

/*

sublime-imfix.c

Use LD_PRELOAD To interpose some function to fix sublime input method support for linux.

By Cjacker Huang "jianzhong.huang at i-soft.com.cn"

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

LD_PRELOAD=. /libsublime-imfix.so sublime_text

*/

#include "gtk/gtk.h"

#include "gdk/gdkx.h"

typedef GdkSegment GdkRegionBox;

struct _GdkRegion

{

long size;

long numRects;

GdkRegionBox *rects;

GdkRegionBox extents;

};

GtkIMContext *local_context;

void

gdk_region_get_clipbox (const GdkRegion *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 will make a mistake, but for most of the time, it should be the caret.

if(rectangle-"width == 2 && GTK_IS_IM_CONTEXT(local_context)) {

gtk_im_context_set_cursor_location(local_context, rectangle);

}

}

//this is needed, for example, if you input something in file dialog And return back the edit area

//context will lost, so here we set it again.

static GdkFilterReturn 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);

}

return GDK_FILTER_CONTINUE;

}< Br>

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);

if(! GDK_IS_WINDOW (window))

return;

g_object_set_data(G_OBJECT(context),“window”,window);

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);

local_context = context;

}

gdk_window_add_filter (window, event_filter, context);

Install C/C++ build environment and gtk libgtk2.0-dev

sudo apt-get install build-essential

sudo apt-get install libgtk2.0-dev

Use the terminal to enter the sublime-imfix.c directory, run the following command

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

Modify /usr/share/with a text editor Applications/sublime.desktop file (this is what you built when you installed sublime text 2), found at the beginning of & Ldquo;Exec=” lines (with two lines), modify subl to

bash -c ‘LD_PRELOAD=~/libsublime-imfix.so subl’

OK, at startup Click on sublime text 2 to enter Chinese! (Note: The Chinese input method cannot be switched when the terminal input subl is turned on.)

The above is the introduction of the Ubuntu Sublime Text 2 solution that cannot use the fcitx input method. After modifying the subl according to the method described in this article, The launcher launches Sublime Text 2.

Copyright © Windows knowledge All Rights Reserved