BBEdit 10 Release Notes

This page documents all feature enhancements and refinements included in BBEdit 10 (including 10.0 and subsequent feature updates). Included are additions and changes made since BBEdit 9.6.

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


BBEdit 10 requires Mac OS X 10.6.8 or later (10.8.5 or later recommended).

PowerPC-based Macs are not supported.


  • BBEdit now supports "packages". A package is nothing more (or less) than a collection of the sort of things you'd place into ~/Library/Application Support/BBEdit/ to extend BBEdit, but makes it easier to collect related items together and install them all at once, rather than having to manually install and manage items spread out between different folders.

    Structurally, a package is a folder whose name ends in ".bbpackage". (This is required.) The items immediately within the folder are reserved for definition and use by the application; please do not put anything at the top level of the folder that isn't documented.

    Immediately within the package folder must be a folder named "Contents" which is where all the action happens.

    The Contents folder may contain a folder "Resources" and a file "Info.plist". (These items may be absent currently, and are reserved for future expansion.)

    The Contents folder may also contain any or all of the following folders:

    • Clippings
    • Language Modules
    • Preview CSS
    • Preview Filters
    • Preview Templates
    • Scripts
    • Stationery
    • Text Filters

    Each of these items behaves as though its contents were in the same-named folders in ~/Library/Application Support/BBEdit/. They're all optional, but obviously a package is useless if it contains nothing.

    Once assembled, packages reside in ~/Library/Application Support/BBEdit/Packages/.

  • Tag Maker and Edit Tag have been replaced by a single command: "Edit Markup", which now presents a completely new user interface.

    When you choose "Edit Markup" to edit an existing tag, the panel that appears presents a table of attributes and values. In the column on the left are attribute names; the column on the right is where you fill in values.

    When adding or editing attribute names, you can type in anything you want; but the combo box presents (and assists in the completion of) only attribute names that are valid for that tag.

    If a tag has any required attributes, those are added to the list and cannot be edited or removed.

    When making a new tag, the panel starts off with a combo box in the upper left corner; it allows only the selection of elements that are valid at that point in the document.

    In the upper right hand corner of the panel, there's an icon. When it's enabled, clicking it causes BBEdit to fill in "recommended" attributes for that element. (If it creates any attributes that you don't want, just clear their names, and they will not be inserted.)

  • There's a new command on the Window menu: "Show Unix Worksheet". This will open a worksheet document that is application-wide, and backed by a worksheet file saved in your Application Support/BBEdit folder. Like the Scratchpad, changes here are saved automatically.

    There's also a "Unix worksheet window" application property available to the scripting interface.

  • If you use Dropbox, you can relocate your BBEdit application support data to your active Dropbox folder, and BBEdit will use them there in preference to the locations in ~/Library/. In this way, you can easily share supporting files with multiple BBEdit installations (handy for multiple machines on your desk).

    Here's how:

    • Quit BBEdit if it is running.

    • Move your home/Library/Application Support/BBEdit to your Dropbox/Application Support/BBEdit/. Note that by default, there is no Application Support folder in your Dropbox, so create it if necessary.

    Note: The system does not support relocation of the core preferences data file (~/Library/Preferences/com.barebones.bbedit.plist), so you won't be able to synchronize preference settings.

    Note: The ability to share supporting files between multiple installations of BBEdit does not excuse you from the terms of the end-user license. You can use Dropbox to share the supporting files with whomever you like, but you must continue to abide by the terms of the license agreement.

    If you like, you can relocate "BBEdit Backups" from ~/Documents/BBEdit Backups to ~/Dropbox/BBEdit Backups/, and BBEdit will place your backups there instead. (As before, you can alias it to some other location.)

  • There is a new folder in Application Support/BBEdit/; named Setup. It contains data that previously was stored either in the application preferences or in the com.barebones.bbedit.preferenceData folder that was in ~/Library/Preferences/. Specifically: file filters, FTP/SFTP bookmarks, Grep patterns, web site settings, and key bindings are stored here; thus, they will be synchronized as well if you have placed your BBEdit application support folder in your Dropbox folder (as described above).

  • Slick new feature: preview templates and adjustable CSS for "Preview in BBEdit" windows. Here's how it works:

    • Place a fully structured HTML document in ~/Library/Application Support/BBEdit/Preview Templates/. It can contain anything you like, but should define the basic structure and appearance of the document. In the document, place a single placeholder: #DOCUMENT_CONTENT#.

    • Make a new document. Type some content into it. Use a few HTML tags, whatever, but it shouldn't have a full HTML document structure.

    • Preview the document. Note in the preview window, there is a row of items below the toolbar, containing two items: "Template:" and "CSS:". From the Template menu, you can choose the template that you saved in the first step. The contents of the document that you're previewing replace the #DOCUMENT_CONTENT# placeholder, so that when you preview, you'll actually get all of the chrome that's defined in the template, without having to replicate it for a fragmentary document that you might be working on.

    • If you place a valid CSS document in ~/Library/Application Support/BBEdit/Preview CSS, it will be available on the "CSS:" menu. Choosing it will apply that CSS to the preview as well.

  • BBEdit's multi-file search can now search inside of Zip files. This is automatic: if a Zip file is encountered while searching, its contents are explored, and any entries whose names indicate that they are text files will be unpacked and searched. Matches are displayed in search results as usual.

    This behavior can be controlled by a new option in the Multi-File Search window's "Options" sheet: "Search compressed files." When turned off, BBEdit will skip Zip, gz, and bz2 files while searching, even if they may contain compressed text files.

  • The bbfind tool has been updated with a new option: -C (or --no-compressed-files), which if present suppresses the searching of Zip/gz/bz2 files as described above.

  • There's a new command on the View menu, "Show File List" (or "Hide File List"). When a project or MDI window is in front, this command quickly toggles the visibility of the list(s) on the left.

  • Discrete Change Case options are now available on a submenu below the main "Change Case" command.

  • FTP browsers get a "Manage Bookmarks" command, which opens the Setup window and selects the Bookmarks list.

  • The Find and Multi-File Search windows get "Manage Patterns" and "Manage Filters" commands, which open the Setup window and select the Patterns (and Filters, respectively) lists.

  • There's a new command, on the Application menu: "Setup." This opens a window for configuring saved bookmarks, file filters, Grep patterns, and site settings for the Markup tools. Use the "+" button to add something, "-" to remove it, double-click (or Enter) to edit.

  • The "Text Colors" preferences now add an interface for loading and saving color schemes. The format for color scheme files is the same one used by BBColors and in fact, BBEdit will import any BBColors files that you have created.
    Color schemes live in ~/Library/Application Support/BBEdit/Color Schemes/.

    Note: Using the bbcolors command-line tool to make color changes will have no effect in BBEdit 10. If you were using it before, we recommend that you desist, since bbcolors works at cross purposes with BBEdit's built-in support.

  • Language pref customization now allows for per-language selection of a color scheme.

  • The View menu now has commands for toggling the visibility of various sections in the project/MDI file list. (These commands will show or hide the section entirely, versus using the disclosure triangle to collapse or expand them.) You can assign keyboard equivalents in the Menus and Shortcuts preferences, if desired.

  • If you turn off the Subversion menu (because you don't use it), BBEdit will also hide the Subversion-related contextual menu commands in project/MDI window file lists, and will hide the Subversion menu button at the bottom of the list pane.

  • The "Application" preferences get a new setting: "Open documents into the front window when possible." This controls MDI behavior: when turned on (the factory default), new and opened documents will be placed into the front window when appropriate; when off, a new window is created for each new or opened document.

  • There's a new expert preference: "AutoShowFileList". By default, it's set to YES, but if you set it to `NO', the file list will not automatically become visible when you open the second document into an editing window:

    defaults write com.barebones.bbedit AutoShowFileList -bool NO

  • You can now use the "Menus and Shortcuts" preferences pane to assign key shortcuts for Scripts, Stationery, and Text Filters.

  • The Export command on the File menu is now enabled when the active document's language supports previewing in HTML (Markdown is a good example of this). In that case, the command name on the menu will read "Export as HTML", and will bring up a save panel so that you can save the generated HTML into a file. Note that this command's availability depends entirely on the language module.

  • FTP browsers get a "Kind" column.

  • When MDI is turned on, documents are now opened (or created) in something that looks and behaves substantially like a project window. The Documents Drawer has been retired: use the file list on the left for navigation, or the document menu in the navigation bar. The "Show Documents Drawer" command has been removed from the View menu, the document drawer icon has been removed from the toolbar.

    This change confers several benefits:

    • It is now possible to save all of the documents in a window as a project, without having to go to the trouble to actually make a new project beforehand. (Open documents as desired, then use "Save Project" on the File menu.)

    • The file list is manually reorderable and can be organized using collections, which addresses a longstanding request from heavy users of the drawer.

  • Project windows grow a couple of new lists:

    • Recently Used:

      Shows documents recently opened into this project's window.

    • Scratchpad & Worksheet:

      Every project document carries its own scratch pad and worksheet document. This is shared for all users of the project, so if you wish you can use the scratchpad to make notes for other users; or store handy commands in the worksheet.

    These can be collapsed or hidden, if desired.

  • There is a new command on the File menu: "Print Selection". When chosen, it will print the selected range of text in the document.

  • There's a new control in the Editor preferences: "Line Spacing". You can use this to adjust the amount of space between lines of text in editing views. The minimum value is consistent with previous versions of BBEdit.

  • Verilog and VHDL language modules are now built in. These were previously written by Yasuhisa Kato.

  • Added support in HTML5 documents for all of the ARIA attributes and their pre-defined values.

    For a complete list of supported ARIA attributes and values, see here and here.

  • Added support for the include command/directive in ActionScript files. Included files are now listed in the file inclusions popup.

  • BBEdit now stores document state (window positions, etc) for files opened using the built-in FTP/SFTP interface.

  • Simple Emacs repetitions (ctl-U followed by a number) can now be used to insert repetitions of a single character. Try this:

    ctl-U 80 -

    (that is, type Control-U, the numeral 80, and then press the "-" key)

  • Contextual menus for projects (instant or otherwise) now include SVN "Show Status" when one folder is selected.

  • For languages backed by a codeless language module, BBEdit now generates fold points for delimited blocks. (A good example of this is the "Go" language module, available at, but there are no doubt others.)

  • The Ruby module now supports the standard callouts for the function popup, including FIXME:, NOTE: REVIEW: TODO: ???: and !!!: Example: #NOTE: this block will not work if the moon is full

  • Added ".md" and ".mdown" to the default suffix mappings for Markdown.

  • When doing a "Paste Column", BBEdit will perform a "fill down" in the selection range if the text being pasted contains no line break (or contains only a single line break at the end).

  • Added "Capfile" to the default name mappings for Ruby.

  • Full-screen mode is supported for editing windows on Mac OS X 10.7.2 and later. Use the "Enter Full Screen" command on the View menu. (This command is hidden when running on 10.6.x.)

  • The dock menu has a new command: "New Text Document" It creates a new, empty text document in the same location File->New Text Document would have, then pulls BBEdit to the foreground.

  • The "Show items starting with '.'" switch in FTP browsers is now 'sticky'; whether it is turned on (or off) will be applied for the next time you create an FTP browser or use "Open from FTP/SFTP Server".

  • Callouts (FIXME, TODO, MARK, etc) are now supported in PHP comments.

  • "Open File by Name" has gotten a makeover. The window that opens is now modeless, and you can leave it open while doing other things in BBEdit. Activating the Open File by Name window (or choosing the menu command) will place keyboard focus in the search box and select its contents, so that you can just start typing. Use the "x" widget to clear your entry.

    As you enter a file name, BBEdit will search for the name as well as wildcard matches, and present all of the possible matches in the name field's combo box. If the name you enter contains wildcard characters (such as * or ?, e.g. NS*.h or index.*) then the entered name is used as a wildcard pattern. If the name you enter does not contain wildcards, then BBEdit will use it as a basis for casting a pretty wide net. Searching is capped to a maximum number of matches, so that performance is reasonable while typing in the dialog box. The factory default is 200, and may be adjusted:

    defaults write com.barebones.bbedit OpenByNameMaxWildcardMatches -int 200

    Search-as-you-type will first look for matches in one of two possible places, in order of preference: the files in the front (Z-order) project document; and the files in the active Xcode project. Then, if Xcode is running, BBEdit will look for files in the system frameworks and includes.

    If you desire, you can enter an absolute path (e.g. /usr/include/stdio.h), a home relative path (~/Library/), or a URL (http, ftp, sftp, and several other schemes are supported internally), and clicking the "Open" button will open the indicated item (assuming it exists).

    Otherwise, if no matches are found for the string you entered, the "Open" button will instead read "Search". Clicking the Search button will search for appropriate matches to the file name: a wildcard match if you employed any wildcard characters when entering the name; or an exact-name match if not.

    There's a search history; when you open a matched item, the string you used is stored. The magnifying glass contains a popup menu listing the recently used strings.

    Fun things to try:

    • Drag the "favicon" from your Web browser's address bar into the edit field, and note that the URL appears there. Now hit the "Open" button.

    • Type "NS*.h" while an Xcode project is open (or while Xcode is running).

    • Open a project in BBEdit which contains the sources for a Rails app, and type practically anything.

  • The Arrange command on the Window menu toggles to "Tile Two Front Windows" when you hold down the Option key. It does what it says.

  • The Multi-File Search window now has a target called "Frontmost Project". Ticking this option will add the frontmost project to the search targets.

  • It's now possible to preview things using "Preview in BBEdit" that aren't HTML or HTML generators. So, for example, if you preview a C++ document, you'll see an HTML rendering of the document as it appears in your editing window (and the same HTML that would be generated by using the "Copy as Styled HTML" or "Save as Styled HTML" commands). This is useful in situations where you want to typeset your code, and need to be able to experiment with different page templates and styles.

  • When previewing documents in a particular language, you can specify the default CSS to be used when previewing, simply by placing an appropriately named CSS file in Application Support/BBEdit/Preview CSS/. The name of the file should be of the pattern DefaultCSS_*.css, in which the * is replaced by the name of the language. So, for example, to designate a file as the default CSS for previewing Markdown, you'd name the file DefaultCSS_Markdown.css.

  • A new expert preference is available to control the generation of <img> markup:

    defaults write com.barebones.bbedit HTMLImageMarkupUseInlineStyleForImageSize -bool YES

    If HTMLImageMarkupCreatesSizeAttributes is turned on, then turning on HTMLImageMarkupUseInlineStyleForImageSize will instruct BBEdit to generate the image size as an inline style attribute:

    <img src="foo.png" alt="Some picture" style="width: 640px; height: 480px;" >

  • There's a new expert preference to control the default language for new untitled documents:

    defaults write com.barebones.bbedit DefaultLanguageNameForNewDocuments -string "<language name>"

    "<language name>" should be the name of a language shown as installed in the Language preferences. For example, if you want your new documents to be Markdown:

    defaults write com.barebones.bbedit DefaultLanguageNameForNewDocuments -string "Markdown"

  • Added a tweaky expert preference:

    defaults write com.barebones.bbedit ReplaceAllResultsIncludeTiming -bool YES

    When turned on, the sheet (or Growl notification) reporting the results will include the time required for the single-file Replace All operation that just completed.

  • If you right-click inside of an <img> tag, the contextual menu gets an additional item: "Update Image Dimensions". This will add, or update, the width and height attributes of the image file specified in the src attribute (assuming that BBEdit is able to resolve the reference to a file on your local disk). This saves a round trip through the markup panel. Note that as always you can use the "Images" commands on Markup -> Update to perform this operation for all of the <img> tags in a document (or folder, or site).

  • Projects have a new action menu, Site. This menu contains commands for configuring the project as a "Web Site" project, with local root, defaults for new documents (and a "New HTML Document" contextual menu command), settings for the image updater, and a new feature: Deployment. This last allows you to configure the remote destination for a site's contents, and determine what additional steps to take before uploading. Thus, deploying a site takes the place of several operations that were previously manual.

  • When creating a new HTML document (from the dialog or from a template), there's a new substitution available: #LOCALE#. This is the "short" locale code corresponding to the "Language" setting in the dialog box, e.g. en, de, x-klingon, and the like.

  • There's a new command on the Search menu: "Compare Against Previous Version". If you're running on Mac OS X 10.7 or later, this command gives you access to previous versions of the document you're working on; you can compare and integrate changes from those versions, as desired. A new version is created each time you save a file. The version history is arbitrarily limited by the system; if you wish you may disable version creation entirely with an expert preference:

    defaults write com.barebones.bbedit AllowVersionedSaves -bool NO

  • There's a new menu in the menu bar: "Go". This menu contains some navigation commands that were previously on the Search menu (thus shortening the latter), and adds new commands and capabilities:

    • "Functions" opens a floating window which lists the functions in the active document (if it's in a language which scans for functions and other items that appear on the function menu in the navigation bar). The Functions window contains a search box so that you can filter down the list by typing a partial function name.

    • "Jump Points" presents the jump history (implemented in previous versions of BBEdit) and provides a means to explore it in an out-of-order fashion, if desired.

  • There is a new command: Go -> Named Symbol... This is third on the "Go" menu, and has a factory default equivalent of Cmd-Ctl-J (you may need to assign it yourself if it doesn't show up automatically, which could happen if you have keyboard equivalents held over from a suitable ancient version of BBEdit).

    This will present a sheet with all the functions and markers listed, and a filter box at the top. Choosing an item from the list jumps the text view to that location in the file.

  • The "ASCII Table" palette has been replaced by the Character Inspector, which gives you live inspection of your selected text. Although it's a static display, you can select any of the representations of your selection and copy (or drag) them as desired.

  • Added a new (dynamic) menu command to the File menu: "Close All in Project". When the front window is a project, and contains open documents, this command is enabled and will close all of the documents in the project without closing the project itself. The factory default equivalent for this command is Command-control-W.

  • "Compare Two Front Documents" has been changed to "Compare Two Front Windows". This more accurately reflects its behavior, and provides for a more predictable set of rules, specifically: this command is enabled only if there are two or more editing (or project) windows open, and a text document is active in each of the frontmost two windows, and if neither window is blocked by a modal dialog box).

  • Added a new command to the Edit menu: "Paste & Select". This is dynamic, and becomes visible when holding down the Option key. The factory default keyboard equivalent is Command-Option-V. (It's also visible in the contextual menu in text views, again by holding down the Option key.)

  • Live preview windows now have a new item in their navigation bar: "Preview Filter". This choice lets you route the document's contents through the text filter of your choice before display. The default choice is "(language default)"; in this case, the preview contains the language module's default HTML conversion, as before.

    An example of how you might use this manually would be with a Markdown document, to override the default built-in Markdown conversion with something tailored more closely for your own needs (e.g. MultiMarkdown). Using this as an example, after installing the MultiMarkdown package, you could create a symlink (or alias) from /usr/local/bin/multimarkdown to your Application Support/BBEdit/Preview Filters/multimarkdown, at which point you could choose "multimarkdown" from the Preview Filter menu in the preview window.

    Preview filters may reside in one of two places: a new folder, Application Support/BBEdit/Preview Filters/, or in an installed package's Contents/Preview Filters/ directory. (So, for example, if someone supplied a BBEdit package for MultiMarkdown, it might conceivably contain a multimarkdown executable that you could use.)

    Preview filters may themselves be one of three things:

    • An AppleScript, with a FilterTextForBBEditPreview entry point. This entry point will receive a unicode text object which is the document's contents. If there is no FilterTextForBBEditPreview entry point, the script's run handler will be called with the text. The script should return a unicode text result.

    • A Unix executable (the precompiled multimarkdown binary being a good example);

    • A Unix script, beginning with an appropriate #! line.

    Both Unix scripts and Unix executables will receive the document's contents as UTF-8 text on STDIN; they should write UTF-8 text to STDOUT, and the output will be previewed.

    If you wish to assign a keyboard equivalent for opening the Preview Filters menu, you can do so in the Menus & Shortcuts preferences (look under "Preview Windows").

    Live preview windows will remember your Preview Filter selection per-document. In addition, the preview filter will default to one named "DefaultFilter_<languagename>" in your Application Support/BBEdit/Preview Filters/ folder. Unlike default preview templates and CSS, the filename extension of the preview filter is not significant; so the following examples will all work:

    • (a Perl script)
    • DefaultFilter_Markdown.scpt (an AppleScript)
    • DefaultFilter_Markdown (a compiled executable)

    The default preview filter can also be a symlink or alias to a filter elsewhere.

  • In addition to a Preview Filters directory, BBEdit packages can now also contain Preview Templates and Preview CSS directories, within their Contents directory. Items here follow the same rules as for the global Preview Templates and Preview CSS folders in Application Support/BBEdit/, and will appear on the appropriate menus in a live preview window.

  • Tags file discovery has been enhanced, and no longer relies strictly on directory scanning. Tags files are discovered using Spotlight; a file whose name is tags or whose name ends in .tags or .ctags (see below) is eligible, and if it resides in the ancestor directory hierarchy of the document, its symbols will be available for code completion and syntax coloring. Since tags is a filename extension, you can have multiple tags files available for the same directory hierarchy, e.g.

    Mac OS X 10.7 SDK.tags
    Project Sources.tags

    BBEdit exports the UTI com.barebones.bbedit.ctags-data, which conforms to public.utf8-plain-text, for files whose extensions are tags and ctags. This UTI drives the Spotlight support.

    If you have disabled Spotlight on your local disk (or for the directory tree containing your source files) or if your Spotlight index is incomplete, BBEdit will discover tags files the old fashioned way, and the old limitations will apply (only files named tags will be discovered, and so you can have only one tags file at any level in the directory tree).

    NB: Due to bugs in the OS, this feature actually works as described only on 10.6.x, 10.7.x, and 10.8.{N > 1}.

  • The contextual menu for file lists in projects gets a "Save" command; "Close" and "Close Others" now work in the "Project" section of the file list in project windows.

  • There's a new grouping in the sources list for multi-file search/replace and text factory application: "Open Editing Windows". This collection includes any window which has one or more editing documents in it. If you want to constrain the operation to the documents that are already open in a particular window, this is the place to do it.

  • There's a new color setting for syntax coloring: "Variables". Some languages support this (PHP and Perl); most do not but the color information may be generated by language modules at their discretion.

  • Projects save to disk have a new item in the bar below the file list: it presents a menu containing "Site Settings", which brings up a sheet for configuring the project as a web site. The old "Sites" in the Setup panel are no longer supported.

  • Text windows get a scripting property: "display magnification". This is a float; 1.0 is normal display.

    set display magnification of window 1 to 2.0 -- displays text at 2x

    Note that the display magnification is independent of the font size setting.

  • There's a new switch for the bbedit tool: -m (long form --language). This allows you to specify a language name on the command line when piping data in to bbedit from a Unix tool. For example:

    some-process | bbedit -m bbedit --language Ruby some-process | bbedit -m bbedit -m JSON

    You may also use an Emacs mode name that maps to your designated language (this can easily be generated by converting the language name to lower case and replacing spaces with dashes):

    some-process | bbedit -m bbedit --language object-pascal some-process | bbedit -m bbedit -m json

    (Historical note: -l was already taken, which is why we didn't use it here. If it helps, you can use the mnemonic "-m is for *mode*".)

  • The popup menu next to the "href" attribute in the Markup panel (when editing anchors and certain other tags) now includes internal anchors for eligible destination files. Anchors in the document you're editing are available at the top level of the menu; anchors for other files listed on the menu are in a submenu attached to each file.

  • Clippings may be used in Find and Find Multiple windows. If this causes you heartache, you may disable the feature using this expert setting:

    defaults write com.barebones.bbedit ClippingsWorkInFindWindows -bool NO

  • When you use the right-arrow key to navigate over a closing delimiter (right paren/brace/bracket/curly quote), the opening delimiter will be briefly highlighted. If you wish to turn this off, there's an expert pref:

    defaults write com.barebones.bbedit FlashBalancePointsWhenNavigating -bool NO


  • Made some pretty significant changes to the way scripts and filters are installed and managed:

    1. The artificial separation between different types of scripts (Unix scripts, AppleScript scripts, text factories, Automator workflows) is gone.

    2. There are two fundamental types of runnable file: "text filters", which accept the selection range (or entire document, if no selection) as input, and which return text that replaces the selection range (or document); and "scripts", which do neither.

    3. The arrangement in the Application Support/BBEdit folder is as follows:

      • Scripts: contains executable Unix files, AppleScript files, text factories, and Automator workflows. These are run simply by loading the item and calling it directly, without providing any inputs. (Naturally, AppleScript scripts and Automator actions can query the application, and #! scripts have some information passed to argc and argv as usual.)

      • Text Filters: contains the same type of items as Scripts, but when chosen, the selected text (or front document contents, if there is no selection) is passed as a string to text factories, as a reference to a RunFromBBEdit entry point in AppleScripts, as text input to Automator workflows, and as a source to text factories. For Unix scripts, the selection is written to a UTF-8 temporary file, whose path is then passed in argv[1].

        If an AppleScript script does not have a RunFromBBEdit entry point, BBEdit will call its run handler, again passing a reference to the current selection range. AppleScript scripts and Automator workflows are expected to return a string which will replace the selection range; #! scripts and Unix executables should write to STDOUT, and the text processed by a text factory will replace the selection range.

      Thus, both folders can contain identical items, but how an item is invoked, and the effect that it has on the front document, will depend solely on which folder it lives in at the time of invocation.

    4. The menu arrangement is as follows: the Scripts menu (and palette) contains all eligible items from the Scripts folder. The "Unix Scripts" and "Unix Filters" items have been removed from the #! menu (and their palettes from the Window menu). The Text Factories menu has been removed. The "Apply Text Factory" commands on the Text menu are renamed to "Apply Text Filter", and are now at the top of the Text menu. The "Apply Text Filter" submenu shows all eligible items contained in the Text Filters folder.

  • When starting up, BBEdit 10 will copy items from your Unix Scripts, Unix Filters, and Text Factories folders into your Scripts and Text Filters folders, as appropriate. BBEdit leaves a cookie behind in its Application Support folder to indicate that this has been done.

  • The old modal Find dialog is gone.

  • The legacy (pre-8.7) file group format is no longer supported.

  • Removed the custom color menus and palettes. The system color picker interface is used everywhere.

  • The Super Get Info icon has been removed from the toolbar, and the "Open in Super Get Info" command has been removed from the View menu.

  • Removed support for importing of preferences and FTP bookmarks written by versions of BBEdit before 8.0.

  • Unix filters now operate as "pure" text filters: they take the selection as input (a path to a temporary file is passed as the first argument), and replace the selection with stdout. If anything is present on stderr, then the selection is not replaced, and the output is instead placed in the Unix Script Output window (as well as being parsed for errors). This was the default behavior before; it is the only behavior now.

  • The old "what to do with unknown file types" expert pref has been disconnected and is no longer supported. If a file's name matches an extension-to-language mapping in the Languages preferences, or if its name maps to something the system recognizes as text, then we'll treat it as a text file; otherwise we won't. This change primarily affects file filtering, as used during multi-file search and replace, folder comparison, disk browser and project lists, and various other places.

  • The Languages preferences have been reworked and re-imagined. Rather than presenting an overwhelming list of installed languages and filename extension mappings, per-language settings and extension mappings are now handled on a "customizing" basis.

    So, instead of having to root around for a language and then dig through its settings to manipulate them, and then figure out which ones should be different from factory settings, all you need to do is add a customization for that language, by using the "+" popup menu under the "Custom Language Preferences" list, adjust the settings in the sheet, and you're done.

    Similarly, if you find that a file name extension isn't being mapped to your desired language, just add it in the "Custom Extension Mappings" list. Custom mappings will always take precedence over built-in mappings if there's a conflict.

    The list of installed languages and versions no longer takes up space in the preferences window. as before, they're listed in the About box. In addition, the new "Installed Languages" button in the Languages preferences will display a list of installed languages and versions, as well as the default extension mappings for that language.

  • The Find Differences dialog box has been rewritten and modernized.

  • "Save Default Window" on the Window menu now shows the type name of the window whose defaults you are saving: "Save Default Project Window", "Save Default FTP Browser", etc.

  • The "Sleep" command is gone from the application menu. Instead, "Quit" behaves as "Sleep" used to. There is a new preference in the Application preferences, subordinate to "Reopen documents that were open at last quit". The new setting, "Restore unsaved documents", causes BBEdit to capture any unsaved document contents when you quit (including untitled documents) and restore them when it starts up. If you prefer the previous Quit behavior, turn this preference off.

  • The rules governing which windows contain new and opened documents are a little clearer now (applicable when MDI windows are in use):

    • When opening an existing document, BBEdit will look for a project document which contains the document's file. If there is one, the document will open into that project's window (which is brought to the front).

      If no eligible project is found, the document will open into the front MDI window (which will come to the front if it is not already there).

    • When making a new document using the command on the File menu, BBEdit will never create the document in a project document's window: it will use the front MDI window if available, or make a new window if necessary. If you wish to create a new document explicitly in a project, the "New Document..." command in the project window will create the file on disk for you and add it to the project.

  • The "Unix Scripting Tools" palette has been consigned to the dustbin of history.

  • The "Run..." command on the #! menu is now visible at all times, instead of being buried behind an alternate modifier.

  • Multi-file replace, and text factory application, can now be used to modify files inside of Zip archives.

  • It is now possible to edit and save documents opened from Zip files, not just view them. Edits are written back into the Zip archive.

  • The UI for creating and editing file filters has been completely rewritten.

  • Filename extensions are now hidden on the Scripts menu/palette as well as on the Text Filters menu/palette.

  • The "Arrange..." command on the Window menu has been replaced with a simple "Arrange", which cascades windows down and to the right, in customary fashion.

  • The "Get Info" command and its associated toolbar icon have been retired. (All of the relevant information is presented directly in the editing view itself, except for pagination, and if you care about that, you can run a print preview...)

  • Single-click line selection is now on by default.

  • The UI for the markup button palettes has been redesigned and rewritten.

  • The complement of markup tools palettes has been reduced; remaining are the main tool palette, the Utilities palette, and the Entities palette.

  • The Text Statistics status bar display now automatically toggles between selection-only and whole-document display: when there is a selection, it'll show status for the selection; when there isn't, for the whole document.

  • BBEdit will no longer warn you before closing an instaproject or a project window with open (non-dirty) documents. (The warning is unnecessary and just adds an extra step to the process.)

  • The "New HTML Document" dialog box has been rewritten and modernized.

  • The "Text Printing" settings have been removed from the Print dialog. This is to improve compatibility with current versions of Mac OS X, and to ensure compatibility with future versions of the OS. You can still modify the settings using the "Printing Options" command on the Edit menu.

  • The "Print Watermark" (or "rubber stamp") option has been removed; the system provides a facility which is actually more featureful, so the built-in feature is no longer required.

  • "Normalize Tag Case" has been removed, since what it did was always vaguely defined in terms of a setting that was not obvious. If you want upper case tags, use "Raise Tag Case"; otherwise use "Lower Tag Case".

  • Because Cmd-M and Cmd-Option-M are system standard keyboard equivalents (for Minimize Window and Minimize All Windows, respectively), the default keyboard assignments have been changed accordingly. The keyboard equivalent for "Edit Markup" is now Cmd-Control-M. (As always, you can edit this and other keyboard equivalents using the "Menus & Shortcuts" preferences.)

  • The discrete preference settings for controlling markup generation have been consigned to the dustbin of history. Current best practices are to generate markup in lower case and to always quote attribute values (even in cases where it might not strictly be necessary), and so that is the implemented behavior.

  • Drag-and-drop of files to create anchor and image tags no longer presents a UI; if desired, Edit Markup may be used after the fact.

  • All of the direct markup commands (on the Markup menu, and from the palettes) now go through the new Markup Builder panel, rather than the old dialogs.

  • Command-control-F is now Enter/Exit Full Screen Mode on 10.7.2 and later, so it has been removed as a default for the "Font" markup command.

  • The preference system's internals have been extensively reworked, and the Preferences window has been completely rewritten and reimagined. Many obsolete preferences, as well as settings never used in daily operation, have been removed from the GUI. The name space has been overhauled, so virtually every preference key has been renamed. Existing preferences are converted where appropriate. The conversion is non-destructive, so old settings are left in place (but will never change).

  • Safe saves are now off by default. The benefits are abstract, but because the system's implementation changes file permissions and breaks hard links, the downsides (when encountered) outweigh the (abstract) benefits.

  • The ponies learned that their saronite shoes were not RoHS compliant and had a huge carbon footprint. So, they've switched to Five Fingers and Birkenstocks. They've also been studying the post-apocalyptic arts, because fortune favors the prepared.

  • The "Text Files Only" filtering in project lists and disk browsers now looks inside of files if necessary, for improved filtering accuracy. This may be disabled (restoring the behavior of previous versions) with an expert preference:

    defaults write com.barebones.bbedit InspectTextFileContentsForListFiltering -bool NO

  • The "Find Definition" sheet now does partial matches.

  • JavaScript and ActionScript now have separate expert preferences to control the display of anonymous functions in the function popup.

    defaults write com.barebones.bbedit ShowAnonymousFunctions_JavaScript -bool yes defaults write com.barebones.bbedit ShowAnonymousFunctions_ActionScript -bool yes

  • Tools (and their man pages) are no longer copied to /usr/local/bin, but are instead symlinked out of the application to those locations. Thus, updating the application automatically updates the tools, once the symlinks are installed.

  • Shift-key at startup no longer suppresses Dreamweaver integration or the loading of #! menu content.

  • Saved window positions for "property" windows (in which there is only one in the application, such as the Find window, or any of the floating windows) are now keyed by display configuration, for the convenience of those using the application on laptops that spend part of their time connected to an external display.

  • Source control form windows (used for commit with cvs, svn, and p4) now remember their position.

  • The option dialogs for "Run" and "Run…" on the #! menu have been modernized.

  • Made the spelling panel accessory checkbox a little less unnaturally large.

  • Vertical scrollbars in list views are now hidden when they're not required.

  • Unix filters (run from the "Apply Text Filter" menu) now accept the selection on STDIN. This is a change from previous versions, in which BBEdit wrote a temporary file and passed it as argv[0]. If you have any Unix scripts in the "Text Filters" folder, you will need to modify them in order for them to continue working. On the other hand, this change will generally make Unix filters easier to write, and makes it possible to share Unix filters with text factories, because the latter has run their filters this way since forever.

  • Unix script output logs now live in ~/Library/Logs/BBEdit/, either in "Unix Script Output.log", or, in the case of script-file-specific log files, in ~/Library/Logs/BBEdit/Unix Script Output/{script name}.log.

  • "Hard Wrap" now does, essentially, what "Rewrap Quoted Text" used to (in fact, the two were virtually identical). So, the latter command is gone, and "Hard Wrap" brings up a sheet for performing a quoting-character-aware wrap. (If there are no quote-prefixed lines, then this behaves identically to the old Hard Wrap.) Note, also, that there is now only an option for wrapping to a specific character width.

  • The Markup Builder panel now provides additional options for choosing a file when editing URI attributes (such as href): a popup menu allows you to choose from files in the same directory as the front document, including submenus for folders (one level down). You can also easily get at recently used files, as indicated. The "Other..." command will open a file picker for choosing an arbitrary file.

  • The text view toolbar has been slimmed down and further simplified. The pencil has been consigned to the dustbin of history. The toolbar itself is now only one row of text, and displays the document's path (with the associated popup menu), as before. The "Last Saved" indicator has been moved into the status area at the bottom of the text view, and may be switched on and off globally, using the "Document save date" preference in the Appearance preferences.

  • "\n" is now a synonym for "\r" when searching and replacing, with or without Grep; use either when you wish to find or replace with a line break. Note that you should avoid considerations of what the actual bit pattern is; BBEdit uses a particular internal representation which is an implementation detail. If you want to search for or replace with a line break, use \r or \n and allow line break translation to do its thing; do not second-guess the system and assume a particular bit pattern.

    If for some reason you need the previous behavior, you may return to it with an expert preference:

    defaults write com.barebones.bbedit LegacySearchStringEscapeMapping -bool YES

  • Support for CVS has been removed; the "CVS" menu no longer exists. Note that you can continue to use BBEdit as a commit editor and diff helper for CVS, with the appropriate CVS configuration variables referring to the bbedit and bbdiff tools, respectively; this is left as an exercise for the reader.

  • "Convert to ASCII" is gone as a discrete menu command; its ability has been rolled into "Zap Gremlins". ("Replace with Code" will replace with the nearest ASCII equivalent.)

  • Added a new setting to the Keyboard preferences: "Allow Page Up and Page Down keys to move the insertion point". It's off by default, which is the standard Mac behavior. Refugees from other platforms may feel more comfortable if it's turned on; doing so allows the insertion point to remain in the same position relative to the top and bottom of the window (which entails changing its position in the text) when scrolling via Page Up or Page Down.

  • There's new iconography for the toolbar and navigation bar.

  • Added a padlock next to the document save date, to indicate the document lock state. This takes the place of the old pencil. (Side note: "If you don't, I'll poison your dinner" is a compelling argument for a feature request, but can typically only be used once.)

  • Shell worksheets get a new icon to indicate sudo mode.

  • There's a new preference in the Appearance preferences: "Document Lock State". This controls whether the padlock indicator is visible in the status area (next to the save date). When the padlock is visible, you can click on it to unlock (or lock) the document.

  • In the Multi-File Search window, you can now choose Zip archives (or any file that looks like a Zip, including things like EPUB) as the source for a multi-file search (or replace).

  • There are three new commands on the Edit menu: "Move Line Up", "Move Line Down", and "Delete Line". These are single-command (and thus single-keystroke) equivalents for editing operations that might otherwise require multiple gestures. The keyboard equivalents can be modified in the "Menus & Shortcuts" preferences as usual. NB: Control-up-arrow and Control-down-arrow previously were used for scrolling the document using they keyboard. If you wish to restore that behavior, clear the keyboard equivalents for Move Line Up and Move Line Down, or set them to something else.

  • Enhanced the detection used by "Open Counterpart" and the Counterparts navigation bar item to include all files whose file names begin with the base name of the active document's file. The Counterparts navigation bar item now drops a menu with all of the available counterparts. There's a new keyboard equivalent in the "Navigation Bar" section of the Menus & Shortcuts prefs, so that you can use the keyboard to open the Counterparts menu, if desired.

  • The Find Differences results windows no longer display the pencil next to the new and old file names.

  • In addition to toggling Soft Wrap, the Text Display menu lets you change the wrap mode. Those options are now also in the toolbar's Text Options menu.

  • The legacy AutoAssignCommandKeysToWindows expert preference (which was deprecated in 10.0 and actually never documented) has been removed, along with all of the machinery that used it.

  • The search logic in "Open Counterpart" has been improved to cover cases that weren't previously served by strict project-searching logic. Consider this arrangement of files and folders:


    When in either file, "Open Counterpart" will now search the siblings of the file's parent for eligible counterparts. By default, the folders will only be searched if they match one of the following names (including wildcards): inc*, source, src, *priv*. If you wish to add additional qualifying names, you may do so by setting the CounterpartSiblingSearchNames expert preference with a comma-delimited list of folder name patterns:

    defaults write com.barebones.bbedit CounterpartSiblingSearchNames -string "foo*, bar, *mumble*, wumpus"

    Any whitespace surrounding names is stripped.

  • The items listed in the "Menus & Shortcuts" preference pane get a subtle placeholder when no keyboard equivalent is assigned.

  • In addition to showing counterparts, the "Counterparts" navigation bar item now shows files that are in the same directory as the active document (as long as it exists on disk).

  • The "Project" item grouping in project windows can now be collapsed. The "Currently Open Documents" list will take up the slack.

  • More improvements to Open File by Name:

    • if you type in an unqualified partial path, e.g. sys/errno.h, BBEdit will check the path components and only display files whose immediate ancestry matches what you entered. In this example, it would list /usr/include/sys/errno.h but not /usr/include/errno.h.

    • If you type in an absolute path, or a home-directory-relative path, e.g. /usr/include/errno.h or ~/.bash_profile, BBEdit will now show the file if it exists at that location.

  • When creating new markup (as opposed to editing existing elements/attributes), the markup panel will now remember the attributes that you used to create a given element. The memory is keyed by the element name, so attributes are remembered separately for the different elements that you use.

  • If there are no other alternatives, Open File by Name will figure out whether the front document is contained within a configured web site. If so, the site's root will be included in the file search.

  • BBEdit no longer promises or supplies Mac Roman text to the clipboard, nor looks for it. Since most Mac OS X applications now supply Unicode or UTF-8, this should have no visible effect.

  • There has been extensive internal rework, to remove cruft and pave the way for future improvements.

  • When considering dropped files for insertion or linking, the application will now inspect their contents in cases in which the file metadata doesn't indicate that it's a text file.

  • The Unix Script Output log file is now stored as UTF-8 with no BOM. (The on-disk encoding of this file is an implementation detail that you should not rely on.)

  • There's now a kill switch for default filename extensions:

    defaults write com.barebones.{bbedit,textwrangler} EnableDefaultFilenameExtensions -bool NO

    This will prevent the application from adding the default name extension when saving a new file (including .txt for files with no language).

  • Results exported as text now include the full path to the file(s) in question, relative to the home directory if possible.

  • When using "Open Selection" or choosing an include file from the Includes menu in the navigation bar, BBEdit will use the same logic as Open File by Name to locate the desired file. Open Selection will no longer open the "Open File by Name" window (which used to require an extra step to open the desired file), unless there's more than one match found for the specified file name.

  • Changed the factory default setting for FixedWidthFontSmoothingThreshold to 8pt, so that Monaco 9 looks reasonable when antialiased (especially on retina displays).

  • The appearance of the file lists in disk browsers and project windows has been updated.

  • Made two behavior changes to Unix tool discovery: first, if the tool's override path is set to /dev/null, BBEdit will pretend that the tool doesn't exist at all, effectively disabling any features that depend on the tool. Second, if the override preference exists and is an invalid path, BBEdit will give up immediately rather than attempting to locate the tool in your PATH or elsewhere.

  • When doing an "Open Selection" on a full path ("/path/to/something"), home-relative path ("~/path/to/something") or URL, the indicated item is now opened immediately if found, rather than requiring a trip through the Open File by Name window.

  • The "modified" property of a document is now mutable while the document is being created. This allows constructions such as:

    make text document with properties {contents:t, modified:false}

  • When running on 10.8 and later, BBEdit now uses the system-provided Notification Center for completion of certain operations, unless Growl is installed and running, in which case it will use Growl as before.

  • When entering full screen mode, the application figures out whether the window width should be increased to take up the full screen width, or not, based on the width of the window relative to the width of the screen that it's on. The threshold at which the window is made to take up the entire screen width can be set thus:

    defaults write com.barebones.bbedit FullScreenWidthThreshold -float 0.65

    The threshold is a percentage, so (in the example above), if the window is 65% or more of the width of the screen that it's on, it will take up the full width of the screen when entering full screen mode.

    Note that when setting the threshold, you must set it as a decimal number, using -float <some number between 0 and 1>.

  • Counterpart discovery (for "Open Counterpart" and the Counterparts navigation bar item) can now use an open project document to locate eligible files.

  • The single-file Replace All sheet is now off by default. The same expert pref is still available if you like forced interruptions.

  • If the xcrun tool is available, BBEdit now consults with it when looking for Unix helper tools (e.g. svn) in the absence of an explicit expert override.

  • If a Worksheet takes more than 0.5 seconds to complete its task, it will post a notification when it returns to idle. The minimum time to wait may be controlled via expert preference:

    defaults write com.barebones.bbedit WorksheetNotificationMinimumRunTime -float [delay in seconds]

    Setting this to 0 will disable the notification altogether.

  • Control-n and Control-p are synonyms for previous/next when navigating the list of results in Open File by Name windows.

  • Control-k is a synonym for Command-Delete (a.k.a. clear field) in Live Search.

  • In the Open File By Name window, holding down Option while clicking "Open" (or pressing "Return") will ask LaunchServices to open the selected items.

  • App state restoration has an indeterminate progress dialog, hopefully hinting that "No, we're not hung; we're busy".

  • The "current process" indicator in shell worksheets now has a spinny thing so that you know something's running, and a clicky thing if you want to stop the running thing indicated by the spinny thing.

  • When running a shell script from the shebang menu, additional arguments are passed along to the command, so things like:

    #!/usr/bin/env python --version

    will return

    Python 2.7.3