Review: BBEdit 6.0
Developer: Bare Bones Software, Inc.
Price: $119; upgrades $39; academic pricing and cross-upgrades also available.
Requirements: Power Mac with System 7.5.5 or higher. Mac OS 8.1 or higher with Language Kit to work with multi-byte text. Mac OS 8.6 or higher to use HTML Help.
Recommended: Mac OS 9 for working with multi-byte text.
Trial: Fully-featured (25 launches and watermarked printing).
If you’re new to BBEdit, you might want to read ATPM’s reviews of BBEdit 4 and BBEdit 5 to get a sense of why BBEdit has become such a popular product for HTML editing, programming, and general-purpose text editing. This review will focus mainly on what’s new in BBEdit 6.
The Same Yet Different
It’s been about two years since the last major revision of BBEdit, and in that time Bare Bones rewrote much of the product to modernize its internals. Some of the changes are readily apparent: the new innards bring support for AppleScript recordability, and the trademark System 7 look has been replaced by an Appearance Manager-based one. But aside from its new grayscale look, the interface is simply a refined version BBEdit 5’s: there are no radical changes à la Word 6 or AppleWorks 6. Long-time BBEdit users will feel right at home, although I advise them to skim through the manual looking for sections marked “New in 6,” lest they miss out on the more subtle enhancements.
BBEdit now supports multi-byte text in scripts from Japanese to Cyrillic to Ethiopic. (Right-to-left scripts such as Arabic are not supported.) It can open and save files in Unicode using the UTF-16 (big-endian or little-endian) and UTF-8 formats. Multi-byte support is pervasive: it works in BBEdit’s text manipulation dialogs as well as with the HTML tools. Files can contain text in a mix of different scripts, but BBEdit windows are still limited to a single font at a time, so you’ll have to flip back and forth between fonts using the new Font menu.
Mailsmith’s commands for manipulating quoted e-mail text are now built into BBEdit. You can increase or decrease the level of quoting, or remove all the quotes entirely. The Rewrap command reflows quoted text, wrapping all the lines to the same length. It’s like a quote-savvy version of the Hard Wrap command, so it also supports indenting and reverse indenting, optionally relative to the first line. Unlike Mailsmith, BBEdit does not color text to indicate the levels of quoting.
BBEdit now has multiple clipboards, which it preserves across launches. If you only want to use one clipboard, you don’t need to do anything differently. The difference is that when you Cut or Copy, the clipboard’s previous contents are not lost: you can get them back by using the Previous Clipboard command, and you can do this five times. The sixth time you use Previous Clipboard, you end up back at the most recent clipboard. There’s also a Next Clipboard command to cycle in the opposite direction. In other words, BBEdit maintains a ring of six clipboards which you can rotate left or right, much like Switcher (the original way to change between running applications on the Mac) or Emacs’s Kill Ring. I like BBEdit’s “ring” approach to multiple clipboards much better than the “numbered clipboard” approach that Copy Paste and Nisus Writer use, because I find it easier to remember relative positions of items than arbitrary numbers for them. It also seems to be more efficient.
To jog your memory, the Clipboard window now lets you flip through the clipboards, although I wish there were a way to view all six of them at once like with Copy Paste. A cool and surprisingly useful feature is that the Find Differences feature can now compare a document to the clipboard, so you can easily copy text out of a Web browser or Telnet session and compare it to a local copy. I’m a little disappointed that BBEdit doesn’t let me edit the clipboard like Nisus Writer does, but on the whole the new clipboard works quite well.
HTML, XHTML, and WML
BBEdit 6 extends its standards-based HTML tools to support more standards. The markup tools now insert HTML- or XHTML-style tags depending on the doctype of the current document, and the syntax checker recognizes and checks both languages. BBEdit also has some support for WML, the Wireless Markup Language; the syntax checker and Tag Maker support WML, but there are no dialog boxes for editing WML tags (except where they overlap HTML). Unfortunately, BBEdit does not yet support custom Document Type Definitions (DTDs) to allow checking against house styles of HTML or arbitrary XML DTDs.
The HTML Entities palette has been expanded, and the Web Safe Colors palette now supports the VisiBone 2 layout, which I much prefer. The context-sensitive tools for inserting new tags and editing them now work from contextual menus as well as from the menu bar commands (and their associated shortcuts).
As with previous versions, BBEdit 6 can display HTML tags and programming language constructs in different colors from the main text, thus making it easier to interpret such files. BBEdit 6 expands on this coloring: it now has separate (configurable) colors for HTML attribute names, attribute values, and “processing instructions” (embedded languages like ASP). Many users have requested this, but I prefer the BBEdit 5 approach of color-coding whole tags by type, a style that is not possible in version 6.
BBEdit 6 also adds syntax coloring for PHP, a server-side embedded scripting language that has become popular with developers of dynamic Web sites. Unfortunately, there is no support for Python, another scripting language that’s on the rise, or for languages such as Cold Fusion that add custom tags to HTML.
Of course, there are a lot of languages out there, and Bare Bones does not have the resources to support all of them. The answer seems to be customization at the user level. Many users had hoped for a feature that let them add custom tags or language keywords for BBEdit to color, but Bare Bones chose a more ambitious approach: language modules. With a forthcoming software development kit, C-programming end users will be able to write their own language modules that tailor syntax coloring and the function-popup to their needs.
On the plus side, this feature will allow users to write modules for radically different languages from Python to Scheme to Unix shell, or even to replace one of the built-in language modules. The downside is that such customization is inaccessible to those without sufficient programming skills and time. Such users might have been better served by a less sophisticated user interface-based form of customization. Also, it’s not clear whether user-written language modules for HTML-like languages will be able to leverage BBEdit’s existing HTML scanner and tools, or whether they’ll need to start from scratch. That aside, however, it’s always great to see Bare Bones add extensibility to the product. The normal “Tool” plug-ins have been a success, and I’m optimistic that language modules will be too.
There are also changes to support for non-HTML languages. The Balance command, which finds matching pairs of parentheses and brackets, is now aware of comments and strings. The function popup now indicates the current function in bold, in addition to putting a bullet next to it. Perl syntax coloring works better now, faithfully coloring here-doc comments, although it still gets confused by function definitions inside string literals. Java support is still lacking: the current function display at the bottom of the window now correctly shows which class the insertion point is inside of, but it does not show the current function, and the function popup is still oblivious to inner class methods. TeX/LaTeX support has changed: inline math formulas are no longer colored differently from the main text. Tcl support was inadvertently left out of BBEdit 6, but it will return in the next maintenance release.
BBEdit has always long been one of the most scriptable Mac applications, and with 6.0 it is even better. The recordability, which I mentioned above, is great both as a time-saver and as an interactive tool for learning BBEdit’s scripting syntax. The scripting dictionary has changed somewhat to better conform to the object model. As such, old scripts will need to be updated to work with BBEdit 6, but new ones are more intuitive to write.
BBEdit 5 had a menu and a palette for collecting AppleScripts, and it let you assign them keyboard shortcuts. BBEdit 6 creates submenus out of the folders in the Scripts folder, just like the Apple menu and the Apple Menu Items folder. You can manually adjust the order of items in the menu by prefixing their names with numbers followed by a close paren, e.g. “00)My Script,” which BBEdit does not display. (This is the same syntax that OtherMenu uses, and it also works elsewhere in BBEdit.)
Coolest of all, BBEdit lets you use AppleScripts to change or replace its built-in menu commands. You name your script after the menu item and place it in BBEdit’s Menu Scripts folder. Your script can contain two handlers: MenuSelect and PostMenuSelect. When you select the overridden menu command, BBEdit runs the MenuSelect handler. Then, depending on what MenuSelect returns, BBEdit either stops or invokes the normal menu command, followed by the PostMenuSelect handler. As an example, you could override the Open From FTP Server command to switch to Interarchy instead of using BBEdit’s FTP client, or you could change the Open and Save commands to Entab files when you open them and Detab them when you close them. The possibilities are awesome.
Previous versions of BBEdit could open PICT files. Now, BBEdit 6 supports QuickTime translation. Hate the brushed metal QuickTime player? Then play your movies in BBEdit, which opens them in normal windows that can be windowshaded. More useful, though, is that BBEdit can open any kind of image that QuickTime understands. This means that you can view GIFs and JPEGs in BBEdit as you create a Web page. If you drag an image’s title-bar proxy icon into an editing window, BBEdit prompts you with options for an HTML image tag.
The built-in FTP client is still present, but it now uses the Mac OS 9 Keychain to store passwords securely. BBEdit now supports Navigation Services dialog boxes for opening and saving files, so you can view large file listings and have access to your Favorites folder and recent documents.
Not to be confused with those features of Navigation Services, BBEdit has expanded its support for recent items and favorites. The Open Recent submenu can now display the full path to each file (useful when you have several files with the same name). BBEdit displays 12 recent items, and at the bottom of the menu it shows favorites. To make a recent item into a favorite, you find and lock the alias to it that’s stored in BBEdit’s Recent Files & Favorites folder.
Finally, BBEdit now has a folder for storing stationery; you can create new documents from stationery pads using a menu command or the new Stationery List palette.
The Glossary holds frequently used text snippets (stored in BBEdit files—what else?) that you can access from a floating palette or by custom keyboard shortcuts. BBEdit 6 adds support for sets of glossary items.
A Universal Items set is always active, but other sets become active or inactive depending on the type of document you are editing. Each set of glossary items is stored in a folder, and the suffix of the folder name determines the language BBEdit maps to the set. For instance, if you have a glossary set whose name ends with “.html” and you’re editing a file whose name ends with “.html,” then BBEdit will show that set for that file. But it’s smarter than that: if you’re editing a file whose name ends with “.shtml” or “.htm” BBEdit knows that you’re editing HTML and shows the same “.html” glossary, so you don’t need to maintain multiple glossary sets for each filename suffix. Of course, if you wanted to have a separate glossary for “.shtml” files, BBEdit would do the right thing.
I prefer keyboard shortcuts to the Glossary palette, and sets help here, too: glossary items in different sets can share the same keyboard shortcut, making it much harder to run out of easy-to-type shortcuts and easy-to-remember mnemonics.
The final area where the glossary has improved is Cookies. Cookies are special keywords that BBEdit expands when inserting a glossary entry into a file. For instance, the #file# cookie inserts the name of the current file, and the #select# cookie inserts the text that was selected in the document. BBEdit 6 adds support for several new cookies. #indent# indents the expanded glossary item to match the text into which it was inserted, #function# inserts the name of the current function, and #selstart# and #selend# let you control which text will be selected after the glossary item has been inserted.
The #insertion# cookie works the same as before, letting you control the location of the insertion point. Now, however, you can use it more than once in the same glossary entry. After you insert the glossary entry, the insertion point is placed at the first occurrence of #insertion#. BBEdit expands each other occurrence of #insertion# to the #•# placeholder, and you can use the new Go To Next/Previous Placeholder commands to jump from one #•# to another. This makes it easy to use template-like glossary entries with multiple parts that need to be filled in.
Find and Replace
BBEdit’s Find and Replace feature is stronger than ever. It now remembers recently used search and replace strings and includes buttons for inserting the document’s selection into the find dialog. The dialog itself still isn’t resizable, but the fields for the search and replace strings now support scrolling and can accommodate as much text as memory allows. (The old limit was about 4000 characters, which didn’t affect me often but was annoying when it did.)
You can now specify non-printable search and replace strings using hexadecimal escapes. The regular expression (“grep”) engine borrows more features from Perl and now lets you transform the case of the found text before replacing. It still does not support non-greedy quantifiers (“minimal matches”) however.
Version 6 also extends the multi-file search and replace. As before, you can search through open windows, file groups, and folders; but whereas version 5 provided some basic commands for pruning files based on name, type, or label, version 6 lets you select the files to search using Scripts and Filters. Scripts are simply AppleScripts that contain a MultiFileSearch handler that returns a list of files. The script can do whatever it wants to produce this list of files; it could even pull the files down from an FTP server so they could be searched locally.
File Filters let you specify lists of criteria connected by AND or OR. The options are similar to those of Sherlock’s custom option, with a few enhancements such as filename wildcards (globs), grep, and access to BBEdit’s language mappings. In practice, I’ve never needed more multi-file search options than BBEdit 5 provided, but Filters are still an improvement because I can easily save and switch between them. My one complaint about BBEdit’s multi-file searching is that it is still application-modal: you can’t do anything else in BBEdit while a search is in progress.
File Groups let you collect groups of related files into a single listing so that you can have quick access to them. In BBEdit 6, groups can now contain folders as well as files, and the folders can be expanded or collapsed, just like in the Finder. Expanding a folder shows the files that were in the folder when it was added to the group; double-clicking a folder opens it in the Finder. Being able to put folders in groups is a very welcome improvement, but unfortunately other aspects of groups do not work as well as before. Drag and drop out of group windows now only works within BBEdit (this may be a bug), and group windows take up more screen space than before. It is not possible to sort a group’s contents (in BBEdit 5, they auto-sorted), and group windows no longer show the Projector status of their files.
BBEdit’s browsers show a list of files at the top and a read-only view of the selected file at the bottom. Disk Browsers let you browse files and folders on your disks, while Error Browsers list errors from BBEdit’s HTML syntax checker or CodeWarrior. When you select an error, BBEdit displays and selects the corresponding section of the file in the view below. In BBEdit 6, error browsers can be hierarchical: multiple errors from the same file can be collapsed to the file name. Three new checkboxes at the top of an error browser let you filter out different classes of errors. Finally, you can now collapse browser windows so that the preview at the bottom is completely hidden.
Support and Manual
No review of BBEdit would be complete without mentioning the manner in which Bare Bones Software supports it. Technical support is free, helpful, and timely. The printed user manual (a rarity these days), is well written and comprehensive. It’s also available in PDF format and searchable Apple Help (HTML) format for quick reference. BBEdit 6 does not yet support Carbon, but a version that does will be a free upgrade.
Software that survives until version 5 usually gains a substantial following, yet the track record for version 6 releases is spotty at best. Word 5 was great, but Microsoft dropped the ball with Word 6 and has yet to fully recover it. AppleWorks 5 was widely considered to be nearly perfect, but AppleWorks 6 is a regression. BBEdit 6 bucks the trend: it is an unequivocal upgrade that’s every bit as stable and fast as version 5.
Although BBEdit 6 contains a few of the minor bugs that we’ve come to expect from major new releases, I believe that it is compelling enough to upgrade to now. Multi-byte text and the improved glossary are probably the stand-out new features, but nearly every part of the program has been tweaked and polished. The charm of BBEdit has always been its attention to the little details that matter so much, and BBEdit 6 does not disappoint. It is an upgrade worthy of its predecessor.