IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Ubuntu下SublimeText输入中文问题的解决

    1900发表于 2014-06-23 02:18:57
    love 0

    关于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路径改成这个脚本文件的路径,然后就可以通过启动器启动软件了。



沪ICP备19023445号-2号
友情链接