热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux系统中SublimeText无法输入中文怎么办?

Linux系统中SublimeText无法输入中文怎么办?:SublimeText是一个代码编辑器,拥有强大的功能,但SublimeText在Linux下运行的时候存在无法输入中文




  Sublime Text是一个代码编辑器,拥有强大的功能,但Sublime Text 在Linux下运行的时候存在无法输入中文的问题,遇到该问题该如何解决呢?下面小编就给大家介绍下Linux下Sublime Text 无法输入中文的解决方法。


 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.编译动态库:


  代码如下:


  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 中输入中文了,是不是很简单呢?赶紧试试看吧。





推荐阅读
  • 本文主要解决了在编译CM10.2时出现的关于Samsung Exynos 4 HDMI HAL库中SecHdmiV4L2Utils.cpp文件的编译错误。 ... [详细]
  • 本文探讨了 Boost 库中的 Program Options 组件,这是一个强大的工具,用于解析命令行参数和配置文件。文章介绍了如何正确设置和使用该组件,包括处理复杂选项和负数值的方法。 ... [详细]
  • GCC(GNU Compiler Collection)是GNU项目下的一款功能全面且高效的多平台编译工具,广泛应用于Linux操作系统中。本文将详细介绍GCC的特点及其基本使用方法。 ... [详细]
  • 本文介绍了在解决Hive表中复杂数据结构平铺化问题后,如何通过创建视图来准确计算广告日志的曝光PV,特别是针对用户对应多个标签的情况。同时,详细探讨了UDF的使用方法及其在实际项目中的应用。 ... [详细]
  • 本文介绍了如何在Spring框架中配置和使用定时任务,包括初始化配置和动态启动定时器的方法。通过示例代码展示了如何利用Spring的TaskScheduler接口来创建和管理定时任务。 ... [详细]
  • 纵坐标|据点_菜菜的sklearn课堂笔记支持向量机线性SVM决策过程的可视化
    纵坐标|据点_菜菜的sklearn课堂笔记支持向量机线性SVM决策过程的可视化 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • HTTP中的Chunked编码与Content-Length的区别及应用场景
    本文探讨了在HTTP协议中,当使用Transfer-Encoding为chunked时为何无需设置Content-Length,以及这种编码方式的具体实现和优势。 ... [详细]
  • 择要:Fundebug的JavaScript毛病监控插件同步支撑Vue.js异步毛病监控。Vue.js从降生至今已5年,尤大在本年2月份宣布了严重更新,即Vue2.6。更新包含新增 ... [详细]
  • 解决 Pytest 运行时出现 FileNotFoundError 的方法
    在使用 Pytest 进行测试时,可能会遇到 FileNotFoundError 错误,提示无法找到指定的文件或目录。本文将探讨该错误的原因及解决方案。 ... [详细]
  • Python闭包深度解析与应用实例
    本文详细介绍了Python闭包的基本概念、必要条件及其实现方式,并通过具体示例说明闭包在提高代码复用性和维护性方面的作用。文章最后还探讨了闭包的内部机制及其在实际项目中的应用。 ... [详细]
  • 本文探讨了一个在Spring项目中常见的问题——当pom.xml文件中引入了servlet依赖但未指定其作用域为provided时导致的应用启动失败。文章详细分析了错误原因,并提供了有效的解决方案。 ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • 本文详细介绍了在 Red Hat Linux 系统上安装 GCC 4.4.2 的步骤,包括必要的依赖库的安装及常见问题的解决方法。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
author-avatar
非洲小蘑菇bp
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有