Ubuntu下 Sublime Text 中文輸入

完美解決 Linux 下 Sublime Text 中文輸入
測試系統(tǒng):Ubuntu 16.04 (理論上所有 Linux 發(fā)行版都通用)
輸入法:搜狗拼音linux版
Sublime Text 版本:Sublime Text 3 dev(Build 3026)

  1. 下載共享庫
    點擊下載 libsublime-imfix.so
    然后解壓出來后綴為.rar
rar x fileName.rar 
  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 subl
*/
#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);
}
  1. 安裝 C/C++ 的編譯環(huán)境和 gtk libgtk2.0-dev
sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev
  1. 編譯共享內(nèi)庫
gcc -shared -o libsublime-imfix.so sublime-imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC
  1. 設置 LD_PRELOAD 并啟動 Sublime Text
  LD_PRELOAD=./libsublime-imfix.so subl
  1. 為了使用方便袁稽,還需要做一下配置
    不必每次都輸入LD_PRELOAD打開sublime text 3,需要修改sublime圖標鏈接方式 首先將共享庫復制到系統(tǒng)默認路徑中
sudo cp libsublime-imfix.so /usr/lib/

打開修改 sublime 配置文件

sudo vim /usr/share/applications/sublime_text.desktop

修改地方 ①將

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

這樣就通過快捷方式打開SublimeText 3就可以支持中文輸入了

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末孵睬,一起剝皮案震驚了整個濱河市罗丰,隨后出現(xiàn)的幾起案子政己,更是在濱河造成了極大的恐慌,老刑警劉巖兵钮,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胞皱,死亡現(xiàn)場離奇詭異,居然都是意外死亡综芥,警方通過查閱死者的電腦和手機丽蝎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膀藐,“玉大人屠阻,你說我怎么就攤上這事《罡鳎” “怎么了国觉?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虾啦。 經(jīng)常有香客問我麻诀,道長,這世上最難降的妖魔是什么缸逃? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮厂抽,結(jié)果婚禮上需频,老公的妹妹穿的比我還像新娘。我一直安慰自己筷凤,他們只是感情好昭殉,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著藐守,像睡著了一般挪丢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卢厂,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天乾蓬,我揣著相機與錄音,去河邊找鬼慎恒。 笑死任内,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的融柬。 我是一名探鬼主播死嗦,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粒氧!你這毒婦竟也來了越除?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摘盆,沒想到半個月后翼雀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡骡澈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年锅纺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肋殴。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡囤锉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出护锤,到底是詐尸還是另有隱情官地,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布烙懦,位于F島的核電站驱入,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏氯析。R本人自食惡果不足惜亏较,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掩缓。 院中可真熱鬧雪情,春花似錦、人聲如沸你辣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舍哄。三九已至宴凉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間表悬,已是汗流浹背弥锄。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蟆沫,地道東北人叉讥。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像饥追,于是被迫代替她去往敵國和親图仓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容