千家信息网

Linux 下 Sublime Text 中文输入问题的如何解决

发表于:2024-10-23 作者:千家信息网编辑
千家信息网最后更新 2024年10月23日,这篇文章主要介绍"Linux 下 Sublime Text 中文输入问题的如何解决",在日常操作中,相信很多人在Linux 下 Sublime Text 中文输入问题的如何解决问题上存在疑惑,小编查阅
千家信息网最后更新 2024年10月23日Linux 下 Sublime Text 中文输入问题的如何解决

这篇文章主要介绍"Linux 下 Sublime Text 中文输入问题的如何解决",在日常操作中,相信很多人在Linux 下 Sublime Text 中文输入问题的如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Linux 下 Sublime Text 中文输入问题的如何解决"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1.保存下面的代码为sublime_imfix.c

代码如下:

/*
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);
}

2.编译动态库:

代码如下:

gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC

3. 设置 LD_PRELOAD 并启动 Sublime Text:

代码如下:

LD_PRELOAD=./libsublime-imfix.so sublime_text

为了不用每次启动Sublime Text都打这么一长串东西,写了个启动Sublime的脚本:

代码如下:

#!/bin/bash

SUBLIME_HOME="/opt/sublime_text"
LD_LIB=$SUBLIME_HOME/libsublime-imfix.so
sh -c "LD_PRELOAD=$LD_LIB $SUBLIME_HOME/sublime_text $@"

把libsublime-imfix.so放到Sublime Text目录下并修改脚本中的SUBLIME_HOME,这样Sublime Text 就可以输入中文啦。

到此,关于"Linux 下 Sublime Text 中文输入问题的如何解决"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

问题 中文 输入 代码 学习 更多 脚本 帮助 实用 接下来 不用 东西 动态 文章 方法 理论 目录 知识 篇文章 网站 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全项目概述 医院网络安全领导机构职能 我的世界电脑神奇宝贝服务器下载 前端可以本地json数据库 梦幻多次转区的原服务器 网络安全专项测试 全国网民网络安全 票房数据库技术与应用 触摸屏 测试 软件开发 软件开发者大会的视频 宽带网络技术就业方向 怀旧服pvp服务器联盟和部落 物流软件开发英语怎么说 青岛近邻网络技术有限公司 北京新奇安网络安全 数据库创建索引的步骤 陕西数据网络技术服务产品介绍 数据库家庭理财系统代码 漫威超级争霸战连接服务器失败 计算机网络技术面试介绍 肯米六计算机网络技术 <网络安全法>第一条 网络安全问题及其应对论文 河北税务安全接入服务器地址 王思聪电脑是服务器吗 温哥华软件开发 宜兴品质优良网络技术销售厂家 网络安全教育板板内容 长春好的软件开发公司哪家好 数据库应用技术题及答案
0