您的位置:首页 > 其它

ubuntu下sublime关于中文的问题

2014-09-09 11:01 267 查看
关于Pyhton的编码工具我选来选出还是觉得Sublime Text这款工具简单好用,Vim配置太过复杂了,我折腾了一天就放弃了,SublimeText的中文输入有一点问题,所以要写一个C的将文字传送给Sublime Text~~(貌似是这样,我也是个菜鸟,这个C文件的作用我也不是太懂,我说错了的话看到这篇文章的大大给我解释一下吧- -),下面具体说下安装方式把。

我是直接在Sublime Text的官网上下的压缩文件,解压后文件夹内的SublimeText2程序是可以直接运行的,但是这个时候是无法输入中文的。

首先因为要用编译C文件,所以我们要下载相应的C工具包,在shell里输入下面的命令即可:

<!-- lang: cpp -->
sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev

然后将下面这段代码保存成sublime-imfix.c文件

<!-- lang: cpp -->
#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文件的地方,运行下面这条命令编译文件(这行命令要一次性运行)

<!-- lang: cpp -->
gcc -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文件夹下面,这里你们要改成你们自己的路径)

<!-- lang: cpp -->
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路径改成这个脚本文件的路径,然后就可以通过启动器启动软件了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: