sublime text是一个代码编辑器,拥有强大的功能,但sublime text 在linux下运行的时候存在无法输入中文的问题,遇到该问题该如何解决呢?下面秋天网 Qiutian.ZqNF.Com小编就给大家介绍下linux下sublime text 无法输入中文的解决方法。
1.保存下面的代码为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;
}
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.编译动态库:
代码如下:
gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fpic
3. 设置 ld_preload 并启动 sublime text:
代码如下:
ld_preload=。/libsublime-imfix.so sublime_text
为了不用每次启动sublime text都打这么一长串东西,写了个启动sublime的脚本:
代码如下:
#!/bin/bash
sublime_home=“/opt/sublime_text”
ld_lib=$sublime_home/libsublime-imfix.so
sh -c “ld_preload=$ld_lib $sublime_home/sublime_text $@”
把libsublime-imfix.so放到sublime text目录下并修改脚本中的sublime_home,这样sublime text 就可以输入中文了。
上面就是linux下sublime text 无法输入中文的解决方法的介绍了,只要按照上面的步骤,就能在sublime text 中输入中文了,是不是很简单呢?赶紧试试看吧。