在Ubuntu 14.04中安装了SublimeText 3之后发现既然不支持输入中文,于是在网上搜罗一下,发现非常多人遇到了相同的问题,可是解决的方法大该就仅仅有一个。以下依据自身的安装及解决的方法总结例如以下:

1. SublimeText 3的安装

    安装方式有多种,本文所描写叙述的是从官方站点上下载64位的.deb文件 。详细为http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3059_amd64.deb文件。下载后双击即会自己主动使用默认的安装软件安装。

2. 相关依赖软件的安装

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

3. 拷贝例如以下代码到文件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);

}

依照文件头上凝视所说的编译该文件,在终端里进入到存放该文件的文件夹中,输入例如以下命令:
    gcc -shared -o libsublime-imfix.so sublime_imfix.c  `pkg-config --libs --cflags gtk+-2.0` -fPIC
最后在当前文件夹下得到libsublime-imfix.so这个共享库。

4. 中文输入

    到这里默认已经装好了中文输入法(搜狗输入法linux版)。得到第3步中的库libsublime-imfix.so之后,先试试看能否正常使用中文输入法,在终端中输入例如以下命令:

    LD_PRELOAD=./libsublime-imfix.so subl             #subl是安装好SublimeText 3后的程序启动命令
假设一切正常,在启动之后。搜狗输入法就能能够输入了。

5. 为了方便

    在第4步中假设每次都输入LD_PRELOAD这样显得太不方便了。在这里提供简单改动图标连接的方式,高速打开SublimeText。将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就能够支持中文输入了。

注:第五步仅限使用.deb文件安装的情况,假设使用源代码安装的则须要变通一下,写个脚本将LD_PRELOAD加上就可以







点滴记录——在Ubuntu 14.04中使SublimeText 3支持中文输入法的更多相关文章

  1. zhuan:点滴记录——Ubuntu 14.04中gedit打开文件出现中文乱码问题

    在中文支持配置还不完整的Ubuntu 14.04中,使用gedit打开带有中文字符的文件有时会出现乱码的情况,这是由于gedit对字符编码匹配不正确导致的,解决方法如下: 在终端中输入如下命令,然后重 ...

  2. Ubuntu 14.04中gedit打开文件出现中文乱码问题

    http://blog.csdn.net/cywosp/article/details/32325449/ 在中文支持配置还不完整的Ubuntu 14.04中,使用gedit打开带有中文字符的文件有时 ...

  3. 点滴记录——Ubuntu 14.04中Chrome浏览器标题栏出现中文乱码

    今天不知道在系统里装的哪个软件与Chrome浏览器所用的字体向冲突了,导致标题栏显示的中文都变成了乱码,其次收藏栏中的中文也变成了乱码.导致原有的收藏内容都无法辨认了.在网上搜索了一下,也有人遇到了相 ...

  4. 装机篇:ubuntu 14.04 在英文环境下安装中文输入法(转载)

    ubuntu默认的输入法是ibus,综合网上评论,fcitx的支持者更多,而且个人感觉fcitx也的确不错,可以满足日常输入. STEP1: 在Ubuntu Software Center 搜索fci ...

  5. Ubuntu 14.04中Elasticsearch集群配置

    Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

  6. Ubuntu 14.04中安装最新版Eclipse

    Ubuntu 14.04中安装最新版Eclipse 来源:Linux社区    作者:Linux 1.安装OpenJDK Java 7 如果你的系统中没有安装Java,我们需要按照如下步骤事先安装好 ...

  7. 如何在Ubuntu 14.04中安装最新版Eclipse

    想必很多开发人员都知道,Ubuntu 软件源中提供的并不是最新版本的 Eclipse,本教程就教大家如何在 Ubuntu 14.04 中快速安装 Eclipse 官方发布的最新版本. 到目前为止,Ec ...

  8. 如何在Ubuntu 14.04中使用Samba共享文件

    Linux 下的文件共享利器 Samba 想必大家已经非常熟悉了,今天我们介绍下如何在Ubuntu 14.04中使用 Samba 共享网络文件.打印机和其它公共资源. 1.安装 Samba 和图形配置 ...

  9. 怎样在Ubuntu 14.04中安装Java(转)

    想知道如何在Ubuntu 14.04中安装Java?安装Java肯定是安装Ubuntu 14.04后首先要做的几件事情之一(见http://www.linuxidc.com/Linux/2014-04 ...

随机推荐

  1. c# -- Form1_Load()不被执行的三个解决方法

    我的第一个c#练习程序,果然又出现问题了...在Form1_Load() not work.估计我的人品又出现问题了. 下面实现的功能很简单,就是声明一个label1然后,把它初始化赋值为hello, ...

  2. iOS 发光字流水

    { CAGradientLayer *_gradientLayer; NSInteger count; } - (void)addLabel{ // 创建UILabel UILabel *label ...

  3. 关于warning: Clock skew detected. Your build may be incomplete. 的解决方法

    今天发现电脑的系统时间不对,因此将时钟进行了改动,回头编译Linux kernel的时候,提演示样例如以下的warning: warning:  Clock skew detected.  Your ...

  4. windows服务与计划任务

    1. 打开Visual Studio 2012新建一个project Solution: 2. 选择Windows->windows Service,修改服务名称:MyFirstService: ...

  5. jQuery EasyUI 数据网格 - 条件设置行背景颜色

    $('#tt').datagrid({ rowStyler:function(index,row){ if (row.listprice>50){ return 'color:blue;font ...

  6. 图像处理标准图像lena的故事图The Lenna Story behind image processing

    The Lenna Story - www.lenna.org   Imaging Experts Meet Lenna in Person Yes, it's true! Lenna attende ...

  7. Python学习(六)模块

    Python 模块 模块定义 随着程序越来越庞大,需要分隔成几个文件:也需要能在不同文件中复用函数.类和变量,而不是拷贝代码.为了满足这些需要,Python提供了模块. 简单来说,模块就是一个保存了P ...

  8. WCF 自承载 提供源码

    一.WCF 简单介绍 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,是一套通讯接口.现在比较流行的SOA就可以通过WCF实现. ...

  9. datanode无法启动问题

    在执行了hdfs namenode -format命令之后,再启动datanode发现无法启动. 查看datanode的日志发现: datanode的ClusterId和namenode的Cluste ...

  10. Servlet对文件的读写操作

    (1)怎样在serlvet中读取文件的内容 package com.tsinghua; import java.io.*; import javax.servlet.http.*; public cl ...