Ubuntu安装Sublime text解决搜狗输入法问题


环境说明:Ubuntu 16.04 LTS版本,安装Sublime text 3,需要解决不能使用搜狗输入法的问题。

安装Sublime text 很简单,参照官网教程很容易装上,但是会出现无法用搜狗输入法输入中文的问题。

  1. 创建如下源文件

    cat >> ~/sublime_imfix.c <<EOF
    /*
    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);
    }
    EOF
    
  2. 安装编译环境

    sudo apt-get install build-essential
    sudo apt-get install libgtk2.0-dev
    
  3. 编译为共享库

    gcc -shared -o libsublime-imfix.so sublime_imfix.c  `pkg-config --libs --cflags gtk+-2.0` -fPIC
    
  4. 测试效果

    LD_PRELOAD=./libsublime-imfix.so subl
    
  5. 编辑Entry文件

    关键是修改三个Exec项值,注意实际路径和英文双引号问题。

    cd /usr/share/applications
    sudo vi sublime_text.desktop
    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=Sublime Text
    GenericName=Text Editor
    Comment=Sophisticated text editor for code, markup and prose
    Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so /opt/sublime_text/sublime_text %F"
    Terminal=false
    MimeType=text/plain;
    Icon=sublime-text
    Categories=TextEditor;Development;
    StartupNotify=true
    Actions=Window;Document;[Desktop Action Window]
    Name=New Window
    Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text -n"
    OnlyShowIn=Unity;[Desktop Action Document]
    Name=New File
    Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text --command new_file"
    OnlyShowIn=Unity;
    

至此,软件已能正常输入中文,但还存在输入框不跟随的问题,目前没找到合适办法,凑合着用吧。希望Sublime text官方能做出优化。

文章大部分内容来源于网络博客,谨在此注明参考博客原网址:

  1. 第一篇
  2. 第二篇

Ubuntu 安装 Sublime text 解决搜狗输入法问题相关推荐

  1. Ubuntu安装Sublime Text 3--解决无法使用搜狗中文输入法

    转自 迷津渡口 http://www.qingzz.cn/ 如侵权请联系我,马上删除 不用多说,Sublime Text是最受开发者欢迎的编辑器之一,清新的界面和强大的插件,你值得拥有哦- 下面简单介 ...

  2. Ubuntu安装Sublime Text并输入中文

    Sumblime Text3是一款传说中的神级代码编辑器,具有下面特点: 1.代码高亮,自己主动补全 2.各种插件扩展 3.外观简洁舒适 4.跨平台(Windows,Linux,OS X) 简而言之就 ...

  3. ubuntu 安装 Sublime Text 2

    1\ Add the PPA and install Sublime Text 2 in Ubuntu Shell代码  收藏代码 sudo add-apt-repository ppa:webupd ...

  4. Ubuntu 14.04 安装 Sublime Text 3

    Ubuntu 14.04 安装 Sublime Text 3 听语音 | 浏览:24435 | 更新:2014-09-25 22:14 | 标签:ubuntu 1 2 3 4 5 6 分步阅读 ubl ...

  5. 在Ubuntu上安装Sublime Text 3

    在Ubuntu上安装Sublime Text 3 1 点击左上角dash按钮,输入"terminal"或者"终端",打开终端界面: 2.在终端输入: sudo ...

  6. 如何在 Ubuntu 20.04 / KylinOS-V10-SP1 上安装 Sublime Text 4

    Sublime Text是一个跨平台的专有源代码编辑器.它提供了大量的功能和插件,极大地帮助了应用程序的开发.Sublime Text 是用 C++ 和 Python 编写的. 显着的功能包括拆分编辑 ...

  7. ubuntu之安装sublime text

    安装sublime text sudo add-apt-repository ppa:webupd8team/sublime-text-3sudo apt-get updatesudo apt-get ...

  8. 如何在Ubuntu 13.04, 13.10上安装Sublime Text 3

    Sublime Text是一款很流行的源代码文本编辑器,托Webupd8团队的PPA仓库之福,我们现在能通过PPA安装Sublime Text 3,适用于ST的注册用户和未注册用户. 安装Sublim ...

  9. 在ubntu下安装Sublime text

    1. Ubuntu 16.04(其他版本应该也可以) 安装Sublime text 在Ubuntu中按CTRL+ALT+T打开命令窗口,输入 sudo add-apt-repository ppa:w ...

最新文章

  1. 【BZOJ 1095】 1095: [ZJOI2007]Hide 捉迷藏 (括号序列+线段树)
  2. 微信门店小程序怎样创建 门店小程序创建方法简介
  3. 计算机应用用什么样的笔记本,制图用什么笔记本好
  4. Spring REST:异常处理卷。 3
  5. 新手前端练手网站_编程到底难不难学?新手入门选择哪种语言好?
  6. C语言中负数补码的方法,c语言里求负数补码的总结不足与优点.docx
  7. 使用gensim训练word2vec模型
  8. 华为效仿苹果卖高价手机?滴滴顺风车开放灰度测试;苹果官微被投诉“攻陷”| 极客头条...
  9. 基本数据类型-列表_元组_字典
  10. win10通过VMware使用教程
  11. java isprime函数_Java8函数式编程入门
  12. 通俗讲解光线追踪原理,一文理清各类光线追踪
  13. 去除趋势杀软的退出密码
  14. Python 从函数 def 到类 Class
  15. matlab cui,阻力汽车论文,关于基于Matlab-CUI的汽车动力性相关参考文献资料-免费论文范文...
  16. matlab空间曲面拟合,【Matlab】离散点拟合曲面
  17. 理解杀毒软件的意义(完整---另加补充和总结)
  18. 摇奖机是按照金字塔的原理设计的
  19. 谈表达式的副作用----冯晓辉
  20. discuz论坛出现“请求来路不明”提示的解决方法

热门文章

  1. 一张图解决网关,DNS,代理服务器之间的关系
  2. 3.3 固定次数的循环之一
  3. [全文]DDD话语批评之一:评张逸的“状态和事件本质相同”
  4. CSS3——@keyframe动画的基本用法,常见错误及解决方案
  5. zabbix监控配置过程图解
  6. 洛谷p2240部分部分背包问题c语言(数组实现)
  7. N卡驱动和cuda安装
  8. 一个连珠五子棋的算法
  9. Android工具类——获取wifi模块MAC地址
  10. 五大经典算法之回溯法及其应用