TextWrangler 3.0 Release Notes

This page documents all the new features, enhancements and visible changes included in the TextWrangler release.

For information about the changes included in any specific version of TextWrangler, please see the release notes archive.

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

Requirements

TextWrangler 3 requires Mac OS X 10.4 or later (10.4.11, 10.5.8, 10.6.7 or later recommended).

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

Additions

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

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

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

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

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

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

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

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

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

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

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

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

    • Better handles interpretive strings. The following:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • The Application menu sports a new item: Provide TextWrangler Feedback. This command will tell your web browser to open our support contact form.

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

  • Changes to split views in results and disk browsers:

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

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

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

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

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

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

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

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

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

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

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

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

  • New Find windows!

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

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

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

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

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

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

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

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

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

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

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

        The factory defaults for these keys are as follows:

        Case sensitive Control-shift-N
        Entire word Control-Shift-E
        Grep Control-Shift-G
        Selected text only Control-Shift-S
        Wrap around Control-Shift-W
        Open search history Control-Shift-H (new)
        Open saved patterns Control-Shift-P (new)

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

      • Return/Enter starts the search;

      • Escape dismisses the window;

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

      • Space toggles the selected items;

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

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

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

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

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

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

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

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

  • Integrated Jim's .ini language module.

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

    Example: // FIXME This little bug could erase the intertubes.

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

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

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

    Both commands are only available for text documents.

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

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

  • Python function decorator names are now detected and colored.

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

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

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

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

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

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

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

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

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

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

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

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

    Yeah, you heard that right.

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

  • The internal FTP implementation has been rewritten to improve performance and reliability. Users with dual (or more) core machines may notice additional performance benefits.

    The "Passive" setting for FTP is no longer used. When transferring, TextWrangler will first attempt a passive connection; if the server does not support passive transfers, BBEdit will then attempt a non-passive (PORT) connection. Thus, the "Passive" setting is gone from the FTP preferences, FTP browser, Save to FTP dialog, and the scripting terminology for FTP commands.

    There's now an expert preference for disabling passive FTP, in order to deal with hosts that misbehave with given the PASV command.

    Passive FTP can be disabled per host, per domain, or globally:

    FTP:DisablePassiveFTP:foobar.example.com - only for "foobar.example.com" FTP:DisablePassiveFTP:example.com - only for servers in "example.com" FTP:DisablePassiveFTP - global preference

    Our recommendation is that you disable per host in preference to globally or per-domain, but at the end of the day, do whatever works. :-)

  • The file filtering interface supports a new term: "File Path". This is a simple string match against a given file's full path.

  • The Text Files preference pane carries a new option: "Trim trailing whitespace". If this preference is enabled, TextWrangler will trim all trailing non-vertical whitespace from the file before writing it out.

  • The line bar is now drawn in the system font, anti-aliased.

  • The ASCII floater uses the "standard" names for NUL, BEL, etc. for characters below space (0x20)

  • Language modules may now be installed by double-clicking them (or by drag-and-drop to the application). Plug-ins and language modules both offer an "Install and Relaunch" option.

  • There's now an expert preference for controlling the use of ssh compression when using SFTP, in order to deal with hosts that can't handle ssh compression.

    SSH compression can be disabled per host, per domain, or globally:

    FTP:EnableSSHCompression:foobar.example.com - only for "foobar.example.com" FTP:EnableSSHCompression:example.com - only for servers in "example.com" FTP:EnableSSHCompression - global preference

    Our recommendation is that you disable per host in preference to globally or per-domain.

    (Note that ssh compression is on by default.)

  • There's a new command on the View menu: "Go Here in Terminal". It's enabled when the active document exists on disk; choosing it will open a Terminal window with the current working directory set to the document's parent directory.

  • The "twdiff" command-line tool now supports an additional command form:

    twdiff [options] file /path/to/some/folder

    If /path/to/some/folder/file`` exists, thenfilewill be compared against/path/to/some/folder/file`. Otherwise, an error is reported.

  • Language modules can now specify a default value for the "Reference URL Template" language-specific preference. This is specified in the plist as follows:

    <key>BBLMReferenceSearchURLTemplate</key> <string>http://www.example.com/foobar.cgi?__SYMBOLNAME__</string>

  • There's a new color setting in the Text Colors preference: "Numeric Constants". This can also be adjusted on a per-language basis in the appropriate language's settings (in the "Languages" preferences).

  • Next to the file path display in the editing view toolbar, there is a little popup menu. Click it to get a menu showing the file's path, and choose an item from the menu to reveal it in the Finder.

  • The Go To Line sheet can take relative input:

    Entering a value prefixed with +/- will add the value to the current line number. For example, with line 100 selected, "+75" will move to line 175; "-75" will go to line 25. An unsigned number will move to the specified line number, as before.

  • There's a new setting in the Windows preferences: "Cascade new windows". When turned ON (the factory default), new windows (or documents with no saved state) are cascaded down-and-right, beginning with the placement and size determined by "Save Default Window" (if such exists). When turned OFF, new windows (or documents without saved state) are placed in the same location every time.

  • Disk browsers get an "Open with Finder" command on the contextual menu and action (gear) menu. Choosing this command asks the system to open the selected items, which in turn may open them in an application other than TextWrangler.

  • Added "Go Here in Disk Browser" to the View menu and to the contextual and action menus for disk browsers. Choosing it will open a disk browser on the selected item (if it's a folder) or selected item's directory (if it's a document or a file in a disk browser).

  • Two new commands on the contextual menu in text views: "Find all .... in Selection" and "Replace all ... with ... in Selection". These commands use the current search state (same as what drives the commands on the Search menu). "Find All..." will create a results window. If the replace string is empty, then "Replace all" will change to "Delete all" to reflect the behavior.

  • There's a new command on the Search menu, which appears right below the "Multi-File Search" command: "Search in ...".

    If a disk browser is the front window, then this command's name reflects the name of the directory that you're currently browsing in the disk browser.

    Choosing this command will open the Multi-File Search window with the disk browser's current directory selected as the source for the multi-file search. Make any desired adjustments to the search settings and then start the search (or just hit Return/Enter and you're off and running).

    If the Multi-File Search window is in front, the command will target the frontmost (Z-order) disk browser.

    The same command is available on the action ('gear') menu in disk browsers as well.

  • Added a feature to the language module interface for giving the module control over resolution of include file references.

    If the language module has

    <key>BBLMCanResolveIncludeFiles</key>
    <true />

    in its plist, then TextWrangler will send kBBLMResolveIncludeFileMessage for every include chosen off the includes menu. The param block will include a CFStringRef with the name, a CFURLRef to the document on disk (which may be NULL) and a place for you to put a CFURLRef when returning.

    If the module returns NULL and noErr, then TextWrangler will assume that the module declined to do anything with the string and will look for the file as usual.

    If the module returns a non-NULL URL, TextWrangler will resolve it, so the module can make a file://, http://, FTP or SFTP URL and the right thing will happen. If the module returns something other than noErr, TextWrangler will not attempt anything else with the include and will report the error.

  • The Menus preferences now has a group of commands so that you can assign keyboard equivalents to operations in FTP/SFTP browsers, if desired.

  • New option in the Python language settings (Preferences -> Languages and then double-click on the Python item in the languages list): "Scan HTML strings for functions". When turned on (the default), items in HTML code in triple-quoted strings are shown on the function menu (as though the code existed in a freestanding HTML document); when turned off, they don't.

  • There is an option to suppress callouts embedded in comments from the function menu. See Preferences -> Text Status Display.

  • There's a new setting in the "Editing" tab for language-specific preferences (Preferences -> Languages): "Tab width". Edit the value here to set a language-specific value for the default tab width.

  • If the list of a results browser is modified (by deleting items from the list), a confirmation is required to close the results window.

  • Disk browsers can now explore tarballs (.tar, .tar.gz, .tgz files). When an eligible file is in the listing, it will have a disclosure triangle next to it. Twist it open to reveal the files and directories within. As with other items displayed in disk browser listings, you can view files in the editor view, or double-click them to open in a separate window for editing.

  • Added an additional Apple Event parameter for programmatically determining a "fallback" encoding, in cases where the file's encoding could not be automatically determined:

    #define keyFallbackEncoding 'RdFB' // typeLongInteger, same semantics as keyReadEncodingValue

  • The various "reveal in Finder" operations (explicit command, or click on the document's icon in an editing view toolbar) will now ask PathFinder to do the work, if it is running.

  • Added support for using 'space' (modified by at least the command or control key) as a keyboard shortcut.

  • Auto-save now works for all document classes for which auto-save is approprate, not just text documents.

  • If writing a backup file requires elevated privileges, TextWrangler can help you out.

  • Added support for Python 3 to the #! -> Check Syntax command.

Changes

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Ponies are a feature exclusive to BBEdit 9. However, TextWrangler now offers full CHOCK LOCK support.

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

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

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

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

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

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

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

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

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

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

    • All TextWrangler Documents

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

    • Text Files Only

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

    • Everything

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

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

    • Text Files Only
    • Invisible Items

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

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

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

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

  • Moved File Filters to the main find dialog, as it was in days of yore.

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

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

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

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

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

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

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

  • The window stacking preference has been retired.

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

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

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

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

  • Updated the "Clear Markers" dialog.

  • The "Save to FTP/SFTP Server" dialog has been rewritten and modernized.

  • Revamped FTP/SFTP browser windows. The changes here largely parallel the ones made for the Save to FTP/SFTP Server dialog box: freshened look and feel, sortable file list.

  • The default line break description for CR is "Classic Mac" to attempt to discourage people from choosing it inappropriately. Both the preference pane and the Save dialog now use the same wording.

  • Made a change to the new FTP save dialog, so that it will only automatically connect when doing a "Save to FTP/SFTP Server" or "Save a Copy to FTP/SFTP Server" on a document previously opened via FTP/SFTP. Otherwise, the Connect sheet will populate and appear, rather than always connecting automatically to some possibly arbitrary location.

  • The internal mechanics and UI presentation for recent items have been overhauled. The "Recent Files & Favorites" and "Recent Folders & Favorites" folders in ~/Library/Preferences/com.barebones.textwrangler.PreferenceData/ are no longer used and may be deleted.

    The "Open Recent" menu now shows all recently opened documents, grouped by document type, and sorted by name within each group. Folders are now included, so you can open a disk browser on a recently used folder by choosing it from this menu (something which was not possible before). Text documents are grouped before other types. The first grouping in the menu consists of the six most recently used items (of all types), sorted in descending order (most recently used first), for quick access.

    The "Clear Menu" item at the end of the menu has been changed to "Clear History", to more accurately reflect its function: if you choose it, ALL recent items will be cleared. Note that since recent folders are available as sources for multi-file search/replace and Text Factory operation, clearing the history will remove the folders from those operations as well.

    The application preference controlling how many recent items TextWrangler will remember applies to each type of item. So, if it's set to 15, TextWrangler will remember 15 text documents, 15 folders, 15 images, 15 movies, and so on. If you want finer control, you can construct an expert pref using the name of the document type as it appears in the menu (and if that name contains spaces, you'll need to quote it). So, for example, if you only wanted to remember the five most recent projects:

    # remember only the five most recent images defaults write com.barebones.textwrangler NSRecentDocumentsLimit:Images -int 5

    Or the ten most recent folders:

    # remember only the ten most recent folders defaults write com.barebones.textwrangler NSRecentDocumentsLimit:Folders -int 10

    Or only the most recent folder

    # remember only the most recent worksheet defaults write com.barebones.textwrangler "NSRecentDocumentsLimit:Folders" -int 1

    If you don't want to remember any recent documents of a particular type (they won't appear in the menu, either), you can set its limit to zero:

    # don't remember any images or movies defaults write com.barebones.textwrangler NSRecentDocumentsLimit:Images -int 0 defaults write com.barebones.textwrangler NSRecentDocumentsLimit:Movies -int 0

    Note that when setting the recent items limit, you MUST set it as an integer, using "-int <some number>".

  • The popup menus in the Find Differences dialog have been retooled, and now present currently open items and recent items on the same menu.

  • The status bar in editing views is now below the horizontal scrollbar.

  • The following text encodings are no longer presented as options in the "If file's encoding can't be guessed, use" popup menu in the Text Encodings preferences, because our best guess has already eliminated them as possibilities: UTF-8, UTF-8 (no BOM), UTF-16-BE, and UTF-16-LE.

  • Made some changes so that documents that were opened directly (versus auto-reopen at startup) are added to the Open Recent list when they are saved or closed.

  • The default value for "chdir to Script's folder" when running a #! script is now True. The state can be changed from the "Run..." or "Run File..." dialogs and the change will be persistent.

  • Changed the way TextWrangler searches for unix executables. This should reduce/eliminate the instances of an unexpected version of a binary being used when someone has installed a custom version of python/etc.

  • When "Selected Text Only" is turned on, only "Find All" and "Replace All" are enabled, to reinforce the reminder that you can only batch find when searching in the selection.

  • Contextual menu items for searching in text views are now turned on by default, in order to expose the new commands. If you wish, you may turn these off in Preferences -> Menus.

  • The "Search" commands on the contextual menu now use the same nomenclature as their counterparts in the menu bar.