一些Source Insight常用宏

来源:互联网 发布:vscode 网页预览 编辑:程序博客网 时间:2024/06/05 03:44

 86人阅读 评论(0) 收藏 举报

[cpp] view plaincopyprint?
  1. /******************************************************************************* 
  2. * Copyright (C), 2000-2010, Electronic Technology Co., Ltd. 
  3. * 文件名: utils.em 
  4. * 作  者: shangwx 
  5. * 版  本: 
  6. * 日  期: 2010-3-12     //完成日期 
  7. * 说  明: 用于Source Insight的宏。 
  8. * 
  9. * 修订历史: 
  10. *    1. 时间: 2010-3-12 
  11. *       修订者: shangwx 
  12. *       修订内容: 创建 
  13. *    2. 
  14. * 其它: 请将本文件复制到 我的文档/Source Insight/Projects/Base,覆盖原有的文件。 
  15. *******************************************************************************/  
  16.   
  17.   
  18. /******************************************************************************* 
  19. * 函数名称: InsertSysTime 
  20. * 说明:     插入当前系统时间 
  21. * 输入参数: 无  
  22. * 输出参数: 无 
  23. * 返回值:   无 
  24. * 其它:     时间格式如:2010-3-12 9:42:44 
  25. *******************************************************************************/  
  26. macro InsertSysTime()  
  27. {  
  28.     hbufCur = GetCurrentBuf();  
  29.     LocalTime = GetSysTime(1)  
  30.   
  31.     Year = LocalTime.Year  
  32.     Month = LocalTime.Month  
  33.     Day = LocalTime.Day  
  34.     Time = LocalTime.time  
  35.   
  36.     SetBufSelText (hbufCur, "@Year@-@Month@-@Day@ @Time@")  
  37. }  
  38.   
  39. /******************************************************************************* 
  40. * 函数名称: CloseFileWindows 
  41. * 说明:     关闭所有已打开的文件 
  42. * 输入参数: 无  
  43. * 输出参数: 无 
  44. * 返回值:   无 
  45. * 其它:     无 
  46. *******************************************************************************/  
  47. macro CloseFileWindows()  
  48. {  
  49.     cwnd = WndListCount()  
  50.     iwnd = 0  
  51.     while (1)  
  52.     {  
  53.         hwnd = WndListItem(0)  
  54.         hbuf = GetWndBuf(hwnd)  
  55.         SaveBuf(hbuf)  
  56.         CloseWnd(hwnd)  
  57.         iwnd = iwnd + 1  
  58.         if(iwnd >= cwnd)  
  59.         {  
  60.             break  
  61.         }  
  62.     }  
  63. }  
  64.   
  65. /******************************************************************************* 
  66. * 函数名称: InsertIf 
  67. * 说明:     在所选代码块插入#if 0 / #endif 
  68. * 输入参数: 无  
  69. * 输出参数: 无 
  70. * 返回值:   无 
  71. * 其它:     屏蔽所选代码块 
  72. *******************************************************************************/  
  73. macro InsertIf()  
  74. {  
  75.     ProgEnvInfo = GetProgramEnvironmentInfo ()  
  76.     Editor = ProgEnvInfo.UserName  
  77.   
  78.     hwnd = GetCurrentWnd()  
  79.     lnFirst = GetWndSelLnFirst(hwnd)  
  80.     lnLast = GetWndSelLnLast(hwnd)  
  81.     LocalTime = GetSysTime(1)  
  82.   
  83.     Year = LocalTime.Year  
  84.     Month = LocalTime.Month  
  85.     Day = LocalTime.Day  
  86.     Time = LocalTime.time  
  87.     hbuf = GetCurrentBuf()  
  88.     InsBufLine(hbuf, lnFirst, "#if 0")  
  89.     InsBufLine(hbuf, lnLast+2, "#endif /* if 0. @Year@-@Month@-@Day@ @Time@ @Editor@ */")  
  90. }  
  91.   
  92. /******************************************************************************* 
  93. * 函数名称: InsertIfdef 
  94. * 说明:     在所选代码块插入#ifdef XXX / #endif 
  95. * 输入参数: 无  
  96. * 输出参数: 无 
  97. * 返回值:   无 
  98. * 其它:     无 
  99. *******************************************************************************/  
  100. macro InsertIfdef()  
  101. {  
  102.     sz = Ask("Enter ifdef condition:")  
  103.     if (sz != "")  
  104.         IfdefSz(sz);  
  105. }  
  106.   
  107. /******************************************************************************* 
  108. * 函数名称: InsertIfndef 
  109. * 说明:     在所选代码块插入#ifndef XXX / #endif 
  110. * 输入参数: 无  
  111. * 输出参数: 无 
  112. * 返回值:   无 
  113. * 其它:     无 
  114. *******************************************************************************/  
  115. macro InsertIfndef()  
  116. {  
  117.     sz = Ask("Enter ifdnef condition:")  
  118.     if (sz != "")  
  119.         IfndefSz(sz);  
  120. }  
  121.   
  122. // Wrap ifdef <sz> .. endif around the current selection  
  123. macro IfdefSz(sz)  
  124. {  
  125.     ProgEnvInfo = GetProgramEnvironmentInfo ()  
  126.     Editor = ProgEnvInfo.UserName  
  127.   
  128.     hwnd = GetCurrentWnd()  
  129.     lnFirst = GetWndSelLnFirst(hwnd)  
  130.     lnLast = GetWndSelLnLast(hwnd)  
  131.     LocalTime = GetSysTime(1)  
  132.   
  133.     Year = LocalTime.Year  
  134.     Month = LocalTime.Month  
  135.     Day = LocalTime.Day  
  136.     Time = LocalTime.time  
  137.     hbuf = GetCurrentBuf()  
  138.     InsBufLine(hbuf, lnFirst, "#ifdef @sz@")  
  139.     InsBufLine(hbuf, lnLast+2, "#endif /* ifdef @sz@.@Year@-@Month@-@Day@ @Time@ @Editor@ */")  
  140. }  
  141.   
  142. macro IfndefSz(sz)  
  143. {  
  144.     ProgEnvInfo = GetProgramEnvironmentInfo ()  
  145.     Editor = ProgEnvInfo.UserName  
  146.   
  147.     hwnd = GetCurrentWnd()  
  148.     lnFirst = GetWndSelLnFirst(hwnd)  
  149.     lnLast = GetWndSelLnLast(hwnd)  
  150.     LocalTime = GetSysTime(1)  
  151.   
  152.     Year = LocalTime.Year  
  153.     Month = LocalTime.Month  
  154.     Day = LocalTime.Day  
  155.     Time = LocalTime.time  
  156.     hbuf = GetCurrentBuf()  
  157.     InsBufLine(hbuf, lnFirst, "#ifndef @sz@")  
  158.     InsBufLine(hbuf, lnLast+2, "#endif /* ifndef @sz@.@Year@-@Month@-@Day@ @Time@ @Editor@ */")  
  159. }  
  160.   
  161. /******************************************************************************* 
  162. * 函数名称: InsertComment 
  163. * 说明:     插入注释 
  164. * 输入参数: 无  
  165. * 输出参数: 无 
  166. * 返回值:   无 
  167. * 其它:     格式如:/* ABCDEFG */  
  168. *******************************************************************************/  
  169. macro InsertComment()  
  170. {  
  171.     sz = Ask("Enter Comment:")  
  172.     if (sz != "")  
  173.         CommentSz(sz);  
  174. }  
  175.   
  176. macro CommentSz(sz)  
  177. {  
  178.     hbufCur = GetCurrentBuf();  
  179.     SetBufSelText (hbufCur, "/*@sz@*/")  
  180. }  
  181.   
  182. // Delete the current line and appends it to the clipboard buffer  
  183. macro KillLine()  
  184. {  
  185.     hbufCur = GetCurrentBuf();  
  186.     lnCur = GetBufLnCur(hbufCur)  
  187.     //hbufClip = GetBufHandle("Clipboard")  
  188.     //AppendBufLine(hbufClip, GetBufLine(hbufCur, lnCur))  
  189.   
  190.     hwnd = GetCurrentWnd ()  
  191.     SelRec = GetWndSel (hwnd)  
  192.     Cnt = SelRec.lnLast - SelRec.lnFirst + 1  
  193.     while(Cnt--)  
  194.     {  
  195.         DelBufLine(hbufCur, SelRec.lnFirst)  
  196.     }  
  197.     SaveBuf (hbufCur)  
  198. }  
  199.   
  200. /******************************************************************************* 
  201. * 函数名称: InsertFileHeader 
  202. * 说明:     在当前文件上插入文件头注释 
  203. * 输入参数: 无  
  204. * 输出参数: 无 
  205. * 返回值:   无 
  206. * 其它:     无 
  207. *******************************************************************************/  
  208. macro InsertFileHeader()  
  209. {  
  210.     hbuf = GetCurrentBuf()  
  211.   
  212.     ProgEnvInfo = GetProgramEnvironmentInfo ()  
  213.     Author = ProgEnvInfo.UserName  
  214.   
  215.     LocalTime = GetSysTime(1)  
  216.     Year = LocalTime.Year  
  217.     Month = LocalTime.Month  
  218.     Day = LocalTime.Day  
  219.   
  220.     szBufName = GetBufName (hbuf)  
  221.     Len = strlen(szBufName)  
  222.     FileName = ""  
  223.     if( 0 != Len)  
  224.     {  
  225.         cch = Len  
  226.         while ("//" !=  szBufName[cch])  
  227.         {  
  228.             cch = cch - 1  
  229.         }  
  230.   
  231.         while(cch < Len)  
  232.         {  
  233.             cch = cch + 1  
  234.             FileName = Cat(FileName, szBufName[cch])  
  235.         }  
  236.     }  
  237.   
  238.     lnFirst = 0  
  239.     InsBufLine(hbuf, lnFirst++, "/*******************************************************************************")  
  240.     InsBufLine(hbuf, lnFirst++, "* Copyright (C), 2000-@Year@,  Electronic Technology Co., Ltd.")  
  241.     InsBufLine(hbuf, lnFirst++, "* 文件名: @FileName@")  
  242.     InsBufLine(hbuf, lnFirst++, "* 作  者: @Author@")  
  243.     InsBufLine(hbuf, lnFirst++, "* 版  本:")  
  244.     InsBufLine(hbuf, lnFirst++, "* 日  期: @Year@-@Month@-@Day@     //完成日期")  
  245.     InsBufLine(hbuf, lnFirst++, "* 说  明:          // 用于详细说明此程序文件完成的主要功能,与其他模块")  
  246.     InsBufLine(hbuf, lnFirst++, "*                  // 或函数的接口,输出值、取值范围、含义及参数间的控")  
  247.     InsBufLine(hbuf, lnFirst++, "*                  // 制、顺序、独立或依赖等关系")  
  248.     InsBufLine(hbuf, lnFirst++, "* 修订历史:        // 修改历史记录列表,每条修改记录应包括修改日期、修改")  
  249.     InsBufLine(hbuf, lnFirst++, "*                  // 者及修改内容简述")  
  250.     InsBufLine(hbuf, lnFirst++, "*    1. 时间: @Year@-@Month@-@Day@")  
  251.     InsBufLine(hbuf, lnFirst++, "*       修订者: @Author@")  
  252.     InsBufLine(hbuf, lnFirst++, "*       修订内容: 创建")  
  253.     InsBufLine(hbuf, lnFirst++, "*    2.")  
  254.     InsBufLine(hbuf, lnFirst++, "* 其它:           // 其它内容的说明(选填)")  
  255.     InsBufLine(hbuf, lnFirst++, "*******************************************************************************/")  
  256.   
  257.     SetBufIns (hbuf, lnFirst,0)  
  258.     Len = strlen(FileName)  
  259.     if(("h" == tolower(FileName[Len-1])) && ("." == FileName[Len-2]))  
  260.     {  
  261.         FileName = toupper(FileName)  
  262.         FileName[Len-2] = "_"  
  263.         szDef = "_"  
  264.         szDef = Cat(szDef,FileName)  
  265.         szDef = Cat(szDef,"_")  
  266.   
  267.         ProgEnvInfo = GetProgramEnvironmentInfo ()  
  268.         Editor = ProgEnvInfo.UserName  
  269.   
  270.         hwnd = GetCurrentWnd()  
  271.         lnFirst = GetWndSelLnFirst(hwnd)  
  272.         LocalTime = GetSysTime(1)  
  273.   
  274.         Year = LocalTime.Year  
  275.         Month = LocalTime.Month  
  276.         Day = LocalTime.Day  
  277.         Time = LocalTime.time  
  278.         hbuf = GetCurrentBuf()  
  279.         InsBufLine(hbuf,lnFirst++,"#ifndef @szDef@")  
  280.         InsBufLine(hbuf,lnFirst++,"#define @szDef@")  
  281.         InsBufLine(hbuf,lnFirst++,"")  
  282.         InsBufLine(hbuf,lnFirst++,"")  
  283.         InsBufLine(hbuf,lnFirst++,"")  
  284.         InsBufLine(hbuf,lnFirst++,"#endif /* ifndef @szDef@.@Year@-@Month@-@Day@ @Time@ @Editor@ */")  
  285.     }  
  286.     SaveBuf (hbuf)  
  287. }  
  288.   
  289. /******************************************************************************* 
  290. * 函数名称: InsertFunctionHeader 
  291. * 说明:     插入函数的头注释 
  292. * 输入参数: 无  
  293. * 输出参数: 无 
  294. * 返回值:   无 
  295. * 其它:     无 
  296. *******************************************************************************/  
  297. macro InsertFunctionHeader()  
  298. {  
  299.     hbuf = GetCurrentBuf()  
  300.     lnFirst = GetBufLnCur(hbuf)  
  301.     FuncName = GetCurSymbol()  
  302. /* 
  303.     szLine = GetBufLine (hbuf, lnFirst) 
  304.     Len = strlen(szLine) 
  305.     FuncName = "" 
  306.     if( 0 != Len) 
  307.     { 
  308.         cch = 0 
  309.         while ("(" !=  szLine[cch]) 
  310.         { 
  311.             cch = cch + 1 
  312.         } 
  313.  
  314.         while((" " == szLine[cch-1]) || ("  " == szLine[cch-1])) 
  315.         { 
  316.             cch = cch - 1 
  317.         } 
  318.         cch = cch - 1 
  319.         ichLast = cch 
  320.  
  321.         while((" " != szLine[cch]) && ("    " != szLine[cch]) && ("*" != szLine[cch])) 
  322.         { 
  323.             cch = cch - 1 
  324.         } 
  325.         ichFirst = cch 
  326.  
  327.         while(ichFirst < ichLast) 
  328.         { 
  329.             ichFirst = ichFirst + 1 
  330.             FuncName = Cat(FuncName, szLine[ichFirst]) 
  331.         } 
  332.     } 
  333. */  
  334.     InsBufLine(hbuf, lnFirst++, "/*******************************************************************************")  
  335.     InsBufLine(hbuf, lnFirst++, "* 函数名称: @FuncName@      // 函数名称。")  
  336.     InsBufLine(hbuf, lnFirst++, "* 说明:          // 函数功能、性能等的描述。")  
  337.     InsBufLine(hbuf, lnFirst++, "* 输入参数:      // 输入参数说明,包括每个参数的作。 ")  
  338.     InsBufLine(hbuf, lnFirst++, "*                // 用、取值说明及参数间关系。 ")  
  339.     InsBufLine(hbuf, lnFirst++, "* 输出参数:      // 对输出参数的说明。")  
  340.     InsBufLine(hbuf, lnFirst++, "* 返回值:        // 函数返回值的说明。")  
  341.     InsBufLine(hbuf, lnFirst++, "* 其它:          // 其它说明(选填)。")  
  342.     InsBufLine(hbuf, lnFirst++, "*******************************************************************************/")  
  343.   
  344.     SaveBuf (hbuf)  
  345. }  
  346.   
  347. /******************************************************************************* 
  348. * 函数名称: DelPpIf 
  349. * 说明:     删除预处理指令if/ifndef/ifdef ... endif 
  350. * 输入参数: 无  
  351. * 输出参数: 无 
  352. * 返回值:   无 
  353. * 其它:     无 
  354. *******************************************************************************/  
  355. macro DelPpIf()  
  356. {  
  357.     hbuf = GetCurrentBuf()  
  358.     lnFirst = GetBufLnCur(hbuf)  
  359.     lnIf = GetIfLine(hbuf,lnFirst)  
  360.     lnEndif = GetEndifLine(hbuf,lnFirst)  
  361. //  Msg("IF:@lnIf@,END:@lnEnd@")  
  362.   
  363.     if((-1 == lnIf) || (-1 == lnEndif))  
  364.     {  
  365.         return 0  
  366.     }  
  367.     DelBufLine(hbuf,lnIf)  
  368.     DelBufLine(hbuf,lnEndif-1)  
  369. }  
  370.   
  371. macro GetIfLine(hBuf,Ln)  
  372. {  
  373.     Start = Ln  
  374.     Count = 1  
  375.   
  376.     while(Ln > 0)  
  377.     {  
  378.         szLn = GetBufLine(hBuf,Ln)  
  379.   
  380.         i = 0  
  381.         while((" " == szLn[i]) || ("    " == szLn[i]))  
  382.         {  
  383.             i = i + 1  
  384.         }  
  385.         szRet = ""  
  386.         while("" != szLn[i])  
  387.         {  
  388.             szRet = Cat(szRet,szLn[i])  
  389.             i = i + 1  
  390.         }  
  391.         szLn = szRet  
  392.         if(4 > strlen(szLn))  
  393.         {  
  394.             Ln = Ln - 1  
  395.             continue  
  396.         }  
  397.         if(("#" == szLn[0]) && ("i" == szLn[1]) && ("f" == szLn[2]))  
  398.         {  
  399.             Count = Count - 1  
  400.             if(0 >= Count)  
  401.             {  
  402.                 return(Ln)  
  403.             }  
  404.         }  
  405.         else  
  406.         {  
  407.             if(("#" == szLn[0]) && ("e" == szLn[1]) && ("n" == szLn[2]) && ("d" == szLn[3]))  
  408.             {  
  409.                 if(Start != Ln)  
  410.                 {  
  411.                     Count = Count + 1  
  412.                 }  
  413.             }  
  414.         }  
  415.         Ln = Ln - 1  
  416.     }  
  417.     return -1  
  418. }  
  419.   
  420. macro GetEndifLine(hBuf,Ln)  
  421. {  
  422.     Start = Ln  
  423.     Count = 1  
  424.     lnCnt = GetBufLineCount (hBuf)  
  425.   
  426.     while(Ln < lnCnt)  
  427.     {  
  428.         szLn = GetBufLine(hBuf,Ln)  
  429.         i = 0  
  430.         while((" " == szLn[i]) || ("    " == szLn[i]))  
  431.         {  
  432.             i = i + 1  
  433.         }  
  434.         szRet = ""  
  435.         while("" != szLn[i])  
  436.         {  
  437.             szRet = Cat(szRet,szLn[i])  
  438.             i = i + 1  
  439.         }  
  440.   
  441.         szLn = szRet  
  442.         if(4 > strlen(szLn))  
  443.         {  
  444.             Ln = Ln + 1  
  445.             continue  
  446.         }  
  447.         if(("#" == szLn[0]) && ("e" == szLn[1]) && ("n" == szLn[2]) && ("d" == szLn[3]))  
  448.         {  
  449.             Count = Count - 1  
  450.             if(0 >= Count)  
  451.             {  
  452.                 return(Ln)  
  453.             }  
  454.         }  
  455.         else  
  456.         {  
  457.             if(("#" == szLn[0]) && ("i" == szLn[1]) && ("f" == szLn[2]))  
  458.             {  
  459.                 if(Start != Ln)  
  460.                 {  
  461.                     Count = Count + 1  
  462.                 }  
  463.             }  
  464.         }  
  465.         Ln = Ln + 1  
  466.     }  
  467.     return -1  
  468. }  

为宏指定快捷键:

Step 1:将以上代码复制并保存为文件utils.em,然后将其复制到“我的文档/Source Insight/Projects/Base ”覆盖原有的文件。

Step 2:Option-Key Assignments

Step 3:Command栏中找到需要的宏,点击 Assign New Key来指定快捷键。(在这里你可以为Source Insight中的所有命令指定快捷键)。