sublime text 3 输入中文 linux,解决sublime text 3中文输入问题ubuntu

这篇博客介绍了一个用于修复Sublime Text在Linux下输入法支持的解决方案。通过创建并加载动态库libsublime-imfix.so,实现了对gdk_region_get_clipbox函数的拦截,确保输入法光标的正确显示。同时,当在文件对话框中输入后返回编辑区时,重新设置输入法上下文,保持输入法的正常工作。
摘要由CSDN通过智能技术生成

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/*

sublime-imfix.c

Use LD_PRELOAD to interpose some function to fix sublime input method support for linux.

By Cjacker Huang

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

#include

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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Sublime Text是一款非常受欢迎的文本编辑器,它具有高效、灵活、易于使用等特点,因此成为许多开发者的首选。安装Sublime Text3非常简单。请按照以下步骤进行安装。 第一步:下载Sublime Text3 打开Sublime Text官方网站,我们可以看到它的下载链接。选择适合自己操作系统的版本下载。 第二步:安装Sublime Text3 下载完成后,在下载文件目录中找到Sublime Text,并双击打开安装程序。安装程序将引导你完成安装。 注意:在安装Sublime Text3之前,我们需要确保我们的操作系统能够运行Sublime TextSublime Text要求Windows操作系统版本不低于Windows 7,Mac操作系统版本不低于OS X 10.7,Linux操作系统版本最好是Ubuntu或CentOS。 第三步:打开Sublime Text3 双击桌面上的Sublime Text3图标启动软件。成功启动后,我们现在可以在Sublime Text3中编写文档了。 在Sublime Text3中,我们可以使用一系列快捷键和插件,使编程更加快速高效。我们可以根据自己的需要进行配置和个性化。总而言之,Sublime Text3作为一款非常强大的文本编辑器,在开发中发挥着不可替代的作用。 ### 回答2: Sublime Text 3是一款流行的文本编辑器,支持多种编程语言。以下是安装Sublime Text 3的步骤: 第一步:下载Sublime Text 3。可以在Sublime Text官网上下载,也可以在一些镜像网站上下载。 第二步:安装Sublime Text 3。双击下载的安装程序,在弹出的对话框中选择安装路径和其他选项,然后点击“安装”按钮。 第三步:配置Sublime Text 3。在Sublime Text 3的菜单栏中选择“Preferences”,然后选择“Settings”。 第四步:安装插件。通过Sublime Text 3的“Package Control”插件管理器安装插件,可以极大地增强Sublime Text 3的功能。 第五步:使用Sublime Text 3。打开Sublime Text 3,开始编辑文本文件。Sublime Text 3具有许多有用的特点,例如语法高亮和自动补全。 总之,Sublime Text 3是一款强大的文本编辑器,适用于编程和其他文本编辑任务。安装Sublime Text 3非常简单,只需按照上述步骤进行即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值