侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

在linux中安装sublime并解决无法输入中文的问题

2023-11-09 星期四 / 0 评论 / 0 点赞 / 56 阅读 / 5568 字

由于众所周知的原因,在linux中使用中文一直有一些尴尬的情况,其中在sublime中无法切换输入法输入中文就是一个,下面介绍一种解决方案。 安装sublime 首先需要到sublime的官网下载程序

由于众所周知的原因,在linux中使用中文一直有一些尴尬的情况,其中在sublime中无法切换输入法输入中文就是一个,下面介绍一种解决方案。

安装sublime

首先需要到sublime的官网下载程序,http://www.sublimetext.com/3 下载得到一个tar.bz2的文件,将这个文件解压缩得到一个文件夹,放置在自己喜欢的地方,假设放置为 /opt/sublime_text_3/。

在解压得到的文件夹中有个 .desktop 的文件,将其中的关于路径的描述进行修改,修改为实际的路径,然后保存到 /usr/local/share/applications 中,需要sudo的权限。

此时,在菜单中已经能够看到sublime的图片,并且已经可以使用。

配置sublime

默认的sublime配置有一些地方需要调整,Preferences->settings,然后将下面的配置粘贴进配置文件中

{	"color_scheme": "Packages/Color Scheme - Default/Monokai Bright.tmTheme",	"expand_tabs_on_save": true,	"font_face": "Microsoft Yahei Mono",	"font_size": 14,	"tab_size": 4,	"translate_tabs_to_spaces": true,	"update_check": false}

Preferences->key bindings,粘贴下面的配置,快捷键的配置

[    { "keys": ["alt+down"], "command": "swap_line_down" },    { "keys": ["alt+up"], "command": "swap_line_up" },    { "keys": ["ctrl+d"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Line.sublime-macro"} },    { "keys": ["ctrl+alt+up"], "command": "duplicate_line" },]

解决输入中文的问题

linux上的sublime不知道为何,默认情况下无法切换中文进行输入,但是复制中文过来可以进行粘贴。

下面提供一种不是非常完美但是能够工作的解决方法。

首先需要安装fcitx与搜狗输入法,参考我写的另一篇文章。

将下面的代码保存为 sublime_imfix.c ,

/*sublime-imfix.cUse LD_PRELOAD to interpose some function to fix sublime input method support for linux.By Cjacker Huanggcc -shared -o libsublime-imfix.so sublime-imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPICLD_PRELOAD=./libsublime-imfix.so subl*/#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);}

为了编译这个代码,需要特别安装编译 gtk2-devel ,编译的命令

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

将编译得到的libsublime-imfix.so放到sublime的程序目录中。

将下面的代码保存为 /usr/bin/sublime

#!/bin/bashexport LD_PRELOAD=/opt/sublime_text_3/libsublime-imfix.soexec /opt/sublime_text_3/sublime_text "$@"

并且赋予执行权限,同时修改sublime的desktop文件中的执行程序路径,修改为 /usr/bin/sublime ,

效果

修改之后需要重新登陆系统才能完全生效,切换之后能够输入中文,但是选词框总是在左下角,即使拖动到想要出现的地方,下次输入依然是左下角,不能跟随,这就是这个方法还不太完美的地方。

如果谁有更好的方法,希望不吝赐教。

广告 广告

评论区