ubuntu下sublime使用搜狗输入法

安装搜狗输入法

把安装搜狗输入法记录下来,纯粹是因为第一次安装搜狗输入法遇到了大坑,按照百度经验,竟然在语言选择时候找不到。很悲情的是,除了猜测系统是32位外完全没有头绪。

  • 64位ubuntu系统。查看命令:uname -u

  • 直接去搜狗官网下载输入法,双击进行安装。

  • 终端输入im-config,对话框点击OK,知道出现一个列表框,选择fcitxok.然后重启。

  • 终端输入fcitx-config-gtk3,点击左下角的添加按钮,弹出框首先取消only show current language的勾选,然后输入sougou选中即可。此时在列表应该在最后。

sublime中使用搜狗拼音

参考资料

  • 保存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 sublimeimfix.c pkg-config --libs --cflags gtk+-2.0 -fPIC LDPRELOAD=./libsublime-imfix.so sublime_text */

include

include

typedef GdkSegment GdkRegionBox;

struct _GdkRegion { long size; long numRects; GdkRegionBox *rects; GdkRegionBox extents; };

GtkIMContext *local_context;

void gdkregiongetclipbox (const GdkRegion *region, GdkRectangle *rectangle) { greturniffail (region != NULL); greturnif_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 && GTKISIMCONTEXT(localcontext)) { gtkimcontextsetcursorlocation(localcontext, 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 eventfilter (GdkXEvent *xevent, GdkEvent *event, gpointer imcontext) { XEvent *xev = (XEvent *)xevent; if(xev->type == KeyRelease && GTKISIMCONTEXT(imcontext)) { GdkWindow * win = gobjectgetdata(GOBJECT(imcontext),"window"); if(GDKISWINDOW(win)) gtkimcontextsetclientwindow(imcontext, win); } return GDKFILTER_CONTINUE; }

void gtkimcontextsetclientwindow (GtkIMContext *context, GdkWindow *window) { GtkIMContextClass *klass; greturniffail (GTKISIMCONTEXT (context)); klass = GTKIMCONTEXTGETCLASS (context); if (klass->setclientwindow) klass->setclient_window (context, window);

if(!GDKISWINDOW (window)) return; gobjectsetdata(GOBJECT(context),"window",window); int width = gdkwindowgetwidth(window); int height = gdkwindowgetheight(window); if(width != 0 && height !=0) { gtkimcontextfocusin(context); localcontext = context; } gdkwindowaddfilter (window, event_filter, context); }`

  • 安装编译环境: > sudo apt-get install build-essential > sudo apt-get install libgtk2.0-dev

*在sublime-imfix.c所在目录编译:

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

产生mv libsublime-imfix.so $SUBLIME_HOME/ 移动到的sublime的安装目录下。

*在安装目录下启动sublime: LDPRELOAD=./libsublime-imfix.so ./sublimetext就可以在sublime中输入中文了。

#如果要在启动栏中启动sublime,可以输入中文:

*找到sublime-text.desktop这个文件(user/share/applications),做以下改动(注意文件路径):

Exec=/usr/bin/sublime-text-2 %F 改为 Exec=bash -c 'LD_PRELOAD=/usr/lib/libsublime-imfix.so /usr/bin/sublime-text-2' %F

Exec=/usr/bin/sublime-text-2 --new-window改为'Exec=bash -c 'LD_PRELOAD=/usr/lib/libsublime-imfix.so /usr/bin/sublime-text-2' --new-window'

不过遗憾的是这样设置后,发现文件不能鼠标右键打开sublime,只能open + o

Written on October 10, 2015