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

注:

只测试了了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所在路径

时间: 2024-09-20 01:10:08

Ubuntu下sublime中文无法输入的处理方案_Linux的相关文章

ubuntu-求助:Ubuntu下的eclipse不能输入中文是为什么???

问题描述 求助:Ubuntu下的eclipse不能输入中文是为什么??? 1.系统是Ubuntu15.04 2.eclipse无论是最新版的还是以前的版本都不能输入中文 3.输入法框架用的是fcitx,输入法是谷歌拼音 4.在其他文本或者终端窗口都可以输入中文,唯独eclipse里没法切换输入法 5.网上有人说在eclipse编辑器右键选择input methods ,选择x输入法,还是不能输入 折腾了2天了 还是无果,特此求助各位大神帮助!!! 解决方案 eclipse3.4在ubuntu下不

Ubuntu下Sublime Text 3解决无法输入中文的方法

安装GTK库 首先确保您的电脑已经安装了GTK库 执行和如下命令可以查看电脑上是否安装了GTK pkg-config --modversion gtk+ (查看1.2.x版本) pkg-config --modversion gtk+-2.0 (查看 2.x 版本) pkg-config --version (查看pkg-config的版本) pkg-config --list-all grep gtk (查看是否安装了gtk) 1 2 3 4 1 2 3 4 如果没有 请参照Ubuntu下安装

ubuntu下迅雷极速版的安装与使用_Linux

配置说明:       本机OS: Ubuntu 16.04 x64 一.环境配置 1.1直接命令安装 sudo add-apt-repository ppa:ubuntu-wine/ppa sudo apt-get update sudo apt-get install wine 安装大概需要500多M的容量 1.2或者不嫌麻烦可以用源码编译安装 https://www.winehq.org/ ./configure make sudo make install 注意:源码配置如果出现 con

ubuntu15.04下sublime text不能输入中文的解决

原因是由于中文输入法的输入焦点不能插入sublime的输入窗口中,需要使用代码强制插入输入焦点. 代码是cjacker 君提供的,可以看原始的讨论帖子: http://www.sublimetext.com/forum/viewtopic.php?f=3&t=7006&start=10#p41343 1.保存代码到文件sublime_imfix.c /* sublime-imfix.c Use LD_PRELOAD to interpose some function to fix sub

ubuntu下DbVisualizer 中文乱码,包括JAVA 乱码

1. 在 jre/lib/fonts/ 下建立个目录 fallback,如在Ubuntu 9.04中: 代码:sudo mkdir /usr/lib/jvm/Java-6-sun/jre/lib/fonts/fallback/  (/usr/lib/jvm/java-6-sun 这个为JDK所在的目录.) 2. 在 fallback 里弄个中文字体,如在Ubuntu 9.04中: 代码:sudo ln -s /usr/share/fonts/truetype/wqy/*.* /usr/lib/j

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'

Ubuntu下如何设置ssh免密码登录安装_Linux

1.首先在本机安装openssh-server和openssh-client. 命令:sudo apt-get install openssh-server openssh-client 2.在检查当前的目录下有没有.ssh这个文件,没有的话就mkdir下. 3.生成公钥与私钥.命令:ssh-keygen -t rsa 4.将.ssh文件中的id_isa_pub复制到其他机器的authorized_keys下.并修改authorized_keys权限为600. 5.ssh nodeXX即可

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

最近根据使用发现,在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

linux下gedit中不能输入中文

问题描述 linux下gedit中不能输入中文 如题 求大神解答 输入只能是字母 可我想输点汉字啊... 解决方案 gedit 可输入中文的文本编辑器myeclipse在linux下不能输入中文 解决方案二: gedit本身是支持中文的,是不是你的输入法有什么问题,换个输入法试试 解决方案三: 应该是能支持的,linux原生支持unicode的.看看是不是输入法问题,或者首选项里的设置问题. 解决方案四: http://wiki.ubuntu.com.cn/Gedit%E4%B8%AD%E6%9