Linux中Sublime Text无法输入中文怎么办

Linux中Sublime Text无法输入中文怎么办,第1张

 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

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 中输入中文了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7126917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-01
下一篇 2023-04-01

发表评论

登录后才能评论

评论列表(0条)

保存