Linux sublime text3输入中文的问题.

转载 2015年11月18日 23:14:39

转自:http://blog.csdn.net/cywosp/article/details/32350899

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;
    }
http://i.cnblogs.com/EditPosts.aspx?opt=1
    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;http://i.cnblogs.com/EditPosts.aspx?opt=1
    }

    gdk_window_add_filter (window, event_filter, context);
}

2.安装C/C++的编译环境和gtk libgtk2.0-dev

sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev

3.编译

gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC

4.启动sublime

 LD_PRELOAD=./libsublime-imfix.so subl   

5.快速开启可以输入中文的sublime

将libsublime-imfix.so拷贝到系统库的默认路径中:
    sudo cp libsublime-imfix.so /usr/lib/
    修改/usr/share/applications/sublime_text.desktop文件
    sudo vim /usr/share/applications/sublime_text.desktop
    打开后将Exec=/opt/sublime_text/sublime_text %F修改为
    Exec=bash -c 'LD_PRELOAD=/usr/lib/libsublime-imfix.so /opt/sublime_text/sublime_text' %F

   将Exec=/opt/sublime_text/sublime_text -n修改为
    Exec=bash -c 'LD_PRELOAD=/usr/lib/libsublime-imfix.so /opt/sublime_text/sublime_text' -n
这样就通过快捷方式打开SublimeText 3就可以支持中文输入了。


 

解决Linux下Sublime text 3的中文输入问题

转自 http://c4fun.cn/blog/2013/11/30/linux-sublimetext-chinese/ Sublime Text几乎是我现在唯一用的代码&...

Linux中Sublime_Text3的安装方法以及不能中文输入的问题解决

Linux中Sublime_Text3的两种安装方法以及不能中文输入的问题解决

Linux 中Sublime Text 3无法输入中文的问题

Sublime Text几乎是我现在唯一用的代码、文本编辑器了,功能强大而又不失简约。但其在Linux下对中文输入不支持一直很让人蛋疼,一般写代码无所谓支不支持中文,但是我想把所有的文字工作都交给Su...

Ubuntu 14.04中使用sublime text 3无法输入中文的问题

Ubuntu 14.04中使用sublime text 3无法输入中文的问题

ubuntu 下解决sublime Text 3的中文输入问题

原文:https://my.oschina.net/lee2013/blog/396855 一、系统已成功安装搜狗输入法 二、保存下面的代码到文件sublime_imfix.c(位于~目录) ...

【linux学习笔记】Sublime Text3支持GB2312和GBK编码以及中文输入法

几天在ubuntu15.10下使用Sublime Text3发现中文乱码,以及不能使用中文输入法(搜狗输入法linux版)的问题,捣鼓了半天,终于完善了,下面po一下我的解决方案。一.支持GB2312...

解决linux下sublime text3无法输入中文的情况

最近心血来潮,想在试试在linux上写php是什么感觉,但在使用sublimetext3时却发现无法正常输入中文,于是靠我大百度,各大论坛博客,解决了这个问题。 百度经验有解决方案,但是,编...
  • leiflyy
  • leiflyy
  • 2015年11月25日 22:37
  • 404

ubuntu14.04下解决sublime_text 3无法输入中文问题

博主一直习惯用sublime,无论是windows还是ubuntu下面,都觉得这款文本编辑器看起来特别的舒服,写起代码来也很有感觉,并且它的一些插件的确很好用。但是很可惜,sublime3在ubunt...

完美解决 Linux 下 Sublime Text 3中文输入

sublime很好用,但是ubuntu下不能输入中文,这是一个很大的问题。网上的方法各种样。但是在终端执中打开 sublime 事先设置 LD_PRELOAD 。在这里我提供一个个人认为最简单的方法。...

解决linux下sublime text3无法输入中文的情况

解决linux下sublime text3无法输入中文的情况
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux sublime text3输入中文的问题.
举报原因:
原因补充:

(最多只允许输入30个字)