This is a wishlist of what I want in a code editor. I haven't found any single editor that has all these features, but if you know of one, let me know. I'll be happy to try it and see what I think.
- Intelligent (language sensitive) outlining - let me collapse {} in C/C++, parens in lisp, lists, tables and paragraphs in HTML, or whatever constructs are appropriate for the language I happen to be using. For that matter, if I've got crufty old C code, I want to be able to collapse multi-line #defines, too. Most things don't want to be collapsed by default.
- I also want to be able to have version-control log-comments auto-collapsed in all cases when I open the file. That's the one exception I can think of.
- Both monochrome and colored syntax coloring - I've got a C/C++ source->HTML converter that can generate examples for the monochrome coloring, but the basic point is that I want to be able to do syntax coloring on-screen and have some sort of syntax flagging that works well when printing to a monochrome laser-printer.
- Good control over printing (esp. narrow pages) - let me do 'em side by side and save half the paper, for example. Also do things like balance {}s visibly on-paper, and do intelligent page-breaks. It sucks when you print out a file of 15-year old code so you can read it and mark it up away from the computer, only to discover that the 70-line for-loop that you need to be able to see clearly is split across pages 23 and 24, rather than on a single sheet of paper.
- Allow me to specify what type of things I want printed. Perhaps this is tied to the collapse-state of things when I hit the print button.
- Save in a format that's version-control-friendly. My single-biggest gripe (of many) about Metrowerks is that the CodeWarrior project files are version-control-hostile. They've defied all my efforts to find a way to diff them (mostly because the export to XML produces so much output, and ordering is not preserved if you change the file at all).
- Auto-save without me noticing. See also http://mpt.phrasewise.com/stories/storyReader$374 and http://www.livejournal.com/talkread.bml?journal=jwz&itemid=127648. But also allow me to shut it off, since I may be editing a document on my website and don't want the changes public until I hit some magical command.
- Save intermediate versions for a while, too. Maybe a week? I want pretty darned good undo, even across saves. I don't really care where they are or how they're stored, as long as they don't screw up version control or my compiler, and I can easily back up to a previous version.
- Have a format which will interoperate with people using plain-text (which means either plain-text plus resource-fork bits or a bi-directional conversion tool). Storing meta-data in a separate file is acceptable as long as I don't have to see it, and it's robust enough to know when it's out of sync with the file I just checked out from version-control.
- Allow me to use different fonts automagically. If I decide that I want all my code in Geneva 12, except for the comments, which I want in Helvetica-Oblique 10, and toolbox functions in Courier-Bold 11, let me do that.
- point, inch or cm -based tabs. When you use proportional fonts in code, the tabs go fugly in a hurry.
- on the topic of tabs, make the cursor-control smart enough that I don't have to hit the arrow key more than twice to cross any stretch of whitespace. And no, option- or command-arrow combinations as implemented in editors today are not sufficient. vi ALMOST gets this right for leading whitespace, but is no help on interior whitespace.
- Intelligent about templates so I don't have to type the same bits over and over again. Class declarations in C++ aren't that hard to templatize.
- Can auto-correct formatting issues to work with company-defined-standards. Somewhere I've still got the scripts for the Unix indent utility which convert from my preferred format to and from the LaserMaster coding guidelines. Let me specify things that way, and auto-convert when I open/save/checkin/checkout. Stripping trailing whitespace should be a default at all times.
- Let me scroll "past" the end of the document. This is one of the things that was right in MS-Word forever, and which is wrong in almost every other text-editor I've used. When I'm appending to a file, I don't want it to have to scroll every time I add a line. I want to be typing near the top of the window and work down.
- Text-encoding clued. I occassionally deal with source code that has comments in Japanese within it. Don't force me to switch the font to be able to read it - the text-encoding-converter built into the OS has been smart enough to detect most of that sort of thing since 1996 or so. I want be able to go from MacJapanese (Shift-JIS) to JIS, UTF-7, UTF-8, UTF-16 or EUC-JP for the save-format simply. If the actual text will survive the transition, let me convert it to ASCII, MacRoman or ISO 8859-1, too.
- Integrate equally well with CodeWarrior and ProjectBuilder. I'd rather not even notice they're running while I'm editing code.
And while I'm asking for the world, I'd like an installer that doesn't suck, too. I hate having to go back every time I upgrade to:
- copy over my installed scripts.
- increase the application's memory partition (on 9).
- re-install my template files.
- decide whether the application belongs in the "Applications (Mac OS 9)" or "Applications" folder.
- go back and "correct" the installation after the installer guesses wrong.
- figure out which additional bits were installed with the previous version of the app and are no longer needed.
- restart. No application installer should EVER make me restart my computer. I don't care what else "needed" to be installed, I probably don't want it anyhow.