BBEdit 8.7 Release Notes

This page documents all feature enhancements and bug fixes included in the BBEdit 8.7 update.

For information on changes made in previous versions of BBEdit, please see the release notes archive.

For detailed information on using any of BBEdit’s features, please refer to the user manual (choose “User Manual” from BBEdit’s Help menu).

Requirements

BBEdit 8.7 requires Mac OS X 10.4 or later. If you’re still using Mac OS X 10.3.9, BBEdit 8.5.2 is the most recent version you will be able to run.

This version is a Universal application: it runs natively on both Intel-based and PowerPC-based Macs.

Additions

  • Text Factories and multi-file search operations can now use Finder “Smart Folders” as sources of files to search. BBEdit will look in your “Saved Searches” folder (~/Library/Saved Searches/) for eligible smart folders and include any such items in the sources list.
  • There’s a new option in the Application preferences: “Reopen documents that were open at last quit”. If this option is turned on, BBEdit will remember what documents (as well as disk browsers and FTP/SFTP browsers) are open when you choose the “Quit” command, and will reopen those documents the next time you start BBEdit.
  • Disk Browsers get a contextual menu for the file list: if you right-click on items you get commands to open the selection, the same commands as on the “Copy Path” submenu, and, for single selections, a “Go Here in Terminal” command which will open a new Terminal window with the working directory set to the selected folder (or to the parent of the selected file).
  • By default, BBEdit will use the Terminal application supplied with the system, but if you’re using an alternative terminal application such as iTerm, you can specify its bundle identifier and BBEdit will use it, as follows:

defaults write com.barebones.bbedit Misc:TerminalBundleIDOverride “com.apple.Terminal”p. replacing “com.apple.Terminal” with the bundle ID of your preferred terminal app.

  • File Groups have received an internal overhaul, in order to resolve some previously reported bugs and add requested features. You can now create collections of items in the group window; unlike other file group items, a collection does not refer to an item on disk (or a URL), but is strictly an organizational tool.
  • If you add a folder to a file group, it is automatically kept up to date as its contents change (similar to how it’s done in a disk browser window). Since folders are no longer static entities in a file group, the old options dialog for adding a folder’s contents has been removed.
  • Any item may be renamed as desired. Note that renaming affects only the listing in the file group; renaming an item in the file group does not change the name of the item on disk.
  • As a result of the overhaul, the file group document format has changed. If you open a file group document that was created by a previous version of BBEdit, it will be marked “dirty” and written out in the new format when saved. The new format is not compatible with pre-8.7 versions of BBEdit.
  • You can now access the items in a file group document via the scripting interface. Note that BBEdit enforces a strict containment hierarchy: if you ask for…

every item of group document 1p. you will get back every item that’s at the top level of the list. You can recurse to explore the items contained within folders or collections. ( Script Debugger 4.0 has an excellent interface for exploring AppleScript objects in BBEdit and other highly scriptable applications.)

  • File Group windows get a contextual menu for the file list: if you right-click on items you get commands to open the selection, the same commands as on the “Copy Path” submenu, and, for single selections, a “Go Here in Terminal” command which will open a new Terminal window with the working directory set to the selected folder (or to the parent of the selected file).

By default, BBEdit will use the Terminal application supplied with the system, but if you’re using an alternative terminal application such as iTerm, you can specify its bundle identifier and BBEdit will use it, as follows:

defaults write com.barebones.bbedit Misc:TerminalBundleIDOverride “com.apple.Terminal”p. replacing “com.apple.Terminal” with the bundle ID of your preferred terminal app.

  • The “Apply” button in text factory windows is now an icon, and there’s now a “Save” button next to it for quickly saving a factory. When saving a new factory, the save location defaults to the “Text Factories” folder so that the saved factory is immediately available on the Text Factories menu (and the “Apply Text Factory” submenu on the Text menu).
  • There is an all-new Python language module, which fixes an assortment of previously reported bugs and adds an assortment of previously requested features (including text folding). Minimum block size for folding is settable as for other languages:

defaults write com.barebones.bbedit LanguageSpecific:MinimumLinesForBlockFold:Python 4

  • Lua support is now built-in.
  • BBEdit now generates fold ranges for brace blocks in C/C++/ObjC/ObjC++. Folds are subject to a minimum number of lines:

defaults write com.barebones.bbedit LanguageSpecific:MinimumLinesForBlockFold:C++ 4 defaults write com.barebones.bbedit “LanguageSpecific:MinimumLinesForBlockFold:ANSI C” 4 defaults write com.barebones.bbedit LanguageSpecific:MinimumLinesForBlockFold:Objective-C 4 defaults write com.barebones.bbedit LanguageSpecific:MinimumLinesForBlockFold:Objective-C++ 4

  • In C/C++/Obj-C/Obj-C++ block comments occurring in functions (and sub-blocks of the function) and class declarations are now eligible for folding. (Previously only “top-level” block comments were eligible for folding.)
  • Added a “build number” property to the scripting dictionary.
  • Disk browsers now put files and folders in the drag, so you can (for example) drag a file from a disk browser to a file group window to add it, or to an editing window to insert it, or whatever.
  • You can now drag items from FTP browser windows to other locations; for each selected item, its URL is placed in the drag in a form that is (hopefully) usable to other applications.
  • The TeX module now recognizes: align, alignat, falign, gather and multiline as “math environments”, in addition to those it already supported.
  • Added support for JavaScript function declarations which use the form of:

foo = new Function( “function body string” )p. This is an uncommon way of declaring functions, but it’s legal, had been omitted, and was requested.

  • In TeX files, any [optional] or {required} param blocks that span multiple lines get automatic folds if they contain the minimum number of lines as specified by the preference “LanguageSpecific:MinimumLinesForBlockFold:TeX”.
  • In TeX (LaTeX) files, command and environment definitions are now parsed and syntax-colored properly. The affected commands include: \newcommand, \renewcommand, \providecommand, \newenvironment, and \renewenvironment. (Support for \def was added earlier.)

Changes

  • BBEdit no longer natively supports reading PICT files. The QuickTime image translators handle this, and if that doesn’t work out, you can always use Preview.app or Xee.
  • The first-run dialog now has just a single check box for installing the command-line tools: it will install both the edit and the diff tools (bbedit/bbdiff or edit/twdiff as appropriate).
  • The “Install Command Line Tools” button in the Application preferences has been moved to a menu item in the BBEdit menu. It’s more visible there and makes room for a new option in the preferences.
  • File group windows get an iconic toolbar.
  • Updated the toolbar in HTML preview windows. Tooltips, even!
  • Multi-file Find Differences: When “List Identical Files” is turned on, identical files are grayed out in the list; the bullet has been removed from non-identical files to reduce visual clutter.
  • The Find Differences results window gets an updated Reload button and some minor cosmetic adjustments.
  • FTP browsers get the new Reload icon
  • The “Tools” menu is now hidden unless compatible plug-ins are installed. This is a return to older behavior, and obviates the instructional “Why is this menu empty?” command that was previously placed on the Tools menu when no plug-ins were installed.
  • The “Enter Serial Number” command on the application menu is gone, and has been replaced with a “License…” command. This displays your current license information, if a serial number was previously entered; if not it will display the amount of demo time remaining. In this respect it is identical to the behavior of the same command in Yojimbo.
  • The Languages list shows the version numbers of installed language modules (including built-ins and factory modules).
  • Multi-item drags into file group windows are now sorted by name.
  • The “Save Selection” contextual menu item now drops a sheet.

Fixes

  • Long names are now truncated in the search progress window rather than running off the edge of the window.
  • Made a couple of cosmetic fixes to the list used in FTP browsers and dialogs: symlinks now use the composited system alias icon, and there’s a bit more breathing room in the lists at the default spacing.
  • the internals of the “Preview as Text” command have been rewritten, and the output is generally more pleasing and readable.
  • Fixed an off-by-1 bug in the drawing of the navigation bar in disk browsers.
  • Fixed some off-by-1 positioning bugs in the navigation bar and status bar at the bottom of the text view.
  • Fixed a bug where if a codeless language module specified a comment pattern but not a string pattern, comments were colored as strings.
  • Fixed a bug where popping up a navigation bar or status bar item via the keyboard would intermittently pop up the menu in the wrong screen location.
  • Made a change to significantly reduce the transient memory requirements for reading a file during multi-file search and text factory execution.
  • Made a change to reduce transient memory requirements when performing text transformations in a Text Factory.
  • Fixed a bug where the initial properties (i.e. make new <xxx> with properties {bounds:<yyy>}) weren’t honored for FTP browsers and disk browsers.
  • Fixed a bug where text factory files which lacked an HFS type but had a valid extension were not recognized as such when their name was>31 characters long.
  • When activating the Quick Find window, its internal state is now set so that Return or Enter will search for the string already in the window, and typing any other character will clear the string before entering your typed character. (This behavior was already in place for the case in which the Quick Find window had been closed.) In this way, there is no need to explicitly clear the Quick Find window when activating it – just start typing.
  • Made various fixes and improvements to the image viewing window, including better behavior with small images, a reasonable minimum window size, and scroll bars for easier viewing of large images.
  • Adjusted things such that extensions on folder names which are used as items in places such as the Script Menu are no longer stripped from the string used for the menu item text.
  • Script menu items of the form “3. Test” will no longer have the “. Test” trimmed as if it were a filename extension.
  • Changed the text factory/multi-file search engine so as to throttle transient memory usage. This retains some measure of machine-wide performance and usability during processing of very very large (100MB+ files).
  • the factory suffix mapping of “.cgi” to Perl has been removed. If you have existing language settings and this has caused a problem for you, you can remove it by hand in the Language preferences.
  • Fixed bug in which customizations to the language comment strings (used by the Un/Comment command) were lost when moving between machine architectures. Please note that as a result of this fix, you will need to reapply any customizations if you are running on an Intel machine. Sorry for the inconvenience.
  • If you opt out of installing the command-line tools at first run time, the application will no longer prompt you to install them each time you start up. If you subsequently manually install the tools, update checking at app start will resume; also, if you perform an authenticated open or save, the edit tool is mandatory and will be installed at that time.
  • Fixed a bug where “Save Default Window” wasn’t active for web preview windows.
  • Array indicators in method signatures (like “public foo[] bar()”) no longer confuse the function parser.
  • Commas in class signatures no longer confuse the Java function scanner.
  • Tweaked the “Strings” language guesser so that it is much less likely to generate false positives.
  • Fixed hang which would occur when encountering an XML PI in a Markdown document.
  • Markdown module no longer imagines that it sees list items or Setext-style headers in the middle of inline (non-block) html tags, such as* blah.
  • Inline link references in Markdown can now have line breaks (but no blank lines) and nested, matched pairs of square brackets within the link text, and will be syntax colored appropriately.
  • The direct parameter to the find event is now correctly marked required. This fixes the problem where scripting bridge generated the wrong glue code.
  • Fixed headerdoc tag typo which prevented correct parsing of file.
  • Fixed hang which occurred when parsing with headerdoc for @function declaration with no matching macro.
  • Fixed charset issues with headerdoc output.
  • Misc. cleanup to the headerdoc stuff; removed stray<#placeholder#>(s) and fixed entity encoding.
  • The default “From” page range is now {1, 1} when printing. This is consistent with other applications on Mac OS X.
  • Java “type parameters” containing commas, e.g. “new Foo<String, Boolean>”, were not properly parsed.
  • Java array initializers like ‘new String[] {"abc"}’ could break the function popup.
  • Made some performance improvements to the TeX language module.
  • TeX: Starred math environment names are now better supported, and must match. (So, \begin{align*} can only be closed by a matching \end{align*}).
  • Fixed bug in which using “Find All” with multi-file search turned off would always search the entire front window, even if “Search Selection Only” had been turned on.
  • Fixed a bug where most (all?) P4 commands would report “This file doesn’t appear to be under Perforce control”, despite the file being controlled, and the preferences being set correctly.
  • In Java files, ‘new’ followed immediately by a closing parenthesis could cause a hang.
  • Fixed bug in which case-sensitive file systems weren’t taken into account when examining open documents by name.
  • Implemented a workaround for the Learn and Forget buttons being disabled at times in the spelling panel. Bug reported to apple.
  • The TeX scanner has been thoroughly schooled on the concept of ‘interval notation’, e.g. [1,\infinity), in TeX files. It promises not to get it wrong any more. We’ll keep our eyes on it, but it seems to have learned its lesson.
  • When processing a request for a list of open unsaved documents via the LightspeedC external-editor interface, BBEdit omits shell worksheets, file groups, and text factory documents so as to avoid an annoying alert from the host IDE.
  • Corrected the flags passed to Launch Services for a —background launch.
  • Added some more missing PHP keywords
  • In TeX (LaTeX) files, use of the \def macro to create an alias to a math environment would inevitably confuse the syntax coloring. Now you can use \def to do something like this:
  • \def\be{\begin{equation}}
  • … without BBEdit seeing that line as the start of an equation.
  • The tab width used in the “Entab” and “Detab” sheet now defaults to the editing view’s tab width, and never to a stored preference.
  • Fixed bug in which the application would look up the wrong password in the keychain in fairly rare situations (specifically, when you had the same account name on the same server for both FTP and SFTP logins, but different passwords).
  • Fixed bug in which using a scripted multi-file search or Apply Text Factory would fail if the items to search were specified as the result of an object-specifier expression that resolved to a list of items.
  • Fixed bug in which Java class methods with no modifiers (such as some constructors) would sometimes confuse the parser such that the function popup would list the method before the class which contained it.
  • Fixed a bug which could occur if javascript requested that the preview window be closed while a sheet was being displayed on that window.
  • Fixed bug in the Java module’s function scanner related to parsing nested class instance creation expressions such as:

new Foo( new Bar( new Bat() ), baz )p. Such a construction could cause missing folds and an incomplete function popup.

  • Fixed a bug in the Markdown module, wherein em (or em) and strong (or strong) elements, followed by a tab, would cause the rest of the line/paragraph to be treated as a code section.
  • Running scripts from the Script menu is now re-entrant.
  • Fixed bug in which typing certain keyboard equivalents in the file dialog sheets would invoke the corresponding menu command rather than operating as expected in the dialog itself (e.g. Cmd-D for “Desktop”).
  • In SQL (MySQL), backticks can be used to delimit a “quoted identifier”, as per MySQL’s spec. So, any text in backticks will now be colored as a string.
  • If for some reason the subprocess supporting SFTP file transfers exits, you’ll now get notified in any affected FTP Browser window(s), rather than just having SFTP file transfers mysteriously start failing.
  • “Open Counterpart” should be a lot faster now, in cases where a file search is necessary to locate the counterpart file.
  • Fixed an issue whereby the JavaScript function scanner could become confused when encountering backslash-escaped string delimiters within strings.
  • Fixed a longstanding oversight in the About box. :-)