source insight自定义宏脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了source insight自定义宏脚本相关的知识,希望对你有一定的参考价值。
1 /* 获取当前的文件名*/ 2 macro wcjFileName() 3 { 4 hbuf = GetCurrentBuf() 5 6 fullname = GetBufName(hbuf) 7 length = strlen(fullname) 8 if (length == 0) 9 return "" 10 11 index = length 12 while ("\\" != fullname[--index]); 13 14 purename = "" 15 while (index < length) 16 purename = cat(purename, fullname[++index]) 17 18 return purename 19 } 20 21 /*头文件定义名称*/ 22 macro wcjIncDefName() 23 { 24 filename = wcjFileName(); 25 length = strlen(filename); 26 27 defname = "__" 28 index = 0; 29 while (index < length) 30 { 31 if (filename[index] == ".") 32 defname = cat(defname, "_") 33 else 34 defname = cat(defname, toupper(filename[index])) 35 36 ++index 37 } 38 39 defname = cat(defname, "__") 40 41 return defname 42 } 43 44 /*获取当前时间*/ 45 macro wcjGetTime() 46 { 47 var year 48 var month 49 var day 50 var commTime 51 var sysTime 52 53 sysTime = GetSysTime(1) 54 year = sysTime.Year 55 month = sysTime.month 56 day = sysTime.day 57 commTime = "@[email protected]@[email protected]@[email protected]" 58 return commTime 59 } 60 61 /**************************************new file related***********************************************/ 62 macro _wcjCommentFile() 63 { 64 szMyName = "wcj" 65 66 hbuf = GetCurrentBuf() 67 ln = 0 68 InsBufLine(hbuf, ln++, "/*-------------------------------------------------------------------------") 69 InsBufLine(hbuf, ln++, cat(" File: ", wcjFileName()) 70 InsBufLine(hbuf, ln++, cat(" Author: ", szMyName)) 71 InsBufLine(hbuf, ln++, cat(" Date: ", wcjGetTime()) 72 InsBufLine(hbuf, ln++, cat(" Desc: ", "")) 73 InsBufLine(hbuf, ln++, "-------------------------------------------------------------------------*/") 74 75 /* 设置光标正确的位置 */ 76 SetBufIns(hbuf, ln, 0) 77 78 return true 79 } 80 81 /*在当前行的前一行添加注释*/ 82 macro _wcjCommentBefore() 83 { 84 hbuf = GetCurrentBuf() 85 ln = GetBufLnCur(hbuf) 86 87 comment = "" 88 89 /*补足空格*/ 90 text = GetBufLine(hbuf, ln) 91 index = 0 92 while (true) 93 { 94 c = text[index++] 95 if (c != " " && c != " ") 96 break; 97 98 comment = cat(comment, c) 99 } 100 101 comment = cat(comment, "/**< */") 102 103 InsBufLine(hbuf, ln, comment) 104 105 /* 设置光标正确的位置 */ 106 SetBufIns(hbuf, ln, strlen(comment) - 3) 107 108 return true 109 } 110 111 macro _wcjCommentHeader() 112 { 113 hbuf = GetCurrentBuf() 114 115 szFunc = GetCurSymbol() 116 ln = GetSymbolLine(szFunc) 117 SetBufIns(hbuf, ln, 0) 118 119 return _wcjCommentBefore() 120 121 } 122 123 macro _wcjHandleComment(key) 124 { 125 if (key == "commentfile" || key == "cf") 126 return _wcjCommentFile() 127 if (key == "commentbefore" || key == "commentbef" || key == "cb") 128 return _wcjCommentBefore() 129 if (key == "commentheader" || key == "ch") 130 return _wcjCommentHeader() 131 132 return false 133 } 134 135 /**************************************new file related***********************************************/ 136 macro _wcjNewFile(bInc) 137 { 138 defname = wcjIncDefName() 139 140 _wcjCommentFile() 141 142 hbuf = GetCurrentBuf() 143 ln = GetBufLnCur(hbuf) 144 145 if (bInc) 146 { 147 InsBufLine(hbuf, ln++, "#ifndef @[email protected]") 148 InsBufLine(hbuf, ln++, "#define @[email protected]") 149 InsBufLine(hbuf, ln++, "") 150 } 151 InsBufLine(hbuf, ln++, "#ifdef _cplusplus") 152 153 InsBufLine(hbuf, ln++, "#ifdef _cplusplus") 154 InsBufLine(hbuf, ln++, "#if _cplusplus") 155 InsBufLine(hbuf, ln++, "extern \"C\"{") 156 InsBufLine(hbuf, ln++, "#endif") 157 InsBufLine(hbuf, ln++, "#endif") 158 159 InsBufLine(hbuf, ln++, "") 160 cursorln = ln 161 InsBufLine(hbuf, ln++, "") 162 InsBufLine(hbuf, ln++, "") 163 164 InsBufLine(hbuf, ln++, "#ifdef _cplusplus") 165 InsBufLine(hbuf, ln++, "#if _cplusplus") 166 InsBufLine(hbuf, ln++, "}") 167 InsBufLine(hbuf, ln++, "#endif") 168 InsBufLine(hbuf, ln++, "#endif") 169 170 if (bInc) 171 InsBufLine(hbuf, ln++, "#endif /* @[email protected] */") 172 173 /* 设置光标正确的位置 */ 174 SetBufIns(hbuf, cursorln, 4) 175 } 176 macro _wcjHandleNewFile(key) 177 { 178 /*插入C标准的include文件内容*/ 179 if (key == "newinc") return _wcjNewFile(true) 180 /*插入C标准的C文件内容*/ 181 if (key == "newc") return _wcjNewFile(true) 182 183 return false 184 } 185 186 /**************************************ufp type related***********************************************/ 187 /*程序中用到的自定义快捷键*/ 188 macro _wcjGetUfpType(key) 189 { 190 key = tolower(key); 191 192 if (key == "i") return "UFP_INT32" 193 if (key == "ui" || key=="u") 194 return "UFP_UINT32" 195 if (key == "ull") return "UFP_UINT64" 196 if (key == "uv") return "UFP_UINTPTR" 197 if (key == "v") return "UFP_VOID" 198 if (key == "vp") return "UFP_PHYS_ADDR" 199 200 if (key == "n") return "UFP_NULL_PTR" 201 202 203 return "" 204 } 205 /*快捷内容插入*/ 206 macro _wcjHandleUfpType(key) 207 { 208 /*key = Ask("Enter ufp type short key");*/ 209 ufptype = _wcjGetUfpType(key) 210 if (ufptype == "") 211 return false; 212 213 /* 获得指定行文本 */ 214 hbuf = GetCurrentBuf() 215 ln = GetBufLnCur(hbuf) 216 text = GetBufLine(hbuf, ln) 217 218 /* 获得光标位置 */ 219 hwnd = GetCurrentWnd() 220 sel = GetWndSel(hwnd) 221 column = sel.ichFirst 222 223 /* 为当前位置插入正确内容 */ 224 DelBufLine(hbuf, ln) 225 before = strtrunc(text, column) 226 after = strmid(text, column, strlen(text)) 227 newtext = "@[email protected]@[email protected]@[email protected]" 228 InsBufLine(hbuf, ln, newtext) 229 230 /* 设置光标正确的位置 */ 231 pos = column + strlen(ufptype) 232 SetBufIns(hbuf, ln, pos) 233 234 return true; 235 } 236 237 /**************************************macro related***********************************************/ 238 /*插入ifdef*/ 239 macro _wcjIfdefSz() 240 { 241 data = Ask("Enter ifdef condition:") 242 if (data == "") 243 return true 244 245 hwnd = GetCurrentWnd() 246 lnFirst = GetWndSelLnFirst(hwnd) 247 lnLast = GetWndSelLnLast(hwnd) 248 249 hbuf = GetCurrentBuf() 250 InsBufLine(hbuf, lnFirst, "#ifdef @[email protected]") 251 InsBufLine(hbuf, lnLast+2, "#endif /* @[email protected] */") 252 253 return true 254 } 255 256 /*插入if*/ 257 macro _wcjIfSz(data) 258 { 259 hwnd = GetCurrentWnd() 260 lnFirst = GetWndSelLnFirst(hwnd) 261 lnLast = GetWndSelLnLast(hwnd) 262 263 hbuf = GetCurrentBuf() 264 InsBufLine(hbuf, lnFirst, "#if @[email protected]") 265 InsBufLine(hbuf, lnLast+2, "#endif") 266 267 return true 268 } 269 270 macro _wcjHandleMacro(key) 271 { 272 if (key == "if0") return _wcjIfSz(0) 273 if (key == "ifdef") return _wcjIfdefSz() 274 275 return false 276 } 277 278 /* 主入口 */ 279 macro wcjMain() 280 { 281 key = Ask("Enter anthing you want:") 282 if (key == "") 283 return "" 284 285 /*ufp type处理*/ 286 if (_wcjHandleUfpType(key)) return "" 287 /*macro相关*/ 288 if (_wcjHandleMacro(key)) return "" 289 /*new file*/ 290 if (_wcjHandleNewFile(key)) return "" 291 /*comment*/ 292 if (_wcjHandleComment(key)) return "" 293 294 return "" 295 }
注:
1. 这个source insight中用的脚本,将其另存为任意名称.em文件
2. base工程中add该脚本
3. 在option->key assignment中将wcjMain关联某个快捷键后即可使用
4. 该脚本功能包括类型替换、注释添加、标准的C头文件及实现文件的标准格式添加、部分宏操作等。
5. 功能尚待完善,使用时缺什么补什么。
以上是关于source insight自定义宏脚本的主要内容,如果未能解决你的问题,请参考以下文章