服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Ubuntu - Ubuntu下sublime中文无法输入的处理方案

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

2021-10-21 14:52Ubuntu教程网 Ubuntu

本文主要是给出了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所在路径

延伸 · 阅读

精彩推荐
  • UbuntuUbuntu下sublime中文无法输入的处理方案

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

    本文主要是给出了Ubuntu下sublime中文无法输入的处理方案,非常的实用,遇到相同问题的小伙伴们可以参考下...

    Ubuntu教程网8132021-10-21
  • Ubuntuubuntu云服务器网站

    ubuntu云服务器网站

    Ubuntu 云服务器 是云计算中最流行的解决方案之一。它是一个基于Linux操作系统的云计算平台,被广泛应用于网站托管、移动应用程序开发、企业应用程序等...

    未知932023-05-09
  • UbuntuDog-用于DNS查询的命令行工具

    Dog-用于DNS查询的命令行工具

    Dog是一个用于DNS查询的命令行工具,它的工作原理类似于dig。它具有丰富多彩的输出,支持DNS-over-TLS 和 DNS-over-HTTPS协议,并且可以输出JSON格式。...

    良许Linux6842020-12-10
  • UbuntuUbuntu系统中VLC播放器怎么开启硬件加速播放视频?

    Ubuntu系统中VLC播放器怎么开启硬件加速播放视频?

    Ubuntu系统中VLC播放器怎么开启硬件加速播放视频?Ubuntu系统中想要开启硬件加速,在哪里开启呢?下面我们就来看看详细的教程,很简单,感兴趣的朋友可...

    Ubuntu教程网8592019-12-15
  • UbuntuUbuntu升级到12.04失败的解决办法

    Ubuntu升级到12.04失败的解决办法

    前段时间,从ubuntu 11.10升级到12.04的时候,不知到是网络的原因还是怎么回事突然卡住了,到了第二天一看还卡在原来的地方 ...

    hadahuluwa5832019-11-24
  • Ubuntu详解如何在Ubuntu 20.04上安装Xrdp服务器(远程桌面)

    详解如何在Ubuntu 20.04上安装Xrdp服务器(远程桌面)

    这篇文章主要介绍了详解如何在Ubuntu 20.04上安装Xrdp服务器(远程桌面),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    snowdream60432020-07-31
  • Ubuntuubuntu不使用命令方式怎么添加软件源?

    ubuntu不使用命令方式怎么添加软件源?

    ubuntu不适用命令方式怎么添加软件源?其实Ubuntu除了通过deb软件包,软件中心外还可以通过添加软件源PPA的方式来进行软件的安装及更新,而后者不用我们...

    脚本之家4072019-10-12
  • UbuntuUbuntu MATE 20.04 LTS:士别三日,当刮目相待

    Ubuntu MATE 20.04 LTS:士别三日,当刮目相待

    这份Ubuntu 20.04 调查报告也持同样观点。不过不管流行与否,它都是一个令人印象深刻的 Linux 发行版,尤其是用在较旧的硬件上时。事实上,它也是可用的...

    Linux中国6412020-06-23