Ubuntu 14.04下Sublime text2解压版无法启用fcitx中文输入法的问题

来源:互联网 发布:郑州好玩软件科技公司 编辑:程序博客网 时间:2024/06/06 13:01


环境:

ubuntu 14.04 x64

fcitx五笔拼音输入法

sublime text 2


sublime text的中文输入法问题网上很多解决办法,用来用去都无法实现,后来发现原来是因为本地用的是解压版,没有创建快捷方式,导致启动时引导不上输入法,记录如下:


1、保存以下代码为“sublime-imfix.c”

/*sublime-imfix.cUse 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` -fPICLD_PRELOAD=./libsublime-imfix.so subl*/#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;  //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、安装 C/C++ 的编译环境和 gtk libgtk2.0-dev

sudo apt-get install build-essentialsudo apt-get install libgtk2.0-dev



3、编译共享内库,生成“libsublime-imfix.so”,把生成的so文件放到sublime根目录

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



4、修改 /usr/bin/subl 为

#!/bin/shexport LD_PRELOAD=/opt/sublime_text/libsublime-imfix.soexec /opt/sublime_text/sublime_text "$@"


5、新增“/usr/share/applications/sublime_text.desktop”

[Desktop Entry]Version=1.0Type=ApplicationName=Sublime_TextGenericName=Text EditorComment=Sophisticated text editor for code, markup and proseExec=bash -c 'LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text %F'Terminal=falseMimeType=text/plain;Icon=/opt/sublime_text/Icon/256x256/sublime_text.pngCategories=TextEditor;Development;Utility;StartupNotify=trueActions=Window;Document;X-Desktop-File-Install-Version=0.22[Desktop Action Window]Name=New WindowExec=bash -c 'LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text -n'OnlyShowIn=Unity;[Desktop Action Document]Name=New FileExec=bash -c 'LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text --command new_file'OnlyShowIn=Unity;

6、重启



附下载地址:http://download.csdn.net/detail/bellovin/8760605





0 0
原创粉丝点击