您的位置:首页 > 其它

【Mark】SourceInsight 删除汉字时半个汉字 乱码问题 的补丁

2015-11-18 09:30 453 查看
*=========================== SuperBackspace.em ============================

* SuperBackspace Version 0.1beta

*

* 代替SourceInsight原有的Backspace功能

* 增加了对双字节汉字的支持,在删除汉字的时候也能同时删除汉字的高字节而缓解半个汉字问题

* 能够对光标在汉字中间的情况进行自动修正

*

* 安装:

* ① 复制入SourceInsight安装目录;

* ② Project→Open Project,打开Base项目;

* ③ 将复制过去的SuperBackspace.em添加入Base项目;

* ④ 重启SourceInsight;

* ⑤ Options→Key Assignments,将Marco: SuperBackspace绑定到BackSpace键;

* ⑥ Enjoy!!


*

* This program is free software; you can redistribute it and/or modify

* it under the terms of the GNU General Public License as published by

* the Free Software Foundation; either version 2 of the License, or

* (at your option) any later version.

*

* This program is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

* GNU General Public License for more details.

*

* You should have received a copy of the GNU General Public License

* along with this program; if not, write to the Free Software

* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

*/

macro SuperBackspace()

{

hwnd = GetCurrentWnd();

hbuf = GetCurrentBuf();

if (hbuf == 0)

stop; // empty buffer

// get current cursor postion

ipos = GetWndSelIchFirst(hwnd);

// get current line number

ln = GetBufLnCur(hbuf);

if ((GetBufSelText(hbuf) != "") || (GetWndSelLnFirst(hwnd) != GetWndSelLnLast(hwnd))) {

// sth. was selected, del selection

SetBufSelText(hbuf, " "); // stupid & buggy sourceinsight :(

// del the " "

SuperBackspace(1);

stop;

}

// copy current line

text = GetBufLine(hbuf, ln);

// get string length

len = strlen(text);

// if the cursor is at the start of line, combine with prev line

if (ipos == 0 || len == 0) {

if (ln <= 0)

stop; // top of file

ln = ln - 1; // do not use "ln--" for compatibility with older versions

prevline = GetBufLine(hbuf, ln);

prevlen = strlen(prevline);

// combine two lines

text = cat(prevline, text);

// del two lines

DelBufLine(hbuf, ln);

DelBufLine(hbuf, ln);

// insert the combined one

InsBufLine(hbuf, ln, text);

// set the cursor position

SetBufIns(hbuf, ln, prevlen);

stop;

}

num = 1; // del one char

if (ipos >= 1) {

// process Chinese character

i = ipos;

count = 0;

while (AsciiFromChar(text[i - 1]) >= 160) {

i = i - 1;

count = count + 1;

if (i == 0)

break;

}

if (count > 0) {

// I think it might be a two-byte character

num = 2;

// This idiot does not support mod and bitwise operators

if ((count / 2 * 2 != count) && (ipos < len))

ipos = ipos + 1; // adjust cursor position

}

}

// keeping safe

if (ipos - num < 0)

num = ipos;

// del char(s)

text = cat(strmid(text, 0, ipos - num), strmid(text, ipos, len));

DelBufLine(hbuf, ln);

InsBufLine(hbuf, ln, text);

SetBufIns(hbuf, ln, ipos - num);

stop;

}

*============================ SuperBackspace.em ============================

注意:按此方法配置sourceinsight成功后,会有三个小BUG(目前只发现这三个)

1、Delete删除时,仍然是一次只能删除半个汉字,仍然会出现乱码;

2、左右移动光标时,光标仍然会出现在汉字的中间;

3、当输入法切换到输入汉字模式时,通过shift+符号键,输入符号时,乱码!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: