国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

    <cite id="gf5jf"><label id="gf5jf"></label></cite>
  • <div id="gf5jf"><listing id="gf5jf"></listing></div>
    學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>Linux教程>

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

    時間: 孫勝龍652 分享

      Sublime Text是一個代碼編輯器,擁有強大的功能,但Sublime Text 在Linux下運行的時候存在無法輸入中文的問題,遇到該問題該如何解決呢?下面學(xué)習(xí)啦小編就給大家介紹下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. 設(shè)置 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