Screen Shot 2014-10-23 at 9.47.15 PM

Text/HTML editor BBEdit got upgraded to version 11 this week with a huge number of new features, improvements, and fixes. The highlights include improved syntax highlighting, an updated interface for the “Find Differences” feature, and a new text extraction capability. The Clipping system has been updated to allow for the creation of snippets that can be used in any language, or just in one.

You can get BBEdit 11 for $49.99 if you don’t own a previous verison, or $29.99 if you own version 10. Upgrading from version 9 or lower is also possible, but will cost $39.99. Customers who bought BBEdit 10 on or after May 1, 2014 will get version 11 for free. The app is available from the Bare Bones Software website. Like Realmac’s RapidWeaver 6, BBEdit 11 is not available on the Mac App Store.

The full (and lengthy) change log is below and goes into very fine detail about every change in the new version.


BBEdit 11 requires Mac OS X 10.8.5 or later (10.9.5 or later recommended; 10.10 supported).


  • The results windows for Find Differences are all new. Among other things, the old three-window presentation is gone, replaced by a single window which shows both old and new files at the same time, along with the diff list.

    When two folders are compared, the sidebar on the left shows the hierarchy of files and folders that are different. The “Only in Old” and “Only in New” lists are gone; instead, each pair of icons indicates whether an item is missing from one or the other. If so, the arrow on the right-hand side of the item can be used to copy the file or folder over to replace the missing item.

    In the sidebar of a multi-file Differences window, you can click on a file or folder icon to ask the OS to open it. Hold down the Option key to reveal it in the Finder instead; or hold down the Command key to open the item in BBEdit (even if the OS would open it in some other application).

    The Differences window also supports a “widescreen” layout. Although there is no UI for changing the layout at this writing, you can do so through the scripting interface:

    set widescreen of differences_window 1 to (not widescreen of differences_window 1)

    “Save Default Window” also works for Differences window, so if you prefer the widescreen layout, you can use the script to change it, then “Save Default Differences Window” to make it the default.

  • There’s a new feature: “Highlight instances of selected text”. When you select something (that doesn’t consist entirely of whitespace or punctuation), all of the occurrences of the selection are underlined; and the new pair of commands on the Search menu (“Next Occurrence of “, “Previous Occurrence of “) can be used to navigate the occurrences. (This navigation is independent of the text searching UI, although the string is added to the search history for convenience of future use.)

    This feature can be turned on or off globally in the Editing preferences; there is likewise an adjustment for the delay before the highlighting is done.

  • The Clippings mechanics have been enhanced and reworked, as follows:
    • The concept of “the active clipping set” is now inoperative. Clippings can now be available from multiple sets, as desired. By default, all of the clippings in a given set are now available at all times, unless the clipping set’s name maps to an installed language. In that case, the clippings from that set are available only when the effective language in the active document matches the clipping’s language.
    • This is only the default behavior: you can manually enable clipping sets for any set of languages, by using the “Clippings” item in the Setup window. Select one or more listed clippings sets, and click “Edit Enabled Languages” (or double-click the selected items) to edit the languages for which the set(s) are to be enabled. Within the “Edit Enabled Languages” panel, you can select multiple languages and turn them on or off at once.
    • There is no more special treatment for the “Universal Items” set. Like all other clipping sets in the new order, it is automatically enabled for all languages by default; you can change this in the Setup window as described above. Instead, any clippings placed loose in the top level of the Clippings folder are all available, at all times.
    • The Clippings floating window has been reworked. It is now a single column wide (no more Universal Items) and lists all of the clippings from all available sets. There is no hierarchy given to the clippings; they are listed in alphabetical order. A search box at the top is available to help you filter things down. The “Insert Clipping” command, rather than bringing up a separate modal panel, now brings up the Clippings window, with the keyboard focus in the search box.
    • Clippings completion works pretty much as before; completion options are now chosen from all of the available sets rather than just a single active set.
  • “Zap Gremlins” has been extended to provide the option to use ASCII equivalents when replacing gremlins with the character code (thus replacing the old “Convert to ASCII” command), as well as an option to replace gremlins with HTML entities.
  • Added rebeccapurple (#639) to the list of built-in CSS colors (and to color strings known to the HTML checker), per
  • Added two new commands to the Edit menu for text views: “Select Up” and “Select Down”. These commands facilitate rectangular selection via the keyboard. (Their factory defaults are Control-Shift-uparrow and Control-Shift-downarrow but can be changed as usual in the Menus & Shortcuts prefs.) Given either a single-range selection (that does not cross a line boundary) or an existing rectangular selection, “Select Up” and “Select Down” will extend the selection range up (or down, respectively) in the same column, thus creating (or extending) a rectangular selection.

    These commands are disabled if soft wrapping is turned on in the view.

  • There’s a new button in the Find and Multi-File Search windows: “Extract”. This button (backed by a command on the Search menu, so you can assign a keyboard equivalent to it) will locate all occurrences of the search string (across multiple files, if appropriate) and those occurrences will be collected into a new untitled text document, separated by line breaks.
  • It is now possible for #! text filter scripts to present a dialog box allowing the user to specify arguments to the filter (which the filter script may then use to modify its operation on the input). This is done by creating a Cocoa nib file in Xcode, and placing it in a specific location relative to the script being run (namely, “../Resources/<script base name>.xib“). It is necessary to follow certain specific rules when creating the nib. A separate metadata property list (“../Resources/<script base name>-arguments.plist“) may be included in order to specify the format of arguments on the command line. Complete information is available in the “Using nibs for #! script parameters” technical note.
  • When a Differences window is active, the “Next Error” and “Previous Error” commands on the Go menu change to “Next Difference” and “Previous Difference”, and can be used to navigate even when the differences list does not have focus.
  • Preview windows get a new navigation bar item: “Media”. This allows you to change the preview’s media type on the fly, to aid in evaluating any CSS media queries.
  • The “Text Colors” UI has been overhauled to allow for extended colors (and some new core color types have been added).
  • The format of color schemes has changed. Existing color schemes will be converted; note, however, that the new color schemes have many more color settings. Any missing color settings will use factory defaults.
  • The syntax coloring internals have been extensively reworked. Run kinds (used to determine colors) can now be extended by language modules, with each run having a default color and enough metadata to drive the prefs UI. Thus, language module developers are no longer limited by the set of built-in colors.

    Note: This rework required incompatible changes to the language module plug-in API. Existing compiled language modules will not load, and will need to be updated. Codeless language modules are not affected by this change (but should be updated to take advantage of additional features enabled by the new architecture, as spelled out in the change notes below).

    A complete description of the changes to the language module interface (relevant to developers of both compiled and codeless language modules) may be found in the “BBEdit 11 Language Module Changes” technical note.

  • Because PHP can appear in one of two contexts, recognition of PHP has been split between two languages: “PHP”, which is used only for “raw” PHP source, and “PHP in HTML”, which describes PHP embedded in HTML documents. This should clear up some of the confusion which occurred from having PHP-in-HTML documents sometimes following PHP rules, and sometimes following HTML rules (particularly where clippings are involved).

    Note: If you had previously made changes to the filename extension mappings to explicitly map PHP extensions to “HTML”, or HTML extensions to “PHP”, you will be well served by clearing those mappings and allowing the factory defaults to prevail.

  • When a non-empty shell worksheet is active, the “Export” command is available as “Export to Text”, and can be used to save a text-only representation of the worksheet’s contents.
  • @YES@NO@true, and @false are now colored as keywords in Objective-C documents (the latter two only in Objective-C++).
  • Objective-C numeric literals (e.g. @12345) are now colored as numbers in Objective-C/Objective-C++ files.
  • Added __objc_yes and __objc_no to the keyword list for Objective-C/C++
  • Added @import to the keyword list for Objective-C/C++
  • Added nullptr to the keyword list for C++ and Objective-C++.
  • Added instancetype as a keyword for Objective-C/Objective-C++.
  • There is a new expert preference: PrecomposeUnicodeWhenPasting. This is useful in situations where you frequently bring in text that contains combining Unicode characters from external sources (such as PDFs generated on other platforms), and need to crush two combining characters into one composed character where possible. This is not a generalized need, but if you run into it often enough, turning on the expert preference will save you some work:

    defaults write com.barebones.bbedit PrecomposeUnicodeWhenPasting -bool YES

    (Despite the name, the precomposition is done when BBEdit imports the Clipboard from other applications, not when the paste is actually done.)

    Note that this requires an additional copy of the Clipboard when the application imports the text, and for very large pastes, there may be a noticeable delay while the text gets precomposed. Thus, you should only turn on this setting when you are frequently working with text that contains combining Unicode characters.

  • The UI for “Save Scheme” in the Text Colors preferences has been enhanced: there’s now a pop-up menu so that you can choose the name of an existing color scheme if you want to overwrite it. (You’ll be warned before overwriting an existing color scheme, though.)
  • Added color settings for verbatim sections and math strings in TeX documents.
  • There are now several built-in factory supplied color schemes. These may be used as-is, according to your preference, or you can select one, customize it, and use “Save Scheme” to create your own modifications (which are stored in theApplication Support/Color Schemes/ folder, as usual).

    The “BBEdit Light” color scheme is now the factory default. This is applied when you start up with no existing preferences (including any migrated from TextWrangler), or when you use the “Reset to Defaults” button in the Text Colors preferences.

    The factory default colors from pre-11 versions are provided as “BBEdit Classic”.

  • When you use “sudo” in a shell worksheet, you’ll now be prompted (if necessary) to enter your password. Thus, there’s no need to manually use the “sudo” mode in the worksheet if you don’t want to for some reason.
  • You can now turn on font ligatures with an expert preference. This allows enhanced text rendering behavior in certain fonts, such as the work-in-progress Hasklig font which uses ligatures to enhance the display of compound-character Haskell operators.

    Ligatures may be enabled or disabled per font based on the font’s display name. So, if you wanted to enable ligatures only for the Hasklig font, you would do it thusly:

    defaults write com.barebones.bbedit EnableFontLigatures -bool NOdefaults write com.barebones.bbedit EnableFontLigatures_Hasklig -bool YES

    The font’s display name is the name as it appears in the “Fonts” panel or in the Font Book application; not the name of the font file on disk.

  • There is a new clipping placeholder: #block#. Using this placeholder will guarantee that the inserted clipping text begins and ends with a line break.
  • There is a new control in the status bar at the bottom of text views; it displays the current magnification of the view and allows you to change it. The control can be hidden (or shown) using the “Text Magnification” option in the Appearance preferences.

    There is a keyboard equivalent for opening the Magnification menu; this can be changed in the “Menus & Shortcuts” preferences, under “Status Bar”.

  • The popup-menu buttons at the bottom of the window side bar are now accessible via keyboard commands. There are none set by default; you can configure your own in the “Menus & Shortcuts” preferences; see the “Side Bar Items” section.
  • There is a third option in the Keyboard preferences to control Home and End key behavior: “Progressive (BRIEF compatible)”. If you select this option, the Home and End keys behave as follows on successive presses:
    • the first press will move the insertion point to the beginning (or end) of the current line;
    • the second press will move the insertion point to the begin of the first line (or the end of the last line) in the current page of text, without scrolling;
    • the third press will move the insertion point to the beginning (or end) of the document.

    The behavior is progressive within a specific time period. After the period expires, or if you change the selection range by other means, the behavior state resets, so the next press of Home or End will behave as in the first step described above.

    The factory default timeout period is ten seconds. There is an expert pref to control it:

    defaults write com.barebones.bbedit BRIEFStateTimeout -float 10.0

  • There are some new commands on the View menu:
    • Collapse All Folds – This will collapse all automatically generated fold regions in the text, whether or not they are contained within other folds. (This is distinct from “Collapse Top-Level Folds”, which collapses the top-level folds but leaves any nested folds open.)
    • Collapse Folds Below Level – On the submenu, all available fold levels are shown; choosing one will collapse all of the automatically generated fold regions in the text that are below that fold level. So, for example, Collapse Folds Below Level => 1 will leave the top-level folds open, but will collapse all of the folds below the top level, whether or not they are contained by other folds.
  • After entering a license code, either manually or via in-app ordering, BBEdit will figure out whether you have Yojimbo installed and will offer to save your serial number there.
  • Clicking on the document icon in a window’s toolbar will now open a spring-loaded info panel which displays basic information about the file, and gives you the ability (for local files only) to rename it, “touch” its creation/modification dates, and change its permissions. The “Text” tab shows the same text statistics as the display in the status bar, but in an expanded format. Dismiss the panel by clicking outside of it, switching to another window or application, or pressing the Escape key.
  • A “Get Info” command is now available on the View menu, as well as in the action and contextual menus for file sidebars (for items on disk) and disk browsers. This will display the same info panel that is available by clicking on the file’s icon in the toolbar, but without the Text tab. When applied via action or contextual menu to sidebar items, it is only available for files or folders on local file systems, and will not show text statistics.
  • Added a “Swap” button to the Find Differences dialog box.
  • There is a new command on the Search menu: “Replace All in Selection”. This is enabled when there is a selection in the front document’s text view (or in the document immediately behind the Find window). Choosing it will apply a Replace All only to the selected range of text.
  • Restored the “Font Style Elements” palette to the “HTML Markup Tools” palette group in the Palettes menu.
  • CSS coloring has been enhanced: numeric values are now colored, as are color specifications (both built-in names and 3/6-digit hex color specifications).
  • SCSS is now supported as a built-in language. This is a superset of the support for CSS, with additional coloring for variables, // comments, as well as completion for the SCSS built-in functions.

    Note: If you have installed the third-party SCSS language module, you will need to remove it, since it will otherwise override the built-in support.

  • Added “Create Table Shell” to the Markup -> Tables menu (and the “Table” popup menu in the HTML tools palette). This gives you various options for creating a prefabricated HTML table structure.
  • When starting up a fresh installation of BBEdit, the application will look for existing TextWrangler preferences and migrate them. In addition, if a TextWrangler user settings data folder is located in ~/Library/TextWrangler/ (which is the default for TextWrangler 4.5.x installations), then it will be copied to ~/Library/BBEdit/. Finally, ~/Library/Application Support/TextWrangler/ will be copied to ~/Application Support/BBEdit/.
  • There are two new commands on the Edit menu: “New Line Before Paragraph” and “New Line After Paragraph”. These commands will insert a new line at the beginning of the paragraph(*) containing the start of the selection, or after the end of the paragraph containing the end of the selection, respectively.

    (*) The term “paragraph” is used in the same sense as the Cocoa text system uses it, namely, a line boundary. This is at odds with the conventional definition of a paragraph, but consistent with the OS’s interpretation of the term (and thus with other applications that implement the same behavior).

    NOTE: Because “New Line After Paragraph” uses Command-return as its factory default keyboard equivalent, this gesture is no longer available for sending a command in shell worksheets. Enter still works, though, so you can use that. Alternatively, there is a new placeholder command in the “Shell Worksheet” group in the Menus & Shortcuts preferences: “Send Command”. This defaults to Control-return, but you can now assign it to anything you like.

  • Added check box to the Edit -> Insert -> File Contents file panel: “Include separators”. This will include a separator between each inserted file’s contents, which includes a dashed line and the file’s name.
  • There is now a simple way to add language keywords to installed languages without fiddling your fingers in the application package or other off-limits places. As follows:
    • in the Application Support/BBEdit/ folder, there is a new subfolder, named Custom Keywords. It is created automatically when the application starts.
    • In this folder, place one or more files containing the keywords that you wish to be colored.
    • Each file’s name should map it to the appropriate language, e.g. “.js” for JavaScript files. You can have multiple keyword files mapped to the same language, if you wish.
    • Each file should be UTF-8 text, no BOM, and contain one keyword per line.
    • Keyword lookups are case-sensitive if the language is case sensitive; case-insensitive otherwise.
    • Words in these files are colored using the “Language Keywords” color.


  • The “Recent Documents” section in the sidebar (in windows that have one) is gone; it has been replaced with a “recent” popup button in the action area at the bottom of the sidebar. The menu on this button shows recently opened documents, up to the maximum number specified in the Application preferences. The Show/Hide Recent Documents command on the View menu has been removed.
  • The behavior of the Currently Open Documents list in project windows has changed:
    • There is now an adjustable split between the Currently Open Documents list and the Project list.
    • It’s no longer possible to completely hide the Currently Open Documents list; the command on the menu will toggle the list between a minimum size and the most recently used split position. (Clicking in the header of the Currently Open Documents list will do the same.)
  • The “Start Recording”/”Stop Recording” command has been removed from the Script menu; the system-level support for script recording never did quite work correctly in 10.6 and later, and there is no modern equivalent for the (now deprecated) APIs required to support it. Use the corresponding feature in the AppleScript Editor or Script Debugger instead.
  • Tidy support has been retired. This includes the Tidy submenu on the markup menu, Tidy scripting support, and Tidy operations in text factories. (If you run a text factory containing Tidy operations, those operations will now do nothing.)
  • Renamed “Collapse All Folds” on the View menu to “Collapse Top-Level Folds”, because that’s what it really does.
  • The “Process Lines Containing” dialog has been rewritten (and rearranged). It now also includes the search history and Grep pattern menus proximate to the search string.
  • The Entab/Detab dialog box has been rewritten (and its layout updated).
  • Rewrote the Add/Remove Line Numbers dialog.
  • Changed the “Installed Languages” button in the Languages prefs pane to match the standard system button appearance.
  • Rewrote and modernized the Prefix/Suffix Lines dialog
  • Rewrote the “Hard Wrap” dialog box.
  • Rewrote the “Process Duplicate Lines” sheet.
  • Rewrote the “Sort Lines” sheet.
  • Cocoa-ized “Compare Against Previous Version”.
  • The “encoding couldn’t be guessed for this document” sheet has been Cocoa-ized.
  • Updated the “Clear Markers” dialog.
  • Rewrote the password panels used for privilege escalation in shell worksheets, password prompts for SSH, and other locations.
  • Rewrote the “Replace All” options panel for text factories. For bonus points the fields now use the default editor font and have scrollbars.
  • The sheet for adding Grep patterns from the Find or Multi-File Search window has been rewritten. You can choose a pattern from the popup menu to prefill the name (if you wish to replace an existing pattern).
  • Rewrote the Hex Dump dialog. Resource fork dumping has been retired.
  • The “Options” sheet in the Multi-File Search window has been Cocoaized.
  • The modal panel that appears when you click “Replace All” in the Multi-File Search window has been Cocoaized.
  • The “Show Results” option in the modal “Replace All” options panel has been removed; results for multi-file Replace All are always displayed.
  • Rewrote the Subversion => Show Revision History sheet.
  • The “choose a working copy” dialogs for Subversion operations (Commit, Status, Update) have been rewritten.
  • Rewrote the “Comment” sheet for text factory actions.
  • Rewrote the panel for creating a new item (file or folder) in a disk browser.
  • Rewrote the “New…” panel in FTP/SFTP browsers.
  • Rewrote several of the sheets used by the FTP/SFTP browser window and save panel.
  • The “Find Differences” dialog box has been rewritten. It should behave substantially as before, but now uses the standard Cocoa path controls. (It is in fact a Cocoa dialog box now.)
  • “Set Marker” now uses the new Cocoa panel.
  • Rewrote the “Find Definition” panel as a Cocoa sheet and improved the presentation a bit.
  • The “Find & Mark All” sheet has been rewritten as a Cocoa sheet.
  • “New…” for filters in the Multi-File Search or Text Factory windows now uses a window-modal sheet rather than an app-modal dialog box.
  • The Workspaces feature has been removed; it had become marginal over time and we have better ideas for the future.
  • #pragma mark and its friends in other languages now support the “Xcode style” syntax, in which a leading and/or trailing minus (-) separated from the rest of the mark text by a space, e.g. - this is a mark - will add a menu separator before and/or after the named mark, as indicated.
  • The Open File by Name window no longer attempts an additional search if no results were found and you hit the “Search” button. If the window isn’t finding something that you think it should, please contact Tech Support for assistance.
  • The “Capitalize Sentences” option to Change Case is now smarter about capitalizing sentences that begin with something other than a word character. All of the case transformations are now locale-aware for better correctness with non-English and non-Roman writing languages.
  • Changed the mechanics of creating local cache files for FTP/SFTP temps. A file hierarchy for each account/server is created, and the file stored therein. The folder permissions for the hierarchy are 0700 (u+rwx,ao-rwx).
  • Antialiasing is now turned off for Monaco when used in editing views; this restores the legacy (and more legible) appearance on non-retina displays.
  • The application no longer uses Growl for notifications, since it now runs only on systems where Notifications are available.
  • When using the “Deploy Site” command on a project, the modification dates of uploaded files are tracked, and only files that have changed since the last deployment will be uploaded, to save time. (Any change to the file’s content — not the modification date — will trigger a reupload.)
  • The shell window object class is no longer supported, since it is never created or used directly. (shell document instances may occur in various types of window.)
  • Restored the long-lost ability to open Finder “text clippings” (created by dragging text to the Finder from any application) into untitled windows by dragging a clipping on to the application’s dock or desktop icon.
  • The “New” and “Old” nomenclature for the Find Differences UI has been replaced by “Left” and “Right”.
  • In the Clippings system, the old expert preference ClippingsIgnoreTrailingReturns is ignored and no longer supported. Clippings may include the #inline# placeholder if desired, so that any trailing line breaks in the clipping are ignored.
  • When scanning directories to build the cache for Open File by Name and other purposes, ~/Library/ is now skipped to avoid spending time caching data that is not useful.
  • Changed the factory default for “Include dictionary words in completion list” to be NO.
  • When using the “Buy License” button in the license panel, one of three things will happen:
    • if a current version serial number is found, you’ll get an alert advising you and you can go to the web store.
    • if a previous version serial number is found, you’ll get an alert and can go to the upgrade form
    • if no serial number is found, an embedded Fastspring store window opens up and you can complete the order in-application.
  • The language-specific preferences overrides (via the upper list in the “Languages” preferences) can now include the display font; so if you like you use (for example) one font for Markdown, one font for Objective-C, one font for HTML, and so on. (This does not apply to intra-document language changes, e.g. CSS embedded in HTML; the document font will always be in the document’s primary language.)
  • “Straighten Quotes” now straightens the “lower” Unicode single and double quotes.
  • Commands on the View => Text Display menu apply to both text views in the Differences window.
  • The about box has been rewritten.
  • Freshened the icons used in the HTML markup tools palettes.
  • The #! menu has been rearranged, and some behaviors for running #! scripts have been changed, as follows:
    • “Run…” has been changed to “Run with Options…”. This brings up a dialog which lets you control what is done with the script output. The options to “Run in Debugger” and “Run in Terminal” have been removed, since you can do that explicitly from the #! menu itself (and scripts run that way don’t get their output back into the application anyway).
    • The “Run File” command has been removed.
    • When running a script from a file, the application will set the current working directory to the one containing the script file. (The old “chdir to script’s directory” option has been removed.)
    • “Check Selection Syntax” and “Run Selection Only” have been removed.
    • The AppleScript commands for running #! filters have been removed.
  • If you want to just reveal a file in the Finder by clicking on the document icon in an editing view’s toolbar (and bypass the info panel), hold down the Command key while clicking on the icon.
  • You can now use wildcards in the Clippings floater search box. Note that the interpretation of the pattern is strict; “ab* will only match clippings whose names begin with ab, whereas a non-wildcard ab will match any clipping whose name containsab.
  • Promoted the “Case sensitive” check box in the “Process Duplicate Lines” dialog box, because the setting affects duplicate detection even when not using a Grep pattern to determine the matching string.
  • The {Copy,Save} as Styled {Text,HTML} commands are now enabled when the front document’s language is “(none)” or some other non-syntax-colored language, and will generate a single-styled run of text (or HTML code) as needed.
  • When creating a new document, the file is created without HFS type and creator metadata, as long as its name maps to something that is recognizable as a text file (either by internal language mapping or the system identifying its filename extension).
  • BBEdit no longer pays attention to the global system font smoothing setting when drawing text in text views. The existing application-specific expert preferences still work, though; so use those if you need to adjust font smoothing in the application.
  • When a #! script is run, the following environment variables are now set if applicable:

    BBEDIT_ACTIVE_PROJECT: Path to the frontmost (z-order) project document if it’s on diskBBEDIT_INSTAPROJECT_ROOT: If the frontmost (z-order) project is an instaproject, this is set instead to the path of the folder represented by the project.

  • Objective-C @property declarations are now flagged as prototypes, so they will only appear in the function menu if “Show function prototypes” is turned on in the Appearance preferences.


  • Fixed bug in which default project window settings saved by “Save Default Project Window” were not properly applied when creating a new project document.
  • Fixed #mark processing in Lua documents. Parser was losing track of the end of the line, which resulted in #mark tokens being ignored.

    Note that the correct syntax for a mark (which goes into the function popup and is colored as a comment) is as follows:

    -- #mark -
    -- #mark Hello, World`

    Where the former puts a horizontal separator into the function popup, and the latter creates the function popup entry “Hello, World”.

  • Disk browsers and project/multi-document windows get a little extra space for grabbing the vertical resizer for the sidebar.
  • Fixed crash which would occur when trying to use certain fonts with broken metrics. The preferences system will now intercept these requests and log the offenders, and substitute an appropriate factory default.
  • Rewrote the Grep pattern management internals (used by the Setup window and others) to improve performance and fix bugs.
  • Fixed bug in which typing into a column selection would insert the first character typed in every row, and then collapse the selection to an insertion point and subsequent characters were inserted only on the first row. Now, the selection range is collapsed to zero width in all rows, so that subsequent characters typed are inserted on all rows.
  • Rewrote the code which (subject to preference settings) strips trailing whitespace when saving a file. It’s now much faster, particularly on very large files.
  • The Automator actions are no longer packaged inside of the application, but are instead built as a separate Installer package.
  • Turned off garbage collection for the Automator actions. As a result they are usable only on OS X 10.9 and later.
  • When a file filter is edited, all display clients (disk browsers and projects) currently using that filter are notified so that they can refresh their list displays.
  • “Set Marker” is a little smarter about picking the default text for the sheet.
  • Fixed a bug in which files opened by external request when starting the application (e.g. double-clicking a document in the Finder) were opened before sleep state was restored, resulting in the desired documents ending up in their own buried window, rather than active.
  • Made some local optimizations to reduce overhead when working in non-soft-wrapped files with extremely long lines in foldable constructs.
  • Fixed bug in which ~/Library/Logs/<application name>/ was not created when it should have been, which would cause an error message to be logged to the console and the particular log file to be inoperative.
  • Fixed a cosmetic issue in which focus rings were missing from text fields in Cocoa dialogs/sheets.
  • The Escape key can now be used to dismiss the “Installed Languages” panel.
  • Made changes to reduce the memory requirements for the HTML “function” scanner. This will only be noticeable on really huge files.
  • Fixed bug in which the warning for malformed UTF-8 files and the expert pref for “always prompt for unguessable file encoding” didn’t work.
  • Fixed bug in which ingesting the results of “Process Lines Containing” on an open window would require 2x more memory than was necessary, which would in turn lead to an out-of-memory alert when working with files of sufficient size (upwards of around 250MB).
  • Fixed internal exception that would occur when using the Counterparts popup or “Open Counterpart” in some rare circumstances.
  • Fixed bug in which counterpart discovery would give up too easily, leading to a failure of “Open Counterpart” or the Counterparts popup to find appropriate files.
  • Corrected the sort order of items in the Counterpart popup, so that counterparts whose languages match the front documents appear at the top of the menu.
  • Fixed bug in which running out of memory while preparing an Undo state would subsequently cause a crash when attempting to Undo or Redo.
  • Made a change to reduce memory pressure and improve performance on very large files when computing word counts and examining text for spell checking and other purposes.
  • Reworked Process Lines Containing so that out-of-memory conditions mid-operation are more gracefully handled; and so that it’s able to process larger files before memory constraints interfere.
  • Implemented a workaround for the “Look Up in Dictionary” contextual menu item failing on OS X 10.9.x and later (radar 15340950).
  • The reverse arrow cursor has been consigned to the dustbin of history.
  • Fixed a bug in which the wrong sound output source was checked for muting. This would affect systems when the sound-effects output was different from the default sound output device.
  • Made a change to reduce transient memory requirements for Sort Lines, and to gracefully handle out-of-memory conditions if they arise during processing.
  • The crash reporter now auto-fills the email address from the address book. A button to go to our Privacy Policy page and additional verbiage are included.
  • Fixed bug in which changing the display font of a document would also reset its tab width to 4 spaces per tab, irrespective of the actual current setting.
  • Made some edits and updates to the About Box credits.
  • Improved the performance of an internal operation that could be heavily used during function scanning of very large HTML files.
  • Fixed a couple of bugs which conspired to cause miscalibration of the horizontal scroll bar when working in files with very wide tab stops.
  • Vanquished an eldritch horror from before time; namely, a trailing backslash at the end of a Grep replacement pattern would insert garbage characters instead of simply the backslash.
  • Adjusted the preference panes so that they are all the same size, and no window resizing animation is required when switching between them.
  • Corrected a layout goof in the Preferences window search box.
  • Fixed bug in which clipping menu items were enabled when no eligible window was open, leading to an error in case one of them was chosen (or invoked via keyboard equivalent).
  • Made a change to reduce the amount of text duplication (and thus memory) required when doing certain text transformations.
  • Multi-file search status now updates with the name of each file being considered, whether or not it actually ends up being searched. This avoids potentially long pauses in status updates when there is a long interval between searchable files.
  • Fixed bug in which cancelling a multi-file search or text factory operation would leave it stalled indefinitely in cases where the operation ended up using enough memory that it had to wait for usage to drop below the high-water mark.
  • Fixed bug in which persistent include paths would be inserted as absolute paths in cases where the include file was in a subdirectory of the site’s “Templates and Includes” folder.
  • Corrected the sort order in the various columns of the Entities palette.
  • Made sort order settings persistent in the Entities palette.
  • Fixed bug in which double-clicking on an item in the Clippings palette would trigger keystroke editing instead of inserting the clipping as intended.
  • Fixed bug in which clicking on the “end” indicator of a foldable range of text would not collapse it if the starting line was out of view (scrolled off the top).
  • When clicking on the “end” indicator of a foldable range of text, the start of the foldable range is now scrolled into view at the top of the window, if it was scrolled out of view when collapsing the range.
  • Fixed bug in which the LeaveRoomForPalettes expert preference was not honored when turned off and creating new windows.
  • If the volume containing a document’s backing file gets unmounted, the application will only attempt to remount the volume if it is local. This avoids antisocial behavior by the OS when a remote volume is not reachable (typically due to a network configuration or location change).
  • The built-in Software Update will now unpack into a subdirectory of ~/Library/Caches/, to avoid a use case in which unpacking completes into a subdirectory of /tmp, and then the user waits overnight to do the installation, and in the meantime the OS clears /tmp which results in an error when trying to apply the update the next day.
  • Fixed bug in which the “Worksheet & Scratchpad” section in project window sidebars did not properly account for alternative list font choices when computing the space for the section.
  • Corrected keyboard focus in the Software Update prompt window.
  • Corrected keyboard focus in the crash reporter window.
  • Corrected an oversight in the documentation credits.
  • Fixed a bug in which dismissing the Markup panel by activating a different window would cause the markup panel’s host (now the second window) to come back to the front.
  • The Find and the Multi-File Search windows now return the correct answer when the number of text elements is requested via the AppleScript interface.
  • Fixed bug in which items on file filters menus were not sorted by name as they should have been.
  • “Open Selection” in a shell worksheet will now attempt to resolve the selection as a partial path against the current working directory before giving up and bring up the Open File by Name window.
  • “Save a Copy” now legalizes the file name before saving, by changing characters not allowed by the file system APIs (‘:‘, ‘/‘, or control characters) to dashes.
  • “Save a Copy” will attempt an authenticated save if it is unable to otherwise create the copy in the indicated location.
  • Put in a check to fix a potential crash (which was never reproducible).
  • Fixed crash which would occur when using “Move to Trash” for multiple selected items from a project window or editing window sidebar on a volume which didn’t allow it.
  • Fixed bug in which project sidebar lists showing folder contents would scroll unpredictably under certain conditions when the folder’s contents had been changed for some reason (e.g. adding, removing, or renaming a file).
  • Made a change so that “find” events are less verbose in recorded scripts.
  • The FTP/SFTP connection sheet (used in the FTP/SFTP browser and “Save to FTP/SFTP dialog) has been rewritten and modernized. This fixes display glitches reported when running on 10.9.x and later.
  • Fixed bug in which clicking “Install & Relaunch” when dragging a package or language module onto the application would fail with a -43 error (although the item would be installed in the correct location).
  • Shift-return and Option-return in the Clippings floater’s search box will behave as the same modifiers do when choosing an item from the Clippings menu: Shift reveals in the Finder, Option opens for editing.
  • Crash recovery data is now stored in the same location as the application sleep and auto-recover state, namely ~/Library/BBEdit/ (unless you have relocated that to your Dropbox folder). The folders and files containing crash recovery data now also have their permissions set so that they can only be read and written by the current user.
  • Corrected appearance of the bold-faced item in the function menu when the name being displayed contains tabs.
  • When writing out changes to a file that was not open, text factories and multi-file Replace All operations will (if appropriate) set the file’s text encoding extended attribute to the correct value.
  • Fixed bug in which FTP/SFTP documents couldn’t be dragged into a project’s list from another window’s sidebar.
  • Corrected the HTML5 syntax checking for the usemap attribute.
  • Added value checking for the coords attribute in area tags in HTML5. (It checks only for a reasonable number of comma-delimited integers, but will not enforce that the number of coordinates provided is appropriate for the indicated shape.)
  • Fixed bug in which clipping set switching would get confused after using “Move to New Window”.
  • Added some predefined names to the Ruby language module for coloring.
  • Directory enumeration for Find Differences when comparing folders will now resolve symlinks when possible.
  • Worked around a bunch of antisocial behaviors in the OS that would cause floating windows to end up all over the place after disconnecting and then reconnecting a display (typically an external display connected to the laptop). Now, the OS may still make your palettes dance around like they’re on “The Price Is Right”, but once you put them where you want them, the application will remember their positions more reliably.
  • Fixed crash which would occur when using the “Hard Wrap” command to do something outrageous (like wrap a 40+MB mach-o executable binary).
  • The “Hard Wrap” command now runs on a separate thread, so that really long operations can be cancelled.
  • Made the default value of MarkupToolsMisc_SkipXMLFilesWhenScanningFoldersconsistent with the Expert Preferences help.
  • Fixed crash which would occur at application startup if the application’s support folder could not be found or created.
  • When saving and restoring state, the ordering of items in the “Currently Open Documents” list is now preserved.
  • Updated the Markdown syntax coloring to fix a class of issues related to editing multi-line list items and multi- line quote blocks.
  • Fixed geometry calculation so that the Markup Builder panel is more likely to come up where you expect it to on multiple-screen systems.
  • Made a change so that ASCII NUL (0) characters in the document don’t prematurely shorten the data sent down the pipe to Unix (script or executable) text filters.
  • Text Factory text filters no longer extend the selection range out to line boundaries (making them consistent with other types of text filter).
  • Fixed bug in the Python function scanner so that dividing lines in the function popup, added with “#mark -“, no longer need a trailing space.
  • Fixed bug in which entries in the function menu created by splitting up a compound divider mark (e.g. #pragma mark - stuff goes here -) would sometimes be sorted out of order.
  • Multi-line comments in Python files that contain #mark lines will now stop before the #markand start again after. Thus something like
    # comment
    # comment
    #mark - cool stuff here -
    # comment
    # comment

    will now get fold indicators for the first two lines, then three entries in the function popup (a separator, “cool stuff here“, and a separator), and finally another folding block comment for lines four and five.

  • Fixed bug in which the progress dialog would never become visible when activating the application, for operations that were started while the application was in the background.
  • Fixed crash which would occur when dragging a very large directory or some other set of items into a text view which would require enough time to ingest that the system would time out the drag operation and leave the application in an inconsistent state. (The mildest form of this syndrome was that a drag highlight ring was left around the text view.)
  • Made the behavior of the Emacs ctl-L gesture consistent with the documentation.
  • Since aliases/symlinks in the top-level Application Support folder are no longer supported, the application will present an alert if it finds any when starting up.
  • The top-level (application-named) folder in ~/Library/Application Support/ or your Dropbox/Application Support/ can now be an alias (or symlink) to somewhere else; that is, ~/Library/Application Support/BBEdit can now be aliased to another location.

    We don’t generally recommend doing this, but it is supported and should work for situations where it’s absolutely necessary. (I’m looking at you, Greg.)

  • All of the CSS markup dialogs (on the Markup -> CSS menu) have been rewritten and modernized.
  • The #! => Run With Options output options will now respect the global preferences for whether new documents should be opened/created in the front document window. An exception is made for output to the catchall “Unix Script Output” log, which will always open into a separate window (unless the front window is in full-screen mode, in which case it’ll be opened in the front window).
  • Rewrote the “Apply Text Factory” dialog box (which is used when choosing a text factory from the Scripts menu if the factory doesn’t have any previously specified files to process).
  • Made a small behavior change to the output phase of Unix text filters: any data written to stdout is always used to replace the selection range (or document contents); anything written to stderr is now logged to a separate document.
  • #mark directives in Python files (for insertion into the function popup) no longer need to be preceded by a “# ” (it’s optional). Thus, either # #mark something or #mark somethingwill place a something in the function menu.
  • The Python scanner adds support for trailing hyphens in #mark directives, so a line like “#mark - Put Good Code Here -” will result in three entries in the function popup: a horizontal separator, “Put Good Code Here“, and another horizontal separator.
  • Files that conform to public.delimited-values-text are now recognized as text files, and .csv and .tsv are now part of the factory default filename extension mappings.


FTC: We use income earning auto affiliate links. More.

Check out 9to5Mac on YouTube for more Apple news:

You’re reading 9to5Mac — experts who break news about Apple and its surrounding ecosystem, day after day. Be sure to check out our homepage for all the latest news, and follow 9to5Mac on Twitter, Facebook, and LinkedIn to stay in the loop. Don’t know where to start? Check out our exclusive stories, reviews, how-tos, and subscribe to our YouTube channel

About the Author

Mike Beasley's favorite gear