What can I do if Sublime Text cannot be imported into Chinese in Linux?

  
                

Sublime Text is a code editor with powerful features, but Sublime Text can't input Chinese when running under Linux. How to solve this problem? The following small series will introduce you to the solution that Sublime Text can't input Chinese under Linux.

1. Save the following code sublime_imfix.c

code is as follows:

/*

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

}

2. Compile the dynamic library:

Code is as follows:

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

3. Set LD_PRELOAD And start Sublime Text:

The code is as follows:

LD_PRELOAD=. /libsublime-imfix.so sublime_text

In order not to play a long list of things every time you start Sublime Text, write a script to start Sublime:

The code is as follows:

#! /bin/bash

SUBLIME_HOME=“/opt/sublime_text”

LD_LIB=$SUBLIME_HOME/libsublime-imfix.so

sh -c “LD_PRELOAD=$LD_LIB $SUBLIME_HOME/sublime_text $@”

Put libsublime-imfix.so in the Sublime Text directory and modify the SUBLIME_HOME in the script so that Sublime Text can be entered in Chinese.

The above is the introduction of the solution that Sublime Text can't input Chinese under Linux. Just follow the above steps and you can input Chinese in Sublime Text. Is it very simple? Give it a try.

Copyright © Windows knowledge All Rights Reserved