1. 程式人生 > >完美解決 Linux 下 Sublime Text 中文輸入

完美解決 Linux 下 Sublime Text 中文輸入

參考Sublime Text官方論壇一位中國哥們的 回覆,通過以下方法完美解決Sublime Text 2中文輸入的問題。這幾天討論區老是有人提問,就寫個教程吧。

系統:Linux Mint 14 Nadia
輸入法:Fcitx 4.2.6.1 PPA。

1. 儲存下面的程式碼為sublime_imfix.c

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 /* 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); }

2. 編譯動態庫:

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

(編譯環境和GTK的dev包請自行安裝)

3. 設定 LD_PRELOAD 並啟動 Sublime Text: 

?
1 LD_PRELOAD=./libsublime-imfix.so sublime_text

為了不用每次啟動Sublime Text都打這麼一長串東西,寫了個啟動Sublime的指令碼:

?
1 2 3 4 5 #!/bin/bash SUBLIME_HOME="/opt/sublime_text" LD_LIB=$SUBLIME_HOME/libsublime-imfix.so sh -c "LD_PRELOAD=$LD_LIB $SUBLIME_HOME/sublime_text [email protected]"

(把libsublime-imfix.so放到Sublime Text目錄下並修改指令碼中的SUBLIME_HOME)

輸入效果圖:

相關推薦

[轉載[完美解決 Linux Sublime Text 中文輸入

.html void region sometimes pkg time pre install amp 原文地址: http://www.cnblogs.com/wangkongming/p/4302642.html 轉來備忘。 系統CentOS7.3 fcitx 中文輸

完美解決 Linux Sublime Text 中文輸入

參考Sublime Text官方論壇一位中國哥們的 回覆,通過以下方法完美解決Sublime Text 2中文輸入的問題。這幾天討論區老是有人提問,就寫個教程吧。 系統:Linux Mint 14 Nadia輸入法:Fcitx 4.2.6.1 PPA。 1. 儲存下面的程式碼為sublime_imfi

完美解決 Linux Sublime Text 3中文輸入

sublime很好用,但是ubuntu下不能輸入中文,這是一個很大的問題。 網上的方法各種樣。但是在終端執中開啟 sublime 事先設定 LD_PRELOAD 。 在這裡我提供一個個人認為最簡單的方法。 系統:ubuntu 14.04 輸入法:fcit

解決LinuxSublime text 3的中文輸入問題

Sublime Text幾乎是我現在唯一用的程式碼&文字編輯器了,功能強大而又不失簡約。但其在Linux下對中文輸入不支援一直很讓人蛋疼,一般寫程式碼無所謂支不支援中文,但是我想把所有的文字工作都交給Sublime Text,這就必然離不開中文輸入了。 今天解決了一下它的中文支援問題,補丁方

解決linuxsublime text3無法輸入中文的情況

最近心血來潮,想在試試在linux上寫php是什麼感覺,但在使用sublimetext3時卻發現無法正常輸入中文,於是靠我大百度,各大論壇部落格,解決了這個問題。 百度經驗有解決方案,但是,編輯太馬虎了。。。。。。好多地方的“-”寫成了“_”,而

解決UbuntuSublime Text 3無法輸入中文

sublime很好用,但是ubuntu下不能輸入中文,這是一個很大的問題。不知道為什麼開發著一直也不解決,好在還是有高手在,總能找到方法。網上方法很多,但是也很亂,現在我將自己的經驗總結一下。 首先,我參考了好幾篇文章,都是蠻不錯的,先列出來: 我的方法 1.下載我們需要的

[完美解決]macSublime的vim模式,中文輸入法捕獲問題

sublime Text下面,可以相容vim模式,非常的方便 美中不足的是,mac下使用vim,會出現中文輸入法捕獲的問題。sublime下也不意外。 具體問題描述:   在sublime得vim模式下,如果在插入模式下使用的是中文輸入法(特別是在寫中

Ubuntu 之 Sublime Text 中文輸入 問題

參考網址 : https://github.com/lyfeyaj/sublime-text-imfix 1.依次執行如下命令,在上面git網址有usage用法,此處copy過來 sudo apt-get update && sudo apt-get upgrad

java amr格式轉mp3格式(完美解決Linux轉換0K問題)

因專案需求,需要將 amr 格式的檔案轉成 mp3格式。 網路上提供的思路大多是使用jave-x-x.jar。 這個包確實有用,因為開發時是在windows環境中,測試轉換雖然報了異常: 1 it.sauronsoftware.jave.EncoderExcepti

Linux Sublime Text 3 安裝 Godef 進行程式碼跳轉/跳回

GoSublime 外掛中的跳轉使用的是 GsDoc,只能跳轉包名點出來的成員和函式(例如 fmt.Println),很不方便後來發現了 Godef 這個外掛,可以實現任意物件跳轉(瞬間爽的飛起,此外,我還添加了跳轉回來的方法)以下記錄下安裝過程和遇到的問題1. 安裝 god

解決Ubuntu 16.04Sublime Text 3無法輸入中文的問題

前言 sublime很好用,但是ubuntu下不能輸入中文,這是一個很大的問題。不知道為什麼開發著一直也不解決,好在還是有高手在,總能找到方法。網上方法很多,但是也很亂,現在我將自己的經驗總結一下。 首先,我參考了好幾篇文章,都是蠻不錯的,先列出來: 我的方法 1.下載我們需要的檔案,開啟終端,輸入: git

Ubuntu16.04Sublime Text 3解決無法輸入中文的方法

參考文章: 百度經驗 oschina部落格 百度經驗中的注意點: 步驟二的第二步,若出現gtk/gtkimcontent.h沒有那個檔案或目錄的錯誤,參照oschina部落格 步驟五中的

解決openSUSE中Sublime Text 3的中文顯示和輸入問題

ase continue opensuse back .so文件 text 裏的 測試 mes Sublime Text 2是免安裝的,下載完解壓就可以了。我這邊解壓路徑是/home/fhp/App/SublimeText2 為了能在終端直接使用sublime

linux 的 idea 無法輸入中文解決辦法

RHEL7/CentOS7 下面的解決辦法: RHEL/Centos7下面的輸入法使用的是ibus架構。在/etc/profile後面增加如下配置資訊: export XIM="ibus" export XIM_PROGRAM="ibus" export XMODIFIERS="@im=ib

Ubuntu安裝Sublime Text輸入中文

中文 bject data- gen 能夠 ppa microsoft windows bin Sumblime Text3是一款傳說中的神級代碼編輯器,具有

解決linuxEclipse中文亂碼問題

已開通新的部落格,後續文字都會發到新部落格 http://www.0xfree.top ---        把Windows下的工程匯入到了Linux下Eclipse中,由於以前的工程程式碼,都是GBK編碼的(Windows下

解決linux開啟windows .txt檔案中文亂碼問題

出現這種情況的原因為兩種作業系統的中文壓縮方式不同,在windows環境中中文壓縮一般為gbk,而在linux環境中為utf8,這就導致了在windows下能正常顯示 txt檔案在linux環境下開啟呈現了亂碼狀態。 解決方法:在linux用iconv命令,如亂碼檔名為test.txt,那麼

教你解決Sublime Text中文亂碼問題

Sublime Text 2是一個非常不錯的原始碼及文字編輯器,但是不支援GB2312和GBK編碼在很多情況下會非常麻煩。不過Sublime Package Control所以供的外掛可以讓Sublime Text 2幾乎完美地支援CJK編碼的文字。 然後使用Ctrl+Shift+P開啟命令列

WindowsSublime text 編譯程式出現[Error 2] 的解決辦法

錯誤資訊[Error 2] [cmd: [u'bash', u'-c', u"g++ 'E:\\Wamp\\wamp\\c\\1.cpp' -o 'E:\\Wamp\\wamp\\c/1' && 'E:\\Wamp\\wamp\\c/1'"]] [d

解決Linux server和client 通過TCP通訊:accept成功接收卻報錯的問題

ipv4 socket error 實例代碼 ... lis col argc 例子   今天在寫簡單的TCP通訊例子的時候,遇到了一個問題:server 和client能夠連接成功,並且client也能夠正常發送,但server就是接收不到,在網上搜索一番後,終於解決了問