學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>Linux教程>

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

時(shí)間: 孫勝龍652 分享

  Sublime Text是一個(gè)代碼編輯器,擁有強(qiáng)大的功能,但Sublime Text 在Linux下運(yùn)行的時(shí)候存在無法輸入中文的問題,遇到該問題該如何解決呢?下面學(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.編譯動(dòng)態(tài)庫:

  代碼如下:

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

  3. 設(shè)置 LD_PRELOAD 并啟動(dòng) Sublime Text:

  代碼如下:

  LD_PRELOAD=。/libsublime-imfix.so sublime_text

  為了不用每次啟動(dòng)Sublime Text都打這么一長(zhǎng)串東西,寫了個(gè)啟動(dòng)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 中輸入中文了,是不是很簡(jiǎn)單呢?趕緊試試看吧。

307896