utils.em
上传用户:jnxxjx
上传日期:2015-03-08
资源大小:3388k
文件大小:5k
源码类别:

VC书籍

开发平台:

C/C++

  1. /* Utils.em - a small collection of useful editing macros */
  2. /*-------------------------------------------------------------------------
  3. I N S E R T   H E A D E R
  4. Inserts a comment header block at the top of the current function. 
  5. This actually works on any type of symbol, not just functions.
  6. To use this, define an environment variable "MYNAME" and set it
  7. to your email name.  eg. set MYNAME=raygr
  8. -------------------------------------------------------------------------*/
  9. macro InsertHeader()
  10. {
  11. // Get the owner's name from the environment variable: MYNAME.
  12. // If the variable doesn't exist, then the owner field is skipped.
  13. szMyName = getenv(MYNAME)
  14. // Get a handle to the current file buffer and the name
  15. // and location of the current symbol where the cursor is.
  16. hbuf = GetCurrentBuf()
  17. szFunc = GetCurSymbol()
  18. ln = GetSymbolLine(szFunc)
  19. // begin assembling the title string
  20. sz = "/*   "
  21. /* convert symbol name to T E X T   L I K E   T H I S */
  22. cch = strlen(szFunc)
  23. ich = 0
  24. while (ich < cch)
  25. {
  26. ch = szFunc[ich]
  27. if (ich > 0)
  28. if (isupper(ch))
  29. sz = cat(sz, "   ")
  30. else
  31. sz = cat(sz, " ")
  32. sz = Cat(sz, toupper(ch))
  33. ich = ich + 1
  34. }
  35. sz = Cat(sz, "   */")
  36. InsBufLine(hbuf, ln, sz)
  37. InsBufLine(hbuf, ln+1, "/*-------------------------------------------------------------------------")
  38. /* if owner variable exists, insert Owner: name */
  39. if (strlen(szMyName) > 0)
  40. {
  41. InsBufLine(hbuf, ln+2, "    Owner: @szMyName@")
  42. InsBufLine(hbuf, ln+3, " ")
  43. ln = ln + 4
  44. }
  45. else
  46. ln = ln + 2
  47. InsBufLine(hbuf, ln,   "    ") // provide an indent already
  48. InsBufLine(hbuf, ln+1, "-------------------------------------------------------------------------*/")
  49. // put the insertion point inside the header comment
  50. SetBufIns(hbuf, ln, 4)
  51. }
  52. /* InsertFileHeader:
  53.    Inserts a comment header block at the top of the current function. 
  54.    This actually works on any type of symbol, not just functions.
  55.    To use this, define an environment variable "MYNAME" and set it
  56.    to your email name.  eg. set MYNAME=raygr
  57. */
  58. macro InsertFileHeader()
  59. {
  60. szMyName = getenv(MYNAME)
  61. hbuf = GetCurrentBuf()
  62. InsBufLine(hbuf, 0, "/*-------------------------------------------------------------------------")
  63. /* if owner variable exists, insert Owner: name */
  64. InsBufLine(hbuf, 1, "    ")
  65. if (strlen(szMyName) > 0)
  66. {
  67. sz = "    Owner: @szMyName@"
  68. InsBufLine(hbuf, 2, " ")
  69. InsBufLine(hbuf, 3, sz)
  70. ln = 4
  71. }
  72. else
  73. ln = 2
  74. InsBufLine(hbuf, ln, "-------------------------------------------------------------------------*/")
  75. }
  76. // Inserts "Returns True .. or False..." at the current line
  77. macro ReturnTrueOrFalse()
  78. {
  79. hbuf = GetCurrentBuf()
  80. ln = GetBufLineCur(hbuf)
  81. InsBufLine(hbuf, ln, "    Returns True if successful or False if errors.")
  82. }
  83. /* Inserts ifdef REVIEW around the selection */
  84. macro IfdefReview()
  85. {
  86. IfdefSz("REVIEW");
  87. }
  88. /* Inserts ifdef BOGUS around the selection */
  89. macro IfdefBogus()
  90. {
  91. IfdefSz("BOGUS");
  92. }
  93. /* Inserts ifdef NEVER around the selection */
  94. macro IfdefNever()
  95. {
  96. IfdefSz("NEVER");
  97. }
  98. // Ask user for ifdef condition and wrap it around current
  99. // selection.
  100. macro InsertIfdef()
  101. {
  102. sz = Ask("Enter ifdef condition:")
  103. if (sz != "")
  104. IfdefSz(sz);
  105. }
  106. macro InsertCPlusPlus()
  107. {
  108. IfdefSz("__cplusplus");
  109. }
  110. // Wrap ifdef <sz> .. endif around the current selection
  111. macro IfdefSz(sz)
  112. {
  113. hwnd = GetCurrentWnd()
  114. lnFirst = GetWndSelLnFirst(hwnd)
  115. lnLast = GetWndSelLnLast(hwnd)
  116.  
  117. hbuf = GetCurrentBuf()
  118. InsBufLine(hbuf, lnFirst, "#ifdef @sz@")
  119. InsBufLine(hbuf, lnLast+2, "#endif /* @sz@ */")
  120. }
  121. // Delete the current line and appends it to the clipboard buffer
  122. macro KillLine()
  123. {
  124. hbufCur = GetCurrentBuf();
  125. lnCur = GetBufLnCur(hbufCur)
  126. hbufClip = GetBufHandle("Clipboard")
  127. AppendBufLine(hbufClip, GetBufLine(hbufCur, lnCur))
  128. DelBufLine(hbufCur, lnCur)
  129. }
  130. // Paste lines killed with KillLine (clipboard is emptied)
  131. macro PasteKillLine()
  132. {
  133. Paste
  134. EmptyBuf(GetBufHandle("Clipboard"))
  135. }
  136. // delete all lines in the buffer
  137. macro EmptyBuf(hbuf)
  138. {
  139. lnMax = GetBufLineCount(hbuf)
  140. while (lnMax > 0)
  141. {
  142. DelBufLine(hbuf, 0)
  143. lnMax = lnMax - 1
  144. }
  145. }
  146. // Ask the user for a symbol name, then jump to its declaration
  147. macro JumpAnywhere()
  148. {
  149. symbol = Ask("What declaration would you like to see?")
  150. JumpToSymbolDef(symbol)
  151. }
  152. // list all siblings of a user specified symbol
  153. // A sibling is any other symbol declared in the same file.
  154. macro OutputSiblingSymbols()
  155. {
  156. symbol = Ask("What symbol would you like to list siblings for?")
  157. hbuf = ListAllSiblings(symbol)
  158. SetCurrentBuf(hbuf)
  159. }
  160. // Given a symbol name, open the file its declared in and 
  161. // create a new output buffer listing all of the symbols declared
  162. // in that file.  Returns the new buffer handle.
  163. macro ListAllSiblings(symbol)
  164. {
  165. loc = GetSymbolLocation(symbol)
  166. if (loc == "")
  167. {
  168. msg ("@symbol@ not found.")
  169. stop
  170. }
  171. hbufOutput = NewBuf("Results")
  172. hbuf = OpenBuf(loc.file)
  173. if (hbuf == 0)
  174. {
  175. msg ("Can't open file.")
  176. stop
  177. }
  178. isymMax = GetBufSymCount(hbuf)
  179. isym = 0;
  180. while (isym < isymMax)
  181. {
  182. AppendBufLine(hbufOutput, GetBufSymName(hbuf, isym))
  183. isym = isym + 1
  184. }
  185. CloseBuf(hbuf)
  186. return hbufOutput
  187. }