源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-03-01 04:35 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Ubuntu下sublime中文无法输入的处理方案
注: 只测试了了fcitx,没有测试ibus 因为不是新手教程,所以安装sublime,fcitx,gcc等等的就不说了 若看不懂请留言 下面为实现过程: copy下列代码,保存为sublime_fix.c
[u]复制代码[/u] 代码如下:
#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); }
使用下列命令编译它
[u]复制代码[/u] 代码如下:
gcc -shared -o libsublime-imfix.so sublime_fix.c `pkg-config --libs --cflags gtk+-2.0/` -fPIC
添加运行权限给libsublime-imfix.so
[u]复制代码[/u] 代码如下:
chmod +x libsublime-imfix.so
将编译后的文件libsublime-imfix.so复制到sublime的文件夹下面 在sublime安装目录下新建文件为sublime_sh.sh,copy内容如下:
[u]复制代码[/u] 代码如下:
#!/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所在路径
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部