亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學習啦>學習電腦>操作系統(tǒng)>Linux教程>

      Linux中Sublime Text無法輸入中文怎么辦

      時間: 孫勝龍652 分享

        Sublime Text是一個代碼編輯器,擁有強大的功能,但Sublime Text 在Linux下運行的時候存在無法輸入中文的問題,遇到該問題該如何解決呢?下面學習啦小編就給大家介紹下Linux下Sublime Text 無法輸入中文的解決方法。

        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 《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.編譯動態(tài)庫:

        代碼如下:

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

        3. 設置 LD_PRELOAD 并啟動 Sublime Text:

        代碼如下:

        LD_PRELOAD=。/libsublime-imfix.so sublime_text

        為了不用每次啟動Sublime Text都打這么一長串東西,寫了個啟動Sublime的腳本:

        代碼如下:

        #!/bin/bash

        SUBLIME_HOME=“/opt/sublime_text”

        LD_LIB=$SUBLIME_HOME/libsublime-imfix.so

        sh -c “LD_PRELOAD=$LD_LIB $SUBLIME_HOME/sublime_text $@”

        把libsublime-imfix.so放到Sublime Text目錄下并修改腳本中的SUBLIME_HOME,這樣Sublime Text 就可以輸入中文了。

        上面就是Linux下Sublime Text 無法輸入中文的解決方法的介紹了,只要按照上面的步驟,就能在Sublime Text 中輸入中文了,是不是很簡單呢?趕緊試試看吧。

      307896