Ubuntu下sublime中文无法输入的处理方案

注:

只测试了了fcitx,没有测试ibus
因为不是新手教程,所以安装sublime,fcitx,gcc等等的就不说了
若看不懂请留言
下面为实现过程:

copy下列代码,保存为sublime_fix.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);
}

使用下列命令编译它

代码如下:

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

添加运行权限给libsublime-imfix.so

代码如下:

chmod +x libsublime-imfix.so

将编译后的文件libsublime-imfix.so复制到sublime的文件夹下面
在sublime安装目录下新建文件为sublime_sh.sh,copy内容如下:

代码如下:

#!/bin/bash
SUBLIME_HOME="~/software"  #你的sublime安装目录
LD_LIB="$SUBLIME_HOME/libsublime-imfix.so"
sh  -c "LD_PRELOAD=$LD_LIB  $SUBLIME_HOME/sublime $@"

你已经可以通过teminal启动sublime了,运行./sublime_sh.sh即可
若要通过启动器启动sublime,请将你sublime.desktop里面的exec路径修改为sublime_sh.sh所在路径

(0)

相关推荐

  • ubuntu下使用sublime text时如何完美输入中文

    最近根据使用发现,在ubuntu下,安装sublime Text 3 后,无法使用中文输入的问题. 系统为:ubuntu 64位,安装搜狗输入法linux版 解决方法: 1.下载共享库 点击下载 libsublime-imfix.so 2.下载好库后,进入目录执行: LD_PRELOAD=./libsublime-imfix.so subl 等待sublime text 3 启动后,应该已经可以正常输入中文. 3.为了使用方便,还需要做一下配置 不必每次都输入LD_PRELOAD打开sublim

  • ubuntu sublime中文输入问题解决办法

    ubuntu sublime中文输入问题解决办法 概述:ubuntu下面使用sublime写代码,不能输入中文写注释都比较麻烦,所以就搜了一下如何输入中文.写篇博客记录一下,测试成功. 测试环境 系统:ubuntu 14.04lts sublime text 安装编译环境 sudo apt-get install build-essential libgtk2.0-dev 编辑文件 1.在主目录下(随意)下创建sublime_imfix.c文件 2.将下面的代码复制到文件下并保存 #includ

  • Ubuntu配置sublime text 3的c编译环境的具体步骤

    c语言 选择tool –> Build System –> New Build System 然后输入以下代码 { "shell_cmd": "gcc \"${file}\" -o \"${file_path}/${file_base_name}\" -Wformat=2", "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$&q

  • Ubuntu下sublime中文无法输入的处理方案

    注: 只测试了了fcitx,没有测试ibus 因为不是新手教程,所以安装sublime,fcitx,gcc等等的就不说了 若看不懂请留言 下面为实现过程: copy下列代码,保存为sublime_fix.c 复制代码 代码如下: #include <gtk/gtk.h> #include <gdk/gdkx.h> typedef GdkSegment GdkRegionBox; struct _GdkRegion {     long size;     long numRects

  • Ubuntu下Sublime Text无法输入中文最简单的解决方案

    Sublime Sublime Text 是一个代码编辑器(Sublime Text2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器.Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim. Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等.还可自定义键绑定,菜单和工具栏.Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python

  • ubuntu下没有中文输入法的解决办法

    ubuntu下没有中文输入法的解决办法! 我们在安装虚拟机或者ubuntu系统的时候,常见的是尽管是中文版本的但却没有中文输入法,确实是一件很恼火的事情! 我自己也亲身经历过,特此给大家提供一种方法,很好用的! 我们在安装ubuntu系统的时候,最常见也是我们大家默认的是不会安装在线更新什么的,因为这样下来计费时间,还是费时间!所以就没有更新! 所以当出现,没有中文输入法的时候,我们第一个要做的就是: (1)更新系统软件,这一点不做解释,我们需要选取最近的节点作为我们更新软件的服务器: (2)在

  • Ubuntu下MySQL中文乱码的问题解决

    发现问题 最近一段时间学习Django,在进行与MySQL数据联合使用的插入数据的时候遇到下边的问题: /usr/local/lib/python2.7/dist-packages/Django-1.11.dev20170117002028-py2.7.egg/django/db/backends/mysql/base.py:109: Warning: Incorrect string value: '\xE6\x88\x90\xE5\x8A\x9F...' for column 'json'

  • Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的完美解决方法

    Mac OS X 下基于 Java 的程序(如 IntelliJ IDEA.jEdit 等)会出现中文标点输入无效的问题,在中文输入法状态,可以输入中文字,但输入中文标点最后上去的是英文标点.查阅了相关资料,原来这是 Java 自己的 bug.从 Java 8u51 版本开始就出现了这个 bug,一直到现在最新的 Java 8u72 仍然如此,但是老版本 Java 8u45 是没有这个问题的.所以,可以采取变通的方法,在 Mac OS X 上同时装一个老版本的 JDK 8u45,不会影响已经安装

  • Ubuntu下Mysql 常用指令及中文乱码问题

    下面给大家介绍mysql 常用指令及中文乱码解决问题 Mysql 系统管理指令 登陆本地 Mysql mysql -u username -p # 回车输入密码 或者 mysql -u username -p passswd; 登陆远程 Mysql mysql -h address -u username -p # 回车输入密码 或者 mysql -h address -u username -p passswd; 修改新密码 mysql> use mysql; mysql> update u

  • ubuntu系统下matplotlib中文乱码问题的解决方法

    在ubuntu 下利用matplotlib 绘图的时候,图像上中文无法显示.以下是我的解决办法: 1. 下载中文字体simhei.ttf, 网址为http://fontzone.net/download/simhei 2. 搜索 matplotlib 字体的安装位置 $locate -b '\mpl-data' 会得到 这个路径/usr/share/matplotlib/mpl-data下面有fonts/ttf这个目录,进入这个目录,把刚才下载的simhei.ttf 字体复制到这个目录下,注意权

  • Ubuntu下mysql与mysql workbench安装教程

    Ubuntu 安装jdk:[链接] Ubuntu安装eclipse:[链接] Ubuntu下安装MySQL与mysql workbench:[链接] Ubuntu配置tomcat9:[链接] 1.sudo apt-get install mysql-server 安装完成,下面测试一下,输入: mysql -u root -p 提示输入密码,输入密码之后: 2.安装mysql workbench 下载好安装包之后执行如下命令(先cd到当前目录): sudo dpkg -i mysql-workb

随机推荐