p(title). BBEdit 9.0 Release Notes

This page documents all feature enhancements and visible changes included in the BBEdit 9.0 release.

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

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

h3. Requirements

BBEdit 9.0 requires Mac OS X 10.4 or later.

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

Additions

  • The text views in browsing windows (disk browsers, search results, P4 opened, and similar) are now editable; rather than having to open a file into a new window from such a browser, you can just edit it right in the window.

  • There is a new command on the Window menu: Show Scratchpad

    The Scratchpad window's purpose is to be a space where you can manipulate text by performing transforms, manual edits, or batches of copy/paste.

    It is ideal for quickly beating text from one source into submission before pasting it elsewhere.

    The Scratchpad window automatically saves its content and state, eliminating those pesky "Save Untitled 237?" warnings when closing a window, or quitting BBEdit.

    The Scratchpad is also available from BBEdit's dock menu.

    Finally, there is a new item on BBEdit's Services menu: Append Selection to Scratchpad. This command will take the selected text, and place it at the end of the scratchpad, attempting to preserve any selection that was previously present. The Scratchpad window does NOT need to be open to use this command. Any text appended in this fashion will be present the next time the window is opened.

  • Added a missing Migration command (change column) to the clipping set for Ruby/Rails.

  • Added "Save as Styled Text" to the File menu, and "Copy as Styled Text" to the Edit menu. These function similarly to their HTML analogs, but the Save variant saves an RTF file, and the Copy variant copies styled text (which is more easily shared with other applications).

  • Added "Multi-File Search" command to the Find menu. This unconditionally opens the Find dialog with the "Multi-File Search" option turned on.

  • There is a new command on the File menu: "Reload from Disk". This command will examine the file on disk, and if it's different, reload the front document's contents from the file on disk. This is useful in situations where the file may have changed without BBEdit noticing, which will be the case if "Automatically refresh documents" is turned off in the Application preferences, or in the case of a document on a shared disk that gets modified by another workstation.

  • When running on Mac OS X 10.5 or later, the "Colors" command is available on the Windows -> Palettes menu. This command shows and hides the system color panel.

  • There's a new option in the "Insert Folder Listing" dialog: "Show invisible items". If turned on, the generated listing will include invisible files/folders and the contents of packages.

  • There's a new group of sources in the Find dialog's source list: "Xcode Projects". This group shows the projects in Xcode's Recent Projects menu; selecting one (or more) will instruct the multi-file search to search each text file in the project.

  • Find Differences now uses the system @diff@ tool for generating the difference ranges displayed in the application. This should result in more usable results.

  • RCS keywords are canonicalized down to their unexpanded state for comparison.

    e.g. $Author: Jim Correia$ -> $Author$

    This means that "ignore RCS keywords" isn't literal, but it does what you'd expect.

    • changes in RCS keyword expansion state are not diff significant
    • adding new RCS keywords to a file/line is diff significant
    • any other changes on a line with RCS keywords is diff significant
  • Stuff copied to the clipboard carries a source language hint. Pasting into a document whose source language is unknown will cause the document to inherit the clipboard's hint.

  • Dragging text into an empty document from another editing view will now pick up the source language from the originating view.

  • The C/C++/Obj-C/Obj-C++ scanner now generates fold ranges for multi-line parenthesis blocks (including argument lists), subject to the MinimumLinesForBlockFold preference.

  • "New (with selection)" and "New (with clipboard)" now create the new document using the language of the selection or clipboard (respectively).

  • The Navigation bar has a document/state dirty indicator, so those inclined to disable the toolbar and ignore the close box indication have some way to see if a document is dirty or not.

  • The Ruby language support has been rewritten, with improvements as follows:

    • greatly improved function, class, and module detection.

    • more extensive support for text folding.

    • Better handles interpretive strings. The following:

      puts "d#{"rie"}w".reverse

      ... should show only "d#{"rie"}w" colored as a string when in a Ruby file (new module).

    • Better handles the optional then at the end of if or elsif statement.

  • Significant update to the JavaScript module. Better support for Prototype-style object definitions, more consistent throughout.

  • BBEdit's support for ctags files has been improved:

    • relative paths in tags files are now interpreted (relative to the tags file's location); there is no more need to go through all kinds of gyrations to generate absolute paths in tags files, just so that BBEdit can locate the symbol definition.

    • BBEdit now supports old-format tags files which contain a vi search string but no line number information.

    • When loading symbols for ctags syntax coloring, BBEdit will look for files named "tags" in each folder in the chain from the current document's folder up to the root of the file system. This improves symbol lookups for projects that aren't structured exactly like ours. :-)

  • If you have a .Mac/MobileMe account, you can use it to keep your Application Support folder synchronized across machines. The preference to control sync frequency is located in the "Application" preference pane.

    There are no controls to force syncing, or provide any sort of user control over what does or does not sync. Just be patient, and don't try to rush the sync engine. :-)

  • Added ObjectiveC 2.0 keywords to the Obj-C and Obj-C++ language modules.

  • Documents as a scriptable element of text window can now be accessed by name and unique ID. (Previously, only indexed access was supported.)

  • "Open Counterpart" can now be used for files which will be implictly created at save; for example, bbedit foo.h followed by an Open Counterpart command will open foo.cp if it can be found using the standard rules.

  • BBEdit can now detect versions of Application Support/BBEdit that were created by previous versions. If the folders have not been changed (NOS, for "New Old Stock"), they will be silently upgraded to the current version.

    When a NOS support folder is detected, it is backed up to ~/Application Support/BBEdit Backups, then replaced with the latest contents.

    If a NOS Glossary folder is detected, it is backed up, removed, then replaced with the latest Clippings folder.

  • There's a new preference in Text Status Display: "Document statistics". When turned on, this will add an item to the window status bar, showing the number of characters, words, and lines in the document. There's also a document-icon indicator; when it's uncolored the stats represent the entire document; when it's colored the stats represent the selection range. (Click on the item to toggle between the modes.)

  • BBEdit now includes a set of clippings for quickly inserting and completing PHP functions. Thanks to Ted Stresen-Reuter for his generous contribution.

  • You can now double-click on a string delimiter to select the contents of a quoted string, in files with syntax coloring turned on. The selection range honors the "Include delimiter characters when balancing" setting in the Editing: General prefs. You can also double-click on an element's angle bracket in HTML/XML documents to select the contents of the element.

  • BBEdit can now transparently read and write text files compressed with bz2 (e.g. rolled system logs in 10.5) as easily as it reads and writes regular text documents (and, as a reminder, gzipped text files). For bonus points, try opening and changing a binary plist compressed with bz2. :-)

  • When "Make backup before saving" is turned on in the Text Files prefs, and you close a document with unsaved changes and elect to discard those changes ("Don't Save"), BBEdit will save a snapshot of the document's contents. Just in case. The snapshot will be written into the same directory as the document, and its name will follow the Emacs convention "#foo.txt#". If "Preserve file name extension" is turned on, the snapshot's name will be "#foo#.txt".

  • You can now use an Emacs variable to control whether or not a given file is backed up. There are two ways to do this:

    • Absolute: If the variable line/block contains a "make-backup-files" variable, that variable's value will override the global "Make Backup before saving" preference.

      -*- make-backup-files: 1 -*- --> always back up this file -*- make-backup-files: 0 -*- --> never back up this file

      If the first letter of the variable's value is "y", "t", or "1", the value is "yes", otherwise it's "no". These are all synonymous:

      make-backup-files: yes
      make-backup-files: y
      make-backup-files: true
      make-backup-files: t
      make-backup-files: 1
      
    • Inhibit: If the variable's line/block contains a "backup-inhibited" variable, and its value is true (see above), then the file will never be backed up, even if "Make backup before saving" is turned on in the global preferences.

      It really only makes sense to specify "backup-inhibited: 1", since otherwise the file would be backed up if the global pref is on, and not otherwise.

  • If a symbol lookup in a Python file fails, and it appears to be a method of a class, we'll try to look up the class.method as well.

  • Projects.

    A project is the modern expression of the old "File Group" feature, but much more useful, chiefly because project windows now include an editing view: click on a file in the list on the left, and it appears for editing in the pane on the right.

    To create a new project, choose File -> New -> Project... You will need to decide where to place your project on disk; thereafter, the project document will autosave as necessary.

    In the project window, you can hide the top toolbar as desired. If the toolbar is hidden, the action buttons in the lower left corner of the file list remain useful for manipulating the project's members.

  • BBEdit now handles the (badly chosen, since it omits the "x-" prefix) "txmt:" URL scheme. This allows properly formed "txmt:" URLs generated by the Ruby On Rails "FootNotes" plug-in (and some others) to open files in BBEdit and (optionally) select a requested line and column. (NB: If the system doesn't correctly recognize BBEdit as an allowable handler for such URLs, RCDefaultApp is a good tool for adjusting the bindings.)

  • There is now a "Close All" dynamic menu item on the action menu in the documents drawer. This is particularly useful for closing all the documents associated with a project window without closing the project itself.

    Also, option-clicking on a close widget in the documents drawer will close all the text documents in that window. (MDI text windows will also close as a side effect, but project windows will remain open.)

  • The Application menu sports a new item: Provide BBEdit Feedback. This command will bring up the tech support contact form on our website.

  • Selected items in project lists and disk browser lists are now exported to contextual menu plug-ins.

  • Added "Collapse Enclosing Fold" to the View menu; this command will collapse the auto-generated fold that most closely surrounds the current insertion point (or start of the selection range).

  • Changes to split views in results and disk browsers:

    There is a new command on the view menu "Show/Hide Editor" which can be used to toggle the embedded editor visibility in disk browsers and results browsers.

    The toggle editor button in the action bar at the bottom of the file list can also be used for this purpose.

    When hiding the embedded editor, the associated document will be removed from the window (and closed, after prompting you, if it was not open elsewhere.) Because of this potential need for user interaction, you cannot collape the editing view entirely by dragging the view splitter; you must use the button, menu command (or in the case of results browsers, a double click on the view splitter.)

  • Added a "Delete" command to the contextual menu and action menu in disk browsers.

  • Search Sources can be enabled/disabled via the Text Search preference pane.

  • Option-clicking the close widget in the windows palette will close all windows. (This matches the same conceptual change made to the documents drawer list, as well as the standard behavior for option-clicking the close widget in the titlebar of windows.)

  • Added rudimentary support for define_method to the Ruby module. Methods defined with it should be listed in the function popup. Yay, metaprogramming.

  • "Open Counterpart" will ask Xcode for the file's counterparts when possible.

  • The items in the "Saved Search Sets" source group (for multi-file searches) now have an "X" widget; clicking the X deletes the search set (after confirmation).

  • Items in the "Recent Folders" group in the multi-file search sources list now have an "X" widget; clicking the X will delete the recent item from the list (without disturbing the folder that it refers to).

  • Disk browsers get "New Text Document" and "New Folder" commands on the action and contextual menus. They work pretty much as one would expect.

  • Script tags in HTML files which DO NOT have a src attribute are now listed in the function popup (those with src are already listed in the "includes" popup). This is similar to the STYLE entry for stylesheets: functions and objects added to the function popup as a result of the script tag are indented beneath the script tag's entry, to suggest containment.

  • New Find windows!

    There are new Find and Multi-file Search windows; where they overlap, they provide a consistent and modeless interface to BBEdit's legendary text search and replace capabilities.

    If you're familiar with the old Find dialog, you'll generally feel at home, but there are some important differences and additions of which you should be aware:

    • The Find dialog has been split in two, with one window for searching only the front document, and one window for searching more than one document (including folders, arbitrary open documents, BBEdit and Xcode projects, and so forth).

    • The (fairly confusing) collection of options to configure which text actually gets searched (for single-file searches) has been condensed down to a single pair of "Search in:" options: "Selected text only" and "Wrap around".

      "Selected text only" affects only the "Find All" and "Replace All" operations: if there is a selection range in the front document, this option will search only the selection range if turned on, or the entire document (starting from the top) if turned off.

      "Wrap around" affects only the "Next", "Previous", "Replace", and "Replace & Find" operations: if the search reaches the end of the document (or the beginning, if doing a "Previous"), then "Wrap around" will continue the search from the appropriate end of the document.

    • Keyboard navigation is radically different (as it must be, given the new windows' modeless nature).

      • Return or Enter in the "Find" field will do a "Next" in the single-Find window, or a "Find All" in the Multi-File Search window.

      • Striking the Escape key (not too hard!) will close the window.

      • The appropriate commands on the Search menu (Find Next, Find Previous, Replace, Replace All, Replace & Find Again, and a new "Find All") will trigger the corresponding action in the front Find window.

      • It's not possible to use the command-key equivalents from the old modal Find dialog for toggling items in the Find window, because those equivalents collide with factory keyboard equivalents (or system standards) for different menu commands. So there's a new group of keyboard equivalents for controlling Find and Multi-File Search window items. These keys can be set in Preferences -> Menus -> Find Windows.

        The factory defaults for these keys are as follows:

        Case sensitive Control-shift-N
        Entire word Control-Shift-E
        Grep Control-Shift-G
        Selected text only Control-Shift-S
        Wrap around Control-Shift-W
        Open search history Control-Shift-H(new)
        Open saved patterns Control-Shift-P(new)
        If you are in the habit of assigning keyboard equivalents to saved clippings, it's possible that these defaults may overlap with your clippings. If so, you can of course change the commands from the factory defaults.

    • In the Multi-file Search window, you can use the keyboard when the search sources list has focus, as follows:

      • Return/Enter starts the search;

      • Escape dismisses the window;

      • Type-to-select works in the list (when it has focus);

      • Space toggles the selected items;

      • Delete removes the selected items from the list (after confirmation, and only if they're eligible as indicated by the "X" widget).

    If you find yourself more comfortable with the old interface, you can continue to use it by turning on "Use modal Find dialog" in Preferences -> Text Search.

  • Search and replace history is now persistent across runs of the application.

  • Image windows update their content when the backing file changes, making things like developing POVRay scripts a little bit easier.

  • Changes to the project list user interaction model.

    • Removed the anachronistic behavior where holding down option while opening project items opened them using their LS/Finder bindings.

    • Double clicking on a folder no longer opens a disk browser. Instead, it toggles the expansion state of that node.

    When the editor is hidden, the projects list works as it did in previous releases. That is

    • it accepts keyboard focus
    • return and double-click open the selected items

    When the project editor is visible, the project list can either work the same was as it does when the editor is hidden, or it can work in "single-click" mode.

    There are two additional secret preferences which control this behavior.

    Projects:ProjectsListCanAcquireKeyboardFocus -> BOOL -> NO Projects:OpenItemsOnSingleClick -> BOOL -> YES

    Having the list not accept keyboard focus, among other things, avoids "dancing focus" when opening items via single click.

    When the single click setting is set, most single clicks will open the associated document in the attached editor, and put keyboard focus in the editing view.

    Certain single clicks don't result in an open action. (I'm specifically not listing them all here, but the behavior has been carefully designed so that it will feel right in usage. Examples include clicks which would require we spawn a window, clicks which extend the selection, etc.)

  • Added a "Reveal in Finder" command to disk browser and project windows.

  • For compatibility with scripts written for pre-9.0 versions of BBEdit, the scripting interface now performs the following name mapping when changing the "text encoding" property of a document:

    • "Unicode™ (UTF-8)" = "Unicode (UTF-8)"
    • "Unicode™ (UTF-8, no BOM)" = "Unicode (UTF-8, no BOM)"
    • "Unicode™ (UTF-16)" = "Unicode (UTF-16)"
    • "Unicode™ (UTF-16, no BOM)" = "Unicode (UTF-16, no BOM)"
    • "Unicode™ (UTF-16 Little-Endian)" = "Unicode (UTF-16 Little-Endian)"
    • "Unicode™ (UTF-16 Little-Endian, no BOM)" = "Unicode (UTF-16 Little-Endian, no BOM)"

    Note that this transformation does not operate in the reverse direction; if you get the text encoding property and explicitly compare the name, you will need to update your script.

  • Integrated Jim's .ini language module.

  • C-language files (and all related languages, like Obj-C, C++ and header files) will now show FIXME and TODO items in the function popup. Only "//" comments are searched, and the comment must start with one of the following: "FIXME:" "FIXME!" "FIX-ME:" "FIX-ME!" "TODO:" "TODO!" "TO-DO:" or "TO-DO!". The text added to the function popup starts with the first character of the FIXME or TODO and ends with the last non-white character on the same line.

    Examples:

    • // FIXME This little bug could erase the intertubes.

    • // TODO! Add support for Apple's "Crash Only When Convenient"

  • The command formerly known as "Open in Separate Window" is now called "Move to New Window". It will move the current document (or selected documents when invoked from the documents drawer) into a new editing window (removing them from their current editing window.)

    There is an additional command "Open in Additional Window" which will open the current document (or selected documents when invoked from the documents drawer) in an additional window that can be edited side by side with the original document.

    Both commands are only available for text documents.

  • Ponies.

  • Attempting to bring up a contextual menu in the "dead" space at the bottom of a disk browser list now works, presenting you with "globally" available commands New Folder and New Text Document.

  • The application automatically saves its state (open documents and windows) once per minute, so if something bad happens to your machine, there's a pretty good chance that the next time you start up, things will be as they were when the event occurred.

  • Python function decorator names are now detected and colored.

  • You can drag stuff to the sources list for Text Factory configuration

  • The Text Factory sources list remembers selected items and twist state between invocations.

  • Text completion!

    BBEdit can now figure out completions for symbols as you're editing. The preference for controlling when this happens is in the "Editing: General" preferences:

    • After a delay in typing

      If you pause briefly while typing, BBEdit will figure out the completions for what you just typed, and display them.

      The delay can be adjusted from the command line if desired:

      defaults write com.barebones.bbedit Editor:AutoCompleteDelay -float 0.5 # sets the auto-complete delay to half a second

    • Only manually

      Completion will only take place when using a manual completion command (see below).

    Automatic completion can be turned on and off on a per-language basis (in the Languages preferences) if desired. It is off by default for the "Log File" and "Data File" languages.

    Completions can be derived from a variety of sources, including (in no particular order and without limitation):

    • clippings (both language-specific and universal);

    • ctags symbols computed by running the current document through 'ctags';

    • ctags symbols found in 'tags' files in the current document's hierarchy;

    • predefined names for the source code language at the point of completion;

    • language-specific completions;

    • completions provided by the system spelling system.

    Completion may be triggered at any time (whether or not automatic completion is enabled) by using the "Complete" menu command on the Edit menu. By default, F5 is assigned to this command; you can change this equivalent (as usual) by using the Menus preferences.

    Note: Text completion completes clippings in the same way that the "Insert Clipping" command used to (and still does). So, the behavior of F5 should be indistinguishable if you were used to using it to complete clippings.

    You can also use the Escape ("Esc") key to invoke text completion. This is off by default, and may be turned on using the command line, as follows:

    # allow the Escape key to invoke the "Complete" command defaults write com.barebones.bbedit Editor:UseEscapeKeyAsCompletionTrigger -bool YES

    Note: Because the Escape key has a special meaning when "Use Emacs key bindings" is turned on (Editing: Keyboard preferences), if you choose to use the Escape key as a completion trigger, you will have to press it twice to invoke completion in this case.

  • The tab key can now be overloaded to perform certain actions in addition to the traditional "insert a tab" (or the equivalent amount of spaces).

    When these actions are enabled, holding down the option key while pressing the tab key will bypass the special actions and insert a tab character.

    In all cases, if the special action is not appropriate in the current context, pressing the tab key will result in the default behavior (insert tab character).

    • The first of these new actions is "go to next placholder." (Hold down the Shift key to reverse the direction.) This is equivalent to the command on the Search menu. To control this behavior, use the "Use Tab key to navigate Placeholders" preference (Editing: Keyboard).

    • For refugees from Windows who are used to having Tab indent a line (or selected range of lines), there's a new preference in Editing: Keyboard: "Allow Tab key to indent text blocks." When turned on, this setting allows Tab to function as a synonym for Shift Right on the Edit menu (and Shift-Tab as a synonym for Shift Left).

  • There's a new color setting in the Text Colors preferences: "Predefined names". This symbol class is used for words which are not language keywords, but which are predefined by the language's reference implementation and/or are part of the language's standard library/framework support and/or have other "special" meaning to developers writing code in that language.

    The color may be changed on a per-language basis in the Languages preferences: double-click on the language's name in the list and examine the Colors tab in the resulting sheet.

  • Language module developers may use the following constructs to support predefined names:

    • If a BBLMPredefinedNameList key appears in the module's property list, it is an array of strings, each of which is a predefined name. (This key is mutually exclusive with BBLMPredefinedNameFileName; you may use one or the other but not both.)

    • If a BBLMPredefinedNameFileName key appears in the module's property list, it is a string which names a text file in the module's Resources bundle directory; the file contains one predefined name per line. (This key is mutually exclusive with BBLMPredefinedNameList; you may use one or the other but not both.)

    • If BBLMSupportsPredefinedNameLookups appears in the module's property list and is TRUE, BBEdit may call the module with the kBBLMMatchPredefinedNameMessage. The parameters for this message are the same as for kBBLMMatchKeywordWithCFStringMessage.

  • In the Languages prefs, the options sheet for Python now has a tab for Python-specific options, in which you can choose the color to use for decorators.

  • Reworked the existing entries in the CSS clipping set to use the placeholder mechanism.

    Added a couple of new useful entries to the CSS clipping set for @media, @import and rule sets.

  • Added .php5 to the factory default list of language mappings.

  • Clipping set auto-switching is now more context sensitive. The active clipping set will be picked based on the language of the insertion point. This is a significant improvement particularly when working with languages embedded in HTML. (CSS, JavaScript, Ruby, PHP, etc.)

  • The list of clippings generated for text completion or Insert Clipping is always language sensitive. Clippings will be picked from

    • all appropriate sets for the current language
    • additional sets appropriate for that language (e.g. HTML for Ruby in HTML or JSP)
    • possibly the active set (see below)
    • the universal set

    This makes it much more likely that you'll end up with a useful clipping in the completion set.

    The active set is always included for "Insert Clipping". It is only included in completion set if it is appropriate for the current language, or was a manual pick for the target document. (This avoids having PHP clippings appear in a Python file, for example, because you don't have a Python clipping set and the PHP set was the last one used.)

  • You can now review and apply sub-line differences individually in the results of Find Differences.

    Yeah, you heard that right.

  • New command on the Search menu: "Replace to End". This command provides the pre-9.0 behavior for anyone who needs it: everything is processed from the current insertion point or start of the selection range to the end of the document.

  • When setting up the default browser list for HTML previews, we now recognize application stubs created by VMWare 2.0's "Unity" feature, so that you can preview your documents in FireFox or Windows IE while running in VMWare 2.0.

    If you have an existing browser list, you can as always add these applications to the list in the "HTML Preview" preferences, either manually or by using the "Find All" button.

  • Added a new clippings placeholder: #selectionorplaceholder placeholder_name#.

    If the document has a selection when the clipping is inserted, the placeholder will be replaced with the selected text. If there is no selection, a placeholder named "placeholder_name" will be inserted into the document.

    This placeholder is particularly useful when building "dual-mode" clippings - that is clippings that are designed to be inserted via traditional means (the clippings palette, keybindings) or via the completion mechanism.

Changes

  • Fixed misleading wording in the alert for running #! scripts with non-Unix line breaks.

  • New and improved software update checker, the same as the one used in Yojimbo 1.5.

  • When a browser has nothing selected, or has a deleted file selected (like in a P4 window), the combined text view is replaced with a status view, telling you so.

  • The mechanics that BBEdit uses to determine whether a file was changed on disk have been completely rewritten. Consequently, the group of "Verify open files after:" preferences (see Application prefs) has been replaced by a single setting: "Automatically refresh documents as they change on disk." If you wish, you may turn this off and reload a document manually at any time by choosing the "Reload from Disk" command on the File menu.

  • Document drawer side bias is no loner controllable from the prefs UI.

  • Expunged references to the "Open Here in Terminal" bundle override, since that feature is no longer supported.

  • Tightened up the layout of the disk browser window and dropped the focus ring around the file list.

  • The "Save As" and "Save a Copy" dialogs now run as sheets, as does the dialog for the "Save Selection" contextual menu item.

  • "Save As" for Find Differences results windows has been changed to "Export" for consistency with results browser windows.

  • The "Save As Selection" command has been consigned to the dustbin of history.

  • Support for the CodeWarrior IDE has been removed. If you are still using BBEdit as an external editor for CodeWarrior, you can run 8.7.2 alongside 9.0.

  • In a results browser, the Save command (or apple event) now works on the viewed document. The Export event or command can be used to write out a text file containing the results entries. (This was previously accomplished via the Save As command.)

  • When writing data to the pasteboard (clipboard or drag), BBEdit now also includes a UTF-8/NSStringPboardType copy of the data with LF line endings. This provides smoother interoperability with Cocoa applications which are not line ending agnostic. (Or more specifically, do not convert the pasteboard data to their native internal representation, often resulting in a mixed line ending document.)

    N.B. BBEdit has always been line ending agnostic when reading data from the pasteboard.

  • The window menu and windows palette are named differently, so multiple results browsers pointing at the same document are easier to distinguish from each other.

  • If the search terms are available at window construction time, Search Results windows include them in the base window name in preference to the instance number, so instead of getting "Search Results 42 (search term)", it's now just "Search Results (search term)".

  • The options and behavior for backing up files at save have changed, as follows:

    • "Make backup before saving" is now a global preference only, and is no longer controlled per file. The "Make Backup when Saving" and "Make Backup Now" options have been removed from the File menu.

    • The settings controlling backup location (in the Text Files prefs) have been removed. Backups are always made to a specific location, as follows:

      • If "Keep historical backups" is turned on, backups are kept in ~/Documents/BBEdit Backups/. Within that folder is one folder for each day's backups. The format of the dated folder name is static and non-localized: YYYY-MM-DD. Inside of each day's backup folder will be all of the backups made on that day, each named using the 8.7.x timestamp format.

        If you want the backups to live somewhere else, lay down a folder alias named "BBEdit Backups" in ~/Documents/ and BBEdit will follow the alias.

      • If "Keep historical backups" is turned off, BBEdit makes only a single backup, located in the same directory as the original, so "backup creep" is a thing of the past. The backup is named according to current OS conventions (which themselves follow the old Emacs convention): the backup file is named as the original file, with a tilde appended: "foo.html~" is the backup of "foo.html".

        If you want the backup to have the same file name extension as the original, turn on the "Preserve file name extension" in the Text Files prefs. This will cause BBEdit to place the tilde after the "base" name of the file: "foo~.html".

  • The machinery behind the Preferences window has been overhauled; this is not user-visible; however, the layout conventions for the prefs panels have changed, which does affect the overall look of the Preferences window. This will affect screen shots.

  • Wildcard mappings for filename extensions to source code languages now work the way they were originally intended to; a suffix mapping of "php*" will now match any file whose filename extension begins with "php" and ends with anything, rather than attempting to apply the wildcard against the entire file name.

  • The dialog used for adding and editing filename extension-to-language mappings (in the Languages prefs) has been modernized.

  • Modernized the options dialog for multi-file Replace All.

  • The "Add..." button for adding Grep patterns in the Text Search preferences has been consigned to the dustbin of history. The "Change" button has been renamed to "Rename" to reflect that it now simply renames the selected pattern.

  • The Application menu and Help menu have been reorganized to follow the conventions established by Apple's current iLife applications.

  • "Check for Updates" is now on the application menu.

  • BBEdit no longer loads CFM (Code Fragment Manager, the Mac OS 9 executable format) language modules. If you have such a language module installed, a message will be logged to the system console.

  • After careful consideration, the "Remember Find dialog's "Start at Top" setting" checkbox has been shot, and tossed in a ditch. (The setting is still stored in preferences, and honored if present.)

  • Significant look-and-feel work on the disk browser: the top bar is gone; the action gear in the lower-left corner has some useful commands on it (a strict superset of what's on the contextual menu), and file filtering control is on the filter popup next to it.

  • Modernized the Save Workspace and Delete Workspace dialogs. (And the Delete Workspace dialog lets you delete more than one workspace.)

  • The file filtering options in the Open... dialog have been simplified to present the following items:

    • All BBEdit Documents

      Anything that BBEdit can usefully open into a document window will be enabled for selection. (This is equivalent to the "All Readable Files" setting in previous versions.)

    • Text Files Only

      Only files that are quickly recognizable as text files (without inspecting their contents) will be enabled for selection. (This is equivalent to the "Text Files" setting in previous versions.)

    • Everything

      Enables all files for selection, regardless of type. (This is equivalent to the "All Files" setting in previous versions.)

  • The file filtering popup in disk browser windows has been reworked to be close to the browser's primary purpose (browsing text files on disk). It now consists of just two items (in addition to user-defined file filters):

    • Text Files Only
    • Invisible Items

    "Text Files Only" will limit the display to items which pass the text-file test (without examining their content). "Invisible Items", if turned off, will limit the display to items which would be visible in the Finder (and also filters out CVS, Subversion, and package directories).

  • The factory default keystroke for "Open Counterpart" has been changed to Command+Option Up-Arrow.

  • The factory default keyboard shortcuts for "Go to Next/Previous Error" have been changed to Command+Control Up/Down-Arrow.

  • The gesture for switching focus from a text view (which normally accepts Tab as an input character) has been changed from Option-Tab to Control-Tab.

  • Moved File Filters to the main find dialog, as it was in BBEdit 7.x.

  • Collapse All Folds now behaves more usefully in documents where there is a single top-level fold (such as HTML or XML documents, as well as in a few other situations).

  • Updated Application Support Folder/Readme.txt with information on backups, and syncing.

  • Adjusted the layout of the Find dialog, eliminating the Saved Sources popup menu (since they are expressed in the sources list directly), and adding a Save Set button instead.

  • Saving Search Sets is done in a sheet, instead of application modal dialog.

  • The separate history popups for search and replace strings have been condensed into one.

  • The term lists for file filters have been buffed a bit.

  • The popup menu used for file filtering in the modal Find dialog, Find Differences, the Multi-file Find window, and Text Factory options has been rearranged. In those locations, the separate "Use File Filter:" check box has been removed; filtering is completely controlled from the menu. (Choose "None" to turn off filtering.)

  • The search history item in the modal Find dialog has sharp corners, just like the one in the modeless dialogs.

  • The command to save Grep patterns from the Find dialog (modal or modeless) is now called "Save" and it's at the end of the pattern popup in the respective dialog.

  • The window stacking preference has been retired.

  • New windows always stack down and right 20px. If you have saved a default window size, and the window is screen height, new windows will just stack to the right, and preserve their saved height.

  • "Find Selected Text (backwards)" is now "Find Previous Selected Text". (There's really no good wording for it that doesn't make the menu wide. Really, it's "Find the previous occurrence of the selected text".)

  • The MDI preference no longer has an internal vs. external distinction.

  • The list of actions in a Text Factory is now sorted alphabetically.

  • The "+" and "-" buttons in Text Factory windows have been adjusted to account for metrics changes in the system.

  • "Replace All" in the old modal Find dialog now replaces every occurrence in the document (or in the selected range, if there is one and "Search Selection Only" is checked), rather than from the insertion point to the end of the document. This makes its behavior consistent with the modeless Find window and the "Replace All" menu command.

  • Updated the "Clear Markers" dialog.

  • "Preview in BBEdit" now factory defaults to Cmd-Control-P (was previously assigned to "Preview in <default web browser>".