Ubuntu 下 SublimeText 输入中文问题的解决
June 22, 2014
关于 Pyhton 的编码工具我选来选出还是觉得 SublimeText 这款工具简单好用,Vim 配置太过复杂了,我折腾了一天就放弃了,SublimeText 的中文输入有一点问题,所以要写一个 C 的将文字传送给 SublimeText~~(貌似是这样,我也是个菜鸟,这个 C 文件的作用我也不是太懂,我说错了的话看到这篇文章的大大给我解释一下吧 - -),下面具体说下安装方式把。
中文输入的问题是参考的这篇文章:http://blog.csdn.net/jokes000/article/details/8997587
我是直接在 SublimeText 的官网上下的压缩文件,解压后文件夹内的 SublimeText2 程序是可以直接运行的,但是这个时候是无法输入中文的。
首先因为要用编译 C 文件,所以我们要下载相应的 C 工具包,在 shell 里输入下面的命令即可:
1sudoapt-get installbuild-essential2sudoapt-get installlibgtk2.0-dev
然后将下面这段代码保存成 sublime-imfix.c 文件
include <gtk/gtk.h>#include <gdk/gdkx.h>
typedef GdkSegment GdkRegionBox;
struct _GdkRegion
{
long size;
long numRects;
GdkRegionBox *rects;
GdkRegionBox extents;
};
GtkIMContext *local_context;
voidgdk_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;
if(rectangle->width == 2 && GTK_IS_IM_CONTEXT(local_context)) {
gtk_im_context_set_cursor_location(local_context, rectangle);
}
}
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);
}
然后用 cd 命令进入你存放 C 文件的地方,运行下面这条命令编译文件(这行命令要一次性运行)
1gcc -shared -o libsublime-imfix.so sublime_imfix.c
pkg-config –libs –cflags gtk+-2.0
-fPIC
运行后如果没有大的问题你会发现目录下出现了一个.so 文件,把这个文件用 mv 命令移动到 SublimeText 的目录下面,然后用 shell 进入 SublimeText 目录后运行下面这个脚本就可以打开 SublimeText 输入中文了。(我的 SublimeText 放在 Home 目录下的 APP 文件夹下面,这里你们要改成你们自己的路径)
SUBLIME_HOME="$HOME/APP/SublimeText2"
LD_LIB="$SUBLIME_HOME/libsublime-imfix.so"
sh -c "LD_PRELOAD=$LD_LIB $SUBLIME_HOME/sublime_text $@"
当然,你也可以把 SublimeText 的 desktop 文件的 Exce 路径改成这个脚本文件的路径,然后就可以通过启动器启动软件了。
加入评论