在Ubuntu 14.04中使SublimeText 3支持中文输入法
在Ubuntu 14.04中安裝了SublimeText 3之后發(fā)現(xiàn)既然不支持輸入中文,于是在網(wǎng)上搜羅一下,發(fā)現(xiàn)很多人遇到了同樣的問(wèn)題,但是解決辦法大該就只有一個(gè)。下面根據(jù)自身的安裝及解決辦法總結(jié)如下:
?
1. SublimeText 3的安裝
? ? 安裝方式有多種,本文所描述的是從官方網(wǎng)站上下載64位的.deb文件 ,具體為http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3059_amd64.deb 文件,下載后雙擊即會(huì)自動(dòng)使用默認(rèn)的安裝軟件安裝。
?
2. 相關(guān)依賴軟件的安裝
??? sudo apt-get install build-essential libgtk2.0-dev
?
3. 拷貝如下代碼到文件sublime-imfix.c文件中,該文件需要自己創(chuàng)建,隨便放到那里都行。
/**?sublime-imfix.c*?Use?LD_PRELOAD?to?interpose?some?function?to?fix?sublime?input?method?support?for?linux.*?By?Cjacker?Huang?<jianzhong.huang?at?i-soft.com.cn>?***?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?<gtk/gtk.h> #include?<gdk/gdkx.h> 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); }按照文件頭上注釋所說(shuō)的編譯該文件,在終端里進(jìn)入到存放該文件的目錄中,輸入如下命令:(`pkg-config --libs --cflags gtk+-2.0` 這里的符號(hào)是TAB 上面的符號(hào)不是引號(hào))
????gcc -shared -o libsublime-imfix.so sublime-imfix.c? `pkg-config --libs --cflags gtk+-2.0` -fPIC
最后在當(dāng)前目錄下得到libsublime-imfix.so這個(gè)共享庫(kù)。
?
4. 中文輸入
??? 到這里默認(rèn)已經(jīng)裝好了中文輸入法(搜狗輸入法linux版)。得到第3步中的庫(kù)libsublime-imfix.so之后,先試試看是否能正常使用中文輸入法,在終端中輸入如下命令:
??? LD_PRELOAD=./libsublime-imfix.so subl?????????????#subl是安裝好SublimeText 3后的程序啟動(dòng)命令
如果一切正常,在啟動(dòng)之后,搜狗輸入法就能可以輸入了。
?
5. 為了方便
??? 在第4步中如果每次都輸入LD_PRELOAD這樣顯得太不方便了,在這里提供簡(jiǎn)單修改圖標(biāo)連接的方式,快速打開(kāi)SublimeText。將libsublime-imfix.so拷貝到系統(tǒng)庫(kù)的默認(rèn)路徑中:
??? sudo cp libsublime-imfix.so /usr/lib/
??? 修改/usr/share/applications/sublime_text.desktop文件
??? sudo vim /usr/share/applications/sublime_text.desktop
??? 打開(kāi)后將Exec=/opt/sublime_text/sublime_text %F修改為
??? Exec=bash -c 'LD_PRELOAD=/usr/lib/libsublime-imfix.so /opt/sublime_text/sublime_text' %F
?
?? 將Exec=/opt/sublime_text/sublime_text -n修改為
??? Exec=bash -c 'LD_PRELOAD=/usr/lib/libsublime-imfix.so /opt/sublime_text/sublime_text' -n
這樣就通過(guò)快捷方式打開(kāi)SublimeText 3就可以支持中文輸入了。
?
注:第五步僅限使用.deb文件安裝的情況,如果使用源碼安裝的則需要變通一下,寫個(gè)腳本將LD_PRELOAD加上即可
?
總結(jié)
以上是生活随笔為你收集整理的在Ubuntu 14.04中使SublimeText 3支持中文输入法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Struts2使用!动态方法调用无效
- 下一篇: 事务概念