sublime在linux下支持中文输入

gvim 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

如果提示缺少gtk,就

sudo apt-get install libgtk2.0-dev

启动命令

LD_PRELOAD=./libsublime-imfix.so ./sublime_text

新建一个shell脚本

!/bin/bash
    
SUBLIME_HOME="~/tools/sublime"LD_LIB=$SUBLIME_HOME/libsublime-imfix.sosh -c "LD_PRELOAD=$LD_LIB $SUBLIME_HOME/bin/sublime_text [email protected]"
时间: 2024-08-28 23:49:02

sublime在linux下支持中文输入的相关文章

解决Linux下Oracle中文乱码的一些心得体会 ,转自

以下转自 http://blog.itpub.net/29151695/viewspace-1173238/ 最近在linux上安装完oracle 10gR2后,又遇到了字符集乱码的问题,之前在网上找了下,然后解决完后就不了了之了,这次又碰到此类问题,所以就认真下来花点时间去测试了一番,经过一些测试,现在已经解决了问题,现在把自己遇到的问题和解决方法记录一下,方便自己日后查找. 测试环境如下: 测试平台: VMware? Workstation 9.0.2 build-1031769 (注:VM

ubuntu kylin14.04下sublime text 3 的安装和支持中文输入

1.首先下载搜狗输入法 http://pinyin.sogou.com/linux/ 帮助请看下面的文章:http://pinyin.sogou.com/linux/help.php 2.然后安装sublime text 3 下载http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3059_amd64.deb文件,下载后双击即会自动使用默认的安装软件安装. 3.安装相关的依赖软件 sudo apt-get install build-ess

应用程序启动器 “sublime_text.desktop“ 还没有被标记为 信任。如果您不知道这个文件的来源,那么启动它可能会不安全。解决sublime在ubuntu中不支持中文输入问题。

1.下载 git clone https://github.com/lyfeyaj/sublime-text-imfix.git 2.进行一些处理 cd ~/sublime-text-imfix sudo cp ./lib/libsublime-imfix.so /opt/sublime_text/ sudo cp ./src/subl /usr/bin/ 这样每次都要输入subl才能打开,很不友好. 对Desktop文件进行改造,可以完美解决中文输入. 原来的 [Desktop Entry]

让linux(centos)支持中文文件和文件夹

一.让linux支持中文 1.将Linux的env设置了LANG=en_US.UTF-8: 2.本地的Shell客户端编码也设置成UTF-8,这样让在windows上传到linux的文件或者目录不会出现乱码: 3.重要:如果用SecureFXPortable上传时需要需要手工编辑SecrueFX的这个Session的配置文件才行(找到session文件夹) 在SecureFx中选择Options->Global Options菜单,在打开的Global Options的对话框中选择General

Linux下windows中文文件乱码问题

table of content: 乱码问题 用gedit选择正确的字符编码打开文件 文件转码 总结 §乱码 Fedora安装时默认用UTF-8字符编码方式, 这么做有国际化的好处(和很多用utf-8的地方兼容), 但是也有兼容问题. 比如: 中文编码在windows下不是utf-8编码, 因为政策要求, 在中国销售的软件要用国标码 (即GBK, GB2312, GB18030(最新的)) 所以中文windows用GB18030的编码, 这就导致一个小问题. 在linux下打开windows的文

解决Linux下sqlplus中文乱码问题

错误现象:在windows下用其他工具访问oracle,确认中文正常显示.在Linux下使用sqlplus查询数据表中文内容出现乱码. 分析及解决:因为windows下正常,所以问题应出现在Linux客户端.用下列sql查询数据库字符集为"ZHS16GBK": SELECT * FROM nls_database_parameters t WHERE t.parameter = 'NLS_CHARACTERSET'; 设置环境变量NLS_LANG,问题解决. export NLS_LA

解决linux下unzip中文有乱码的问题

xxx.zip 中有中文的文件,在linux下unzip就会有乱码. 解决办法:安装7zip 去http://sourceforge.net/projects/p7zip/files/latest/download?source=typ_redirect 下载 p7zip_9.20.1_src_all.tar.bz2 上传到服务器tar -jxvf ,再make.make install. 解压文件:7za x xxx.zip 就OK了

c++ linux下输出中文

同样,使用的是VS FOR LINUX进行测试. converting to execution character set: Invalid or incomplete multibyte or wide character 如果编译时候遇到该错误,则可以加上-finput-charset  -fexecute-charset  g++编译选项解决.因为linux下gcc希望源文件是UTF-8格式,所以都改成UTF-8就好了.同时,也可以vs下装个forceUTF8插件. 搜了下,网上有说使用

sublime text3 在 14.04.1-Ubuntu 下的中文输入

1.安装 fcitx sudo add-apt-repository ppa:fcitx-team/nightly // 添加FCITX仓库. sudo apt-get update // 更新仓库. sudo apt-get install fcitx // 安装fcitx输入法框架. ubuntu 14.04 下如果删除  ibus 会导致一些界面依赖的包被删除, system settimg 一些菜单会消失,在 ubuntu 14.04 ,ibus 和 fcitx 可以共存,如果你发现安装