让Source Insight完美支持中文注释 (转)
生活随笔
收集整理的這篇文章主要介紹了
让Source Insight完美支持中文注释 (转)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如何讓source insight支持中文注釋,解決回車刪除,移動光標出現亂碼的問題?下面是解決方案: -------Source Insight3 中文操作(左右鍵、刪除和后退鍵)支持宏------- 感謝丁兆杰(zhaojie.ding@gmail.com)及互聯網上辛勤耕耘的朋友們!!! Evan: sdcw@163.com ① Project→Open Project,打開Base項目,將文中代碼框中的所有內容函數復制到utils.em文件的最后; ② 重啟SourceInsight; ③ Options→Key Assignments,將下面宏依次與相應按鍵綁定: Marco: SuperBackspace綁定到BackSpace鍵; Marco: SuperCursorLeft綁定到<-鍵, Marco: SuperCursorRight綁定到->鍵, Marco: SuperShiftCursorLeft綁定到Shift+<-, Macro: SuperShiftCursorRight綁定到shift+->, Macro: SuperDelete綁定到del。 ④ Enjoy ------------解決source insight 中文間距的方法:----------------- 默認情況下,往Source Insight里輸入中文,字間距相當的大,要解決這個問題,具體設置如下: 1. Options->Style Properties 2. 在左邊Style Name下找到Comment Multi Line和Comment.在其右邊對應的Font屬性框下的 Font Name中選“Pick...” 設置為宋體、常規、小四。確定,退回Style Properties界面, Size設為10。最后設置Clolors框下Foreground,點“Pick...”選擇一種自己喜歡的顏色就OK了。 代碼:
/*======================================================================
1、BackSpace后退鍵
======================================================================*/
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;
}
/*======================================================================
2、刪除鍵——SuperDelete.em
======================================================================*/
macro SuperDelete()
{
????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?" "
????????SuperDelete(1);
????????stop;
????}
????//?copy current line
????text?=?GetBufLine(hbuf,?ln);
????//?get?string?length
????len?=?strlen(text);
????if?(ipos?==?len?||?len?==?0)?{
totalLn?=?GetBufLineCount?(hbuf);
lastText?=?GetBufLine(hBuf,?totalLn-1);
lastLen?=?strlen(lastText);
????????if?(ipos?==?lastLen)//?end?of file
???stop;
????????ln?=?ln?+?1;?//?do?not?use?"ln--"?for?compatibility?with?older versions
????????nextline?=?GetBufLine(hbuf,?ln);
????????nextlen?=?strlen(nextline);
????????//?combine two lines
????????text?=?cat(text,?nextline);
????????//?del two lines
????????DelBufLine(hbuf,?ln-1);
????????DelBufLine(hbuf,?ln-1);
????????//?insert the combined one
????????InsBufLine(hbuf,?ln-1,?text);
????????//?set?the cursor position
????????SetBufIns(hbuf,?ln-1,?len);
????????stop;
????}
????num?=?1;?//?del one?char
????if?(ipos?>?0)?{
????????//?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)?||?count?==?0)?&&?(ipos?<?len-1))
????????????????ipos?=?ipos?+?1;?//?adjust cursor position
????????}
//?keeping safe
if?(ipos?-?num?<?0)
????????????num?=?ipos;
????}
????else?{
i?=?ipos;
count?=?0;
while(AsciiFromChar(text)?>=?160)?{
?????i?=?i?+?1;
?????count?=?count?+?1;
?????if(i?==?len-1)
???break;
}
if(count?>?0)?{
?????num?=?2;
}
????}
????text?=?cat(strmid(text,?0,?ipos),?strmid(text,?ipos+num,?len));
????DelBufLine(hbuf,?ln);
????InsBufLine(hbuf,?ln,?text);
????SetBufIns(hbuf,?ln,?ipos);
????stop;
}
/*======================================================================
3、左移鍵——SuperCursorLeft.em
======================================================================*/
macro IsComplexCharacter()
{
hwnd?=?GetCurrentWnd();
hbuf?=?GetCurrentBuf();
if?(hbuf?==?0)
???return?0;
//當前位置
pos?=?GetWndSelIchFirst(hwnd);
//當前行數
ln?=?GetBufLnCur(hbuf);
//得到當前行
text?=?GetBufLine(hbuf,?ln);
//得到當前行長度
len?=?strlen(text);
//從頭計算漢字字符的個數
if(pos?>?0)
{
???i=pos;
???count=0;
???while(AsciiFromChar(text[i-1])?>=?160)
???{
????i?=?i?-?1;
????count?=?count+1;
????if(i?==?0)
?????break;
???}
???if((count/2)*2==count||?count==0)
????return?0;
???else
????return?1;
}
return?0;
}
macro moveleft()
{
hwnd?=?GetCurrentWnd();
hbuf?=?GetCurrentBuf();
if?(hbuf?==?0)
????????stop;?//?empty buffer
ln?=?GetBufLnCur(hbuf);
ipos?=?GetWndSelIchFirst(hwnd);
if(GetBufSelText(hbuf)?!=?""?||?(ipos?==?0?&&?ln?==?0))?//?第0行或者是選中文字,則不移動
{
???SetBufIns(hbuf,?ln,?ipos);
???stop;
}
if(ipos?==?0)
{
???preLine?=?GetBufLine(hbuf,?ln-1);
???SetBufIns(hBuf,?ln-1,?strlen(preLine)-1);
}
else
{
???SetBufIns(hBuf,?ln,?ipos-1);
}
}
macro SuperCursorLeft()
{
moveleft();
if(IsComplexCharacter())
???moveleft();
}
/*======================================================================
4、右移鍵——SuperCursorRight.em
======================================================================*/
macro moveRight()
{
hwnd?=?GetCurrentWnd();
hbuf?=?GetCurrentBuf();
if?(hbuf?==?0)
????????stop;?//?empty buffer
ln?=?GetBufLnCur(hbuf);
ipos?=?GetWndSelIchFirst(hwnd);
totalLn?=?GetBufLineCount(hbuf);
text?=?GetBufLine(hbuf,?ln);
if(GetBufSelText(hbuf)?!=?"")?//選中文字
{
???ipos?=?GetWndSelIchLim(hwnd);
???ln?=?GetWndSelLnLast(hwnd);
???SetBufIns(hbuf,?ln,?ipos);
???stop;
}
if(ipos?==?strlen(text)-1?&&?ln?==?totalLn-1)?//?末行
???stop;
if(ipos?==?strlen(text))
{
???SetBufIns(hBuf,?ln+1,?0);
}
else
{
???SetBufIns(hBuf,?ln,?ipos+1);
}
}
macro SuperCursorRight()
{
moveRight();
if(IsComplexCharacter())?//?defined?in?SuperCursorLeft.em
???moveRight();
}
/*======================================================================
5、shift+右移鍵——ShiftCursorRight.em
======================================================================*/
macro IsShiftRightComplexCharacter()
{
hwnd?=?GetCurrentWnd();
hbuf?=?GetCurrentBuf();
if?(hbuf?==?0)
???return?0;
selRec?=?GetWndSel(hwnd);
pos?=?selRec.ichLim;
ln?=?selRec.lnLast;
text?=?GetBufLine(hbuf,?ln);
len?=?strlen(text);
if(len?==?0?||?len?<?pos)
return?1;
//Msg("@len@;@pos@;");
if(pos?>?0)
{
???i=pos;
???count=0;
???while(AsciiFromChar(text[i-1])?>=?160)
???{
????i?=?i?-?1;
????count?=?count+1;
????if(i?==?0)
?????break;
???}
???if((count/2)*2==count||?count==0)
????return?0;
???else
????return?1;
}
return?0;
}
macro shiftMoveRight()
{
hwnd?=?GetCurrentWnd();
hbuf?=?GetCurrentBuf();
if?(hbuf?==?0)
????????stop;?
ln?=?GetBufLnCur(hbuf);
ipos?=?GetWndSelIchFirst(hwnd);
totalLn?=?GetBufLineCount(hbuf);
text?=?GetBufLine(hbuf,?ln);
selRec?=?GetWndSel(hwnd);
curLen?=?GetBufLineLength(hbuf,?selRec.lnLast);
if(selRec.ichLim?==?curLen+1?||?curLen?==?0)
{
???if(selRec.lnLast?==?totalLn?-1)
????stop;
???selRec.lnLast?=?selRec.lnLast?+?1;
???selRec.ichLim?=?1;
???SetWndSel(hwnd,?selRec);
???if(IsShiftRightComplexCharacter())
????shiftMoveRight();
???stop;
}
selRec.ichLim?=?selRec.ichLim+1;
SetWndSel(hwnd,?selRec);
}
macro SuperShiftCursorRight()
{
if(IsComplexCharacter())
???SuperCursorRight();
shiftMoveRight();
if(IsShiftRightComplexCharacter())
???shiftMoveRight();
}
/*======================================================================
6、shift+左移鍵——ShiftCursorLeft.em
======================================================================*/
macro IsShiftLeftComplexCharacter()
{
hwnd?=?GetCurrentWnd();
hbuf?=?GetCurrentBuf();
if?(hbuf?==?0)
???return?0;
selRec?=?GetWndSel(hwnd);
pos?=?selRec.ichFirst;
ln?=?selRec.lnFirst;
text?=?GetBufLine(hbuf,?ln);
len?=?strlen(text);
if(len?==?0?||?len?<?pos)
???return?1;
//Msg("@len@;@pos@;");
if(pos?>?0)
{
???i=pos;
???count=0;
???while(AsciiFromChar(text[i-1])?>=?160)
???{
????i?=?i?-?1;
????count?=?count+1;
????if(i?==?0)
?????break;
???}
???if((count/2)*2==count||?count==0)
????return?0;
???else
????return?1;
}
return?0;
}
macro shiftMoveLeft()
{
hwnd?=?GetCurrentWnd();
hbuf?=?GetCurrentBuf();
if?(hbuf?==?0)
????????stop;?
ln?=?GetBufLnCur(hbuf);
ipos?=?GetWndSelIchFirst(hwnd);
totalLn?=?GetBufLineCount(hbuf);
text?=?GetBufLine(hbuf,?ln);
selRec?=?GetWndSel(hwnd);
//curLen?=?GetBufLineLength(hbuf,?selRec.lnFirst);
//Msg("@curLen@;@selRec@");
if(selRec.ichFirst?==?0)
{
???if(selRec.lnFirst?==?0)
????stop;
???selRec.lnFirst?=?selRec.lnFirst?-?1;
???selRec.ichFirst?=?GetBufLineLength(hbuf,?selRec.lnFirst)-1;
???SetWndSel(hwnd,?selRec);
???if(IsShiftLeftComplexCharacter())
????shiftMoveLeft();
???stop;
}
selRec.ichFirst?=?selRec.ichFirst-1;
SetWndSel(hwnd,?selRec);
}
macro SuperShiftCursorLeft()
{
if(IsComplexCharacter())
???SuperCursorLeft();
shiftMoveLeft();
if(IsShiftLeftComplexCharacter())
???shiftMoveLeft();
}
/*---END---*/
轉自:http://blog.chinaunix.net/uid-10540984-id-3214137.html
轉載于:https://www.cnblogs.com/suiying/p/4631759.html
總結
以上是生活随笔為你收集整理的让Source Insight完美支持中文注释 (转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程面试题
- 下一篇: POJ 2411 Mondriaan#3