sublime text3 输入中文的解决方法及注册

让它输入中文的原理就是给sublime text3给打上个补丁libsublime-imfix.so,这个补丁可以直接git回来,或者下载补丁的源码编译安装。

Ubuntu可以直接按照下面的教程

sublime text3 输入中文的解决方法

 

1. 下载我们需要的文件,打开终端 ,输入:

git clone https://github.com/lyfeyaj/sublime-text-imfix.git

2. 将下载的文件解压之后,移到当前目录(~目录下边),然后执行下边命令:

cd ~/sublime-text-imfix (前提:解压后的sublime-text-imfix必须在~目录下) 
sudo cp ./lib/libsublime-imfix.so /opt/sublime_text/
sudo cp ./src/subl /usr/bin/

3. 最后把sublime都关掉,然后在终端输入subl,就可以在sublime使用中文了

本人我折腾的是从源码编译安装补丁的

新建文件sub-fcitx.c,建议放在Sublime Text的所在目录下,将下面的代码复制进去

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
sublime-imfix.c
Use LD_PRELOAD to interpose some function to fix sublime input method support for linux.
By Cjacker Huang

gcc -shared -o libsublime-imfix.so sublime-imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC
LD_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);
}

安装编译环境(archlinux 不用安装,反正我就不用直接执行编译代码行了)

1
2
sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev

切换到sub-fcitx.c,所在目录,编译生成so文件

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

正常的话,目录下会多一个libsublime-imfix.so文件
切换到Sublime Text目录下,通过LD_PRELOAD=./libsublime-imfix.so ./sublime_text命令启动Sublime Text之后,就会发现可以输入中文了,但是这样太麻烦了,通过添加自己的启动脚本可以简化这一过程。

在这里不在安装原贴教程,原贴这里部分的操作是自己直接写一个脚本来打开sublime text的

脚本如下(如果想这样做的话,你把你的安装路径改进下面的脚本里边)

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

SUB3_HOME=$HOME/Software/sublime_text_3
CMD="LD_PRELOAD=./libsublime-imfix.so ./sublime_text"
FILENAME=$1
if [ -n "$1" ]
then
CMD=${CMD}" "`pwd`/$FILENAME
fi
cd "$SUB3_HOME"
eval $CMD

我的(archlinux环境)做法是直接用一个脚本去替换原来在/usr/bin/subl3这个链接文件,这个链接文件是链接到我的安装路径/opt/sublime_text_3/sublime_text文件的,我们安装sublime_text_3的桌面启动文件就是打开这个链接文件的,所以我们直接写一个脚本来替换这个链接文件就可以了,这样就可以在原来的打开图标打开这个脚本(记得你脚本的文件名要和原来链接文件的名字一样哦,archlinux上是subl3),从而输入中文了

脚本如下    (路径自己改一下)

##########################分割符

#!/bin/sh

export LD_PRELOAD=/opt/sublime_text_3/libsublime-imfix.so

exec /opt/sublime_text_3/sublime_text "$@"

##########################分割符

现在你可以把所有sublime text关闭从新打开了,或者直接运行(在命令行敲上subl3)写好的脚本subl3来启动

 

一下是注册内容

Sublime Text3注册码(可用)

作为强大而小巧,性感且快捷的SublimeText,怎么能够允许不时弹个框提醒你购买,并且顶部有未注册这样破坏美感的存在呢?OK,点开Help,填入注册码即可消除此问题。

Sublime text 3 3103 注册码 ! (Update:2016-03-08)

—– BEGIN LICENSE —– 
Michael Barnes 
Single User License 
EA7E-821385 
8A353C41 872A0D5C DF9B2950 AFF6F667 
C458EA6D 8EA3C286 98D1D650 131A97AB 
AA919AEC EF20E143 B361B1E7 4C8B7F04 
B085E65E 2F5F5360 8489D422 FB8FC1AA 
93F6323C FD7F7544 3F39C318 D95E6480 
FCCC7561 8A4A1741 68FA4223 ADCEDE07 
200C25BE DBBC4855 C4CFB774 C5EC138C 
0FEC1CEF D9DCECEC D3A5DAD1 01316C36 
—— END LICENSE ——

—– BEGIN LICENSE —– 
Nicolas Hennion 
Single User License 
EA7E-866075 
8A01AA83 1D668D24 4484AEBC 3B04512C 
827B0DE5 69E9B07A A39ACCC0 F95F5410 
729D5639 4C37CECB B2522FB3 8D37FDC1 
72899363 BBA441AC A5F47F08 6CD3B3FE 
CEFB3783 B2E1BA96 71AAF7B4 AFB61B1D 
0CC513E7 52FF2333 9F726D2C CDE53B4A 
810C0D4F E1F419A3 CDA0832B 8440565A 
35BF00F6 4CA9F869 ED10E245 469C233E 
—— END LICENSE ——

—– BEGIN LICENSE —– 
Anthony Sansone 
Single User License 
EA7E-878563 
28B9A648 42B99D8A F2E3E9E0 16DE076E 
E218B3DC F3606379 C33C1526 E8B58964 
B2CB3F63 BDF901BE D31424D2 082891B5 
F7058694 55FA46D8 EFC11878 0868F093 
B17CAFE7 63A78881 86B78E38 0F146238 
BAE22DBB D4EC71A1 0EC2E701 C7F9C648 
5CF29CA3 1CB14285 19A46991 E9A98676 
14FD4777 2D8A0AB6 A444EE0D CA009B54 
—— END LICENSE ——

—– BEGIN LICENSE —– 
Alexey Plutalov 
Single User License 
EA7E-860776 
3DC19CC1 134CDF23 504DC871 2DE5CE55 
585DC8A6 253BB0D9 637C87A2 D8D0BA85 
AAE574AD BA7D6DA9 2B9773F2 324C5DEF 
17830A4E FBCF9D1D 182406E9 F883EA87 
E585BBA1 2538C270 E2E857C2 194283CA 
7234FF9E D0392F93 1D16E021 F1914917 
63909E12 203C0169 3F08FFC8 86D06EA8 
73DDAEF0 AC559F30 A6A67947 B60104C6 
—— END LICENSE —— 
这份美好来源于这里 Sublime text 3 3103 注册码

 
原文地址:https://www.cnblogs.com/keefer/p/6188390.html