在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. 小识.htaccess文件

    .htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户 ...

  2. localhost与127.0.0.1的区别 2

    localhost与127.0.0.1的区别localhost与127.0.0.1的区别是什么?相信有人会说是本地ip,曾有人说,用127.0.0.1比localhost好,可以减少一次解析.看来这个 ...

  3. [Js插件]使用JqueryUI的弹出框做一个“炫”的登录页面

    引言 查看项目代码的时候,发现项目中用到JqueryUi的弹出框,可拖拽,可设置模式对话框,就想着使用它弄一个登录页面. 弹出框 在Jquery Ui官网可定制下载弹出框,下载和弹出框下载相关的js文 ...

  4. tomcat JVM内存 配置

    原文:http://elf8848.iteye.com/blog/467460 常见的内存溢出有以下两种: java.lang.OutOfMemoryError: PermGen space java ...

  5. Shell编程入门(第二版)(中)

    注:test測试语句一般不单独使用,一般作为if语句的測试条件,如; if test -d file then .... fi test的变量的简写形式"[]" 演示样例-apac ...

  6. 【转载】Java并发编程:volatile关键字解析 by 海子

    volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以 ...

  7. Andorid之Annotation框架初使用(六)

    EVENT @Click :点击事件,只能有0个或1个参数,且参数为View @Click(R.id.myButton) void myButtonWasClicked() { [...] } @Cl ...

  8. react的传值类型PropTypes简单说明

    1.首先可以有那么多种类型 propTypes: { // 可以声明 prop 为指定的 JS 基本类型.默认 // 情况下,这些 prop 都是可传可不传的. optionalArray: Reac ...

  9. go语言基础之普通函数的调用流程

    函数调用流程:先调用后返回,先进后出,函数递归,函数调用自己本分,利用此物点 1.普通函数的调用流程 package main //必须 import "fmt" func fun ...

  10. SQL Server之RAID简介

    一: RAID简介 RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)是一项数据保护策略. 二: RAID的几种常用级别 1. RAID 0: 通过并 ...