|
|
1.1 ! root 1: ) Electric C ) - Show matching parens - [if lnowid >= 4] ! 2: ! 3: C. Douglas Blewett (MH3-C-319) Version 4.3 ! 4: ! 5: This file contains assorted macros to make life more livable while ! 6: working with LISP and C. The routines attached to ) and } are a ! 7: little smarter than "balance" about showing matches that are off the ! 8: screen. M-% goes to the matching paren or brace. If the cursor is ! 9: on a "(" the routine will find the corresponding ")" (or "{" and "}"). ! 10: Of course, if the cursor is on a ")" or a "}" the routine will find the ! 11: matching "(" or "{". C mode MUST be turned OFF for this stuff to work. ! 12: ! 13: At Jeff Langer's suggestion "}" also adjusts the indentation to that ! 14: found on the line containing the matching "{". ! 15: ! 16: The routine attached to ^M (carriage return) indents correctly ! 17: (maintains the level of indentation including spaces and tabs) and ! 18: removes unused white space (usually caused by the indenting routine ! 19: itself) on blank lines. ! 20: ! 21: WARNING: this routine uses "comcol" and "lnowid" as global variables for ! 22: storing the current level of indentation and turning these features on ! 23: and off (High Voltage). ! 24: ! 25: Interface routines ! 26: M-% - Moves to corresponding () or {} pair (like vi % command) ! 27: ) - Shows matching "(" (only if it is currently displayed) ! 28: { - Inserts {, a ^M and indents one tab ! 29: } - Shows matching "{" (only if it is currently displayed) ! 30: ^M - Maintains the exact level of indentation and removes ! 31: unused whitespace from interveneing empty lines ! 32: ; - Inserts a ; and does a ^M ! 33: M-^^ - Toggles these features (High Voltage) on and off ! 34: ! 35: ) ! 36: <lnowid ! 37: � <lnowid ! 38: ! 39: |� ! 40: �5~4 ! 41: �� ! 42: �On_screen ! 43: ! 44: � ! 45: � ! 46: ! 47: � Electric C Level - [lnowid >= 4 ^M and ), >= 5 }, >= 6 { and ;] ! 48: <c ! 49: Turn of C mode ! 50: <comcol ! 51: 0 Set indent to zero ! 52: <lnowid ! 53: � <lnowid ! 54: |� ! 55: �~4 ! 56: 4 ! 57: 0<High Voltage Electric C On Low - 4 ! 58: � ! 59: �~5 ! 60: 5 ! 61: 0<High Voltage Electric C On Medium - 5 ! 62: � ! 63: �~6 ! 64: 6 ! 65: 0<High Voltage Electric C On High - 6 ! 66: � ! 67: � ! 68: 3 ! 69: 0<High Voltage Electric C off ! 70: � ! 71: � ! 72: ! 73: ; Electric C ; - New line and indent - [if lnowid >= 6] ! 74: ; ! 75: <lnowid ! 76: � <lnowid ! 77: ! 78: |� ! 79: �5~6 ! 80: ! 81: � ! 82: � ! 83: ! 84: { Electric C { - New line and indent - [if lnowid >= 6] ! 85: { ! 86: <lnowid ! 87: � <lnowid ! 88: ! 89: |� ! 90: �5~6 ! 91: �Indent_get ! 92: & - ! 93: � ! 94: � ! 95: ! 96: } Electric C } - Match Previous, etc. - [if lnowid >= 5] ! 97: } ! 98: <lnowid ! 99: � <lnowid ! 100: ! 101: |� ! 102: �5~5 ! 103: <- ! 104: �� ! 105: �On_screen ! 106: �Indent_get ! 107: 5��Indent_get ! 108: --<}<- ! 109: �3-}� ! 110: � ! 111: � ! 112: ! 113: �On_screen ! 114: |� Test if it is on the screen ! 115: �~3=-1 ! 116: � ! 117: � ! 118: #8�80-- ! 119: 80 ! 120: � Quick Twitch - it is faster than a 1 sec. delay ! 121: � ! 122: ! 123: �Indent_get ! 124: &�1 Copy the indentation ! 125: < ! 126: ^�4~0 ! 127: !� ! 128: � ! 129: + ! 130: � ! 131: � ! 132: + ! 133: � ! 134: �� ! 135: �0 ! 136: � ! 137: � ! 138: � ! 139: ! 140: � Find_Matching parens and braces ! 141: !� What are we matching ! 142: �( ! 143: �1 ! 144: 5�1 ! 145: 6�4 ! 146: <[()] ! 147: � ! 148: �) ! 149: �-1 ! 150: 5�-1 ! 151: 6�-4 ! 152: <[()] ! 153: � ! 154: �{ ! 155: �1 ! 156: 5�1 ! 157: 6�4 ! 158: <[{}] ! 159: � ! 160: �} ! 161: �-1 ! 162: 5�-1 ! 163: 6�-4 ! 164: <[{}] ! 165: � ! 166: �� ! 167: �0 ! 168: ! 169: � ! 170: � ! 171: ^�4~0 Loop until match is found ! 172: |� ! 173: �5 Move off the current item ! 174: 0> Get a copy of the search string ! 175: 6� Search in the correct direction ! 176: !� What we found ! 177: �( ! 178: �11~1 ! 179: � ! 180: �) ! 181: �11~-1 ! 182: � ! 183: �{ ! 184: �11~1 ! 185: � ! 186: �} ! 187: �11~-1 ! 188: � ! 189: �� ! 190: �0 ! 191: � ! 192: � ! 193: � ! 194: � Beginning or end of file ! 195: �0 ! 196: � ! 197: � ! 198: |� Kludge to handle loop bug ! 199: �1~0 ! 200: |� ! 201: �~50 ! 202: 5�0 ! 203: - ! 204: � ! 205: � ! 206: � ! 207: � ! 208: � ! 209: ! 210: Electric C - Maintain the indent - [if lnowid >= 4] ! 211: ! 212: <lnowid ! 213: � <lnowid ! 214: ! 215: |� ! 216: �5~4 ! 217: |� ! 218: � ! 219: �1 ^U is the flag for space or tabs loop ! 220: 6�0 6 is the flag for line containing chars ! 221: � ! 222: � ! 223: �0 ! 224: 6�1 ! 225: � ! 226: � ! 227: 5�0 5 is the flag for space or tabs found ! 228: ^�4~0 Loop while trailing spaces and tabs ! 229: !�11~64 ! 230: �` Space ! 231: 5�1 ! 232: � ! 233: �I Tab ! 234: 5�1 ! 235: � ! 236: �J Line feed ! 237: �0 ! 238: |�Clear line if it has spaces or tabs ! 239: �~51 ! 240: ! 241: � ! 242: � ! 243: � ! 244: �� Real line - leave it alone ! 245: �0 ! 246: 6�1 ! 247: � ! 248: � ! 249: � ! 250: �Indent_get ! 251: &- Install the copied chars. ! 252: 0 ! 253: |� ! 254: �~61 True text line ! 255: � ! 256: �1~3=0 Intervening blank lines ! 257: <comcol ! 258: �1 ! 259: < ! 260: 14~8- ! 261: < ! 262: 15~8- ! 263: � ! 264: � ! 265: <comcol ! 266: 3= Set comcol ! 267: � ! 268: � ! 269: & ! 270: � ! 271: � ! 272:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.