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

作者:hebedich 时间:2023-05-23 16:54:40 

注:

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

标签:Ubuntu,sublime,中文,无法输入
0
投稿

猜你喜欢

  • vmware导入ova文件踩坑记小结

    2023-08-10 08:54:17
  • 这几年来的一些心得告诉还不熟悉的朋友们

    2009-10-13 14:30:00
  • 国外职业博客与国内“职业博客”的比较

    2009-05-12 11:44:00
  • 奇虎220万美元及股票收购世界之窗浏览器

    2011-03-17 16:19:00
  • 域名经济时代资源稀少 域名选择经验再分享

    2009-01-07 14:19:00
  • 逐步排查 层层递进 解决IIS服务器报错

    2010-05-04 17:59:00
  • centOS7安装docker的详细步骤

    2023-09-12 21:05:04
  • 谷歌称搜索引擎要有责任观 暗指百度排名不公

    2008-11-13 13:17:00
  • 博客网进军网页游戏 美女博客也来征战三国

    2009-11-10 16:34:00
  • QQ互联发布插件版 将支持Discuz! X1.5

    2011-08-02 19:30:13
  • 迅雷发布手机客户端v1.0.3支持多制式网络

    2010-05-27 11:56:00
  • 阿里学院将在全国打造电子商务人才产业链

    2009-10-17 14:34:00
  • 升级教程:Discuz! 7.1到Discuz! 7.2

    2009-11-29 12:21:00
  • 用Java实现Web服务器

    2007-03-26 11:00:00
  • 网上看奥运及奥运赛程表

    2008-08-08 12:45:00
  • AdSense官方:创建独特而有价值的内容

    2011-11-21 16:59:42
  • 做站坚持勤恳才是王道

    2008-04-10 11:58:00
  • DoS与DDos攻击工具基本技术及其发展

    2009-12-24 14:41:00
  • 在 CentOS 8 / RHEL 8 上安装 VirtualBox 6.0的详细教程

    2022-02-02 10:09:08
  • RedHat7.2下Apache与Tomcat4整合实例

    2010-05-16 18:10:00
  • asp之家 网站运营 m.aspxhome.com