TextWrangler 2.3 Release Notes

This page documents all feature enhancements and bug fixes included in TextWrangler 2.3.

For details on changes made in previous versions, please see the release notes archive.

For complete information on TextWrangler’s features, please refer to the included PDF user manual, which you can access by choosing “User Manual” from the Help menu.


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

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


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

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

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

<key>BBLMCanSpellCheckCodeRuns</key> <true/>


Enter Search String → Use Selection for Find Enter Search Pattern → Use Selection for Find (grep) Enter Replace String → Use Selection for Replace Enter Replace Pattern → Use Selection for Replace (grep)


Important: To restore normal operation, you may need to use the “Reset All” button in the Languages preferences to reload the factory default suffix mappings. This will discard any customizations you have made.

\def\be{\begin{equation}}p. without TextWrangler seeing that line as the start of an equation.

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

Fixed a bug in the java module that caused items to have the wrong names in the function popup when the items were modified with an Annotation, and that annotation included parenthetical arguments. For example, the following method named Foo:

Tatr (bird=1) public void Foo() { return; } ... would have been named "Tatr" in the function popup, instead of “Foo”.

In the following example, ‘foo’ will now show in the popup:

var foo = Object.extend( new bar.bat(), { … } )

Example: var foo = (function() { … })();

Also, the recognition of Prototype-style Object.extend now works with functions as the second argument to extend(), even if the function is wrapped in parentheses. (Thinking we should rewrite TextWrangler in JavaScript.)

This improves the user interaction where you open a recent item, or handle a get url event for an sftp url: after prompting for the password once, subsequent reopens will use the keychain, which is the identicial user experience to ftp reopens, as well as the sftp/ftp browser.

This timeout is adjustable through the secret preference:

defaults write com.barebones.textwrangler FTP:SFTPConnectionTimeout 20p. where the timeout is in seconds.