ubunut sublime text3 中文输入法问题
来源:互联网 发布:excel2013快速选择数据 编辑:程序博客网 时间:2024/05/18 01:38
保存下面的代码到文件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;voidgdk_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);}
将上一步的代码编译成共享库libsublime-imfix.so,命令
cd ~
gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC
然后将libsublime-imfix.so拷贝到sublime_text所在文件夹
sudo mv libsublime-imfix.so /opt/sublime_text/
修改文件/usr/bin/subl的内容
sudo gedit /usr/bin/subl
将
#!/bin/sh
exec /opt/sublime_text/sublime_text "$@"
修改为
#!/bin/sh
LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text "$@"
此时,在命令中执行 subl 将可以使用搜狗for linux的中文输入
为了使用鼠标右键打开文件时能够使用中文输入,还需要修改文件sublime_text.desktop的内容。
命令 sudo gedit /usr/share/applications/sublime_text.desktop
将[Desktop Entry]中的字符串 Exec=/opt/sublime_text/sublime_text %F
修改为 Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text %F"
将[Desktop Action Window]中的字符串 Exec=/opt/sublime_text/sublime_text -n
修改为 Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text -n"
将[Desktop Action Document]中的字符串 Exec=/opt/sublime_text/sublime_text --command new_file
修改为 Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text --command new_file"
注意:修改时请注意双引号"",否则会导致不能打开带有空格文件名的文件。此处仅修改了/usr/share/applications/sublime-text.desktop,但可以正常使用了。
opt/sublime_text/目录下的sublime-text.desktop可以修改,也可不修改。
- ubunut sublime text3 中文输入法问题
- sublime text3中文输入法设置
- Sublime Text3 解决中文输入法不跟随问题
- 解决ubuntu16.04下的sublime text3不能使用中文输入法的问题
- Ubuntu 下让sublime-text3支持中文输入法
- linux/ubuntu sublime text3 配置中文输入法 fcitx(亲身验证)
- ubuntu下sublime-text3无法使用中文输入法
- sublime text3 输入中文 以及搜狗输入法安装
- Linux sublime text3输入中文的问题.
- mac下sublime text3中文乱码问题
- 解决sublime text3中文乱码问题
- 解决 Sublime text3 中文显示乱码问题
- Mac Sublime Text3 中文乱码问题
- 解决 Sublime text3 中文显示乱码问题
- 解决 Sublime text3 中文显示乱码问题
- 解决 Sublime text3 中文显示乱码问题
- Sublime Text3不支持中文
- Sublime Text3显示中文
- C语言 求数组长度
- 每天一个linux命令(15):rmdir 命令
- c语言之栈存储区和全局区理解
- LeetCode Problem5 LongestPalindromicSubstring
- 字符串转整型并排序
- ubunut sublime text3 中文输入法问题
- UML---面向对象技术
- 算法 + 算法 = 新算法
- leetcode 14 Longest Common prefix
- 使用python实现身份证号码的规则校验
- android 修改RadioButton的drawTop图片大小
- a href=#与 a href=javascript:void(0) 的区别
- 1005. 继续(3n+1)猜想 (25)
- TypeScript学习-TypeScript数据类型简介