歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Ubuntu下Sublime Text輸入中文問題的解決

Ubuntu下Sublime Text輸入中文問題的解決

日期:2017/2/28 14:30:22   编辑:Linux教程

關於Pyhton的編碼工具我選來選出還是覺得Sublime Text這款工具簡單好用,Vim配置太過復雜了,我折騰了一天就放棄了,SublimeText的中文輸入有一點問題,所以要寫一個C的將文字傳送給Sublime Text~~(貌似是這樣,我也是個菜鳥,這個C文件的作用我也不是太懂,我說錯了的話看到這篇文章的大大給我解釋一下吧- -),下面具體說下安裝方式把。

中文輸入的問題是參考的這篇文章:http://www.linuxidc.com/Linux/2014-06/103855.htm

Ubuntu 12.10 安裝破解Sublime Text 2 http://www.linuxidc.com/Linux/2013-07/86898.htm

Ubuntu 13.04安裝Sublime Text 2 http://www.linuxidc.com/Linux/2013-05/84228.htm

編碼神器——Sublime Text 包管理工具及擴展大全 http://www.linuxidc.com/Linux/2013-10/91701.htm

如何開發 Sublime Text 2 的插件 http://www.linuxidc.com/Linux/2013-09/90046.htm

Windows Mac Linux下安裝以及破解Sublime Text 2編輯器 http://www.linuxidc.com/Linux/2013-08/89452.htm

文本編輯器Sublime Text 使用體驗 http://www.linuxidc.com/Linux/2013-08/89326.htm

我是直接在Sublime Text的官網上下的壓縮文件,解壓後文件夾內的SublimeText2程序是可以直接運行的,但是這個時候是無法輸入中文的。

首先因為要用編譯C文件,所以我們要下載相應的C工具包,在shell裡輸入下面的命令即可:

1sudoapt-get installbuild-essential2sudoapt-get installlibgtk2.0-dev

然後將下面這段代碼保存成sublime-imfix.c文件

#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;
if(rectangle->width == 2 && GTK_IS_IM_CONTEXT(local_context)) {
gtk_im_context_set_cursor_location(local_context, rectangle);
}
}

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);
}


然後用cd命令進入你存放C文件的地方,運行下面這條命令編譯文件(這行命令要一次性運行)

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


運行後如果沒有大的問題你會發現目錄下出現了一個.so文件,把這個文件用mv命令移動到SublimeText的目錄下面,然後用shell進入SublimeText目錄後運行下面這個腳本就可以打開SublimeText輸入中文了。(我的SublimeText放在Home目錄下的APP文件夾下面,這裡你們要改成你們自己的路徑)

SUBLIME_HOME="$HOME/APP/SublimeText2"
LD_LIB="$SUBLIME_HOME/libsublime-imfix.so"
sh -c "LD_PRELOAD=$LD_LIB $SUBLIME_HOME/sublime_text $@"


當然,你也可以把SublimeText的desktop文件的Exce路徑改成這個腳本文件的路徑,然後就可以通過啟動器啟動軟件了。

更多Ubuntu相關信息見Ubuntu 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=2

Copyright © Linux教程網 All Rights Reserved