TextWrangler Changelog

What's new in TextWrangler 5.5.2 Build 397016

Sep 20, 2016
  • Additions:
  • On the "Text Display" submenu of the View menu, there are three new commands: "Zoom In", "Zoom Out", and "Actual Size". Use these to change the magnification of the text in editing views. For convenience you can assign keyboard equivalents to these commands in the "Menus & Shortcuts" preferences.
  • Changes:
  • The "List Display Font" setting in the Appearance preferences has been replaced with a slider to set the font size. Lists in the application all use the system font. Most will use the specified size, except in specific cases where circumstance requires the use of a fixed font size.
  • Added Command-K and Command-R as keyboard equivalents for "Check Syntax" and "Run", respectively.
  • Differences that have been applied are now crossed out in the Differences window list, in order to avoid janky font italicizing effects on some OS versions.
  • When using "Check Syntax" or "Run" on an unsaved or untitled document, the application will now write out a temporary copy of the document. In the case of untitled documents, the temporary copy will be in the system-designated temporary items location, which is arbitrary but generally not anywhere near $HOME.
  • Fixes:
  • Fixed a case in which changes made by a documentDidSave attachment script would trigger a subsequent warning about the document having unsaved changes.
  • Fixed a pair of bugs that conspired to prevent scratchpad documents (the Scratchpad and Unix Worksheet) from correctly remembering and restoring their state across open/close cycles.
  • Fixed a crash which would occur when changing a language-specific color scheme setting to "Application Defaults".
  • The "BBEdit Light" and "BBEdit Classic" color schemes no longer include explicit highlight colors, thus allowing the system highlight color selection to apply.
  • Fixed bug in which the color used for highlighting selected items in lists wouldn't always track changes to the highlight color setting in the General system preferences.
  • Fixed a crash which would occur on OS X 10.12 when opening the Preferences window more than once during a run of the application. (This addresses Radar 27293621.)
  • Fixed bug in which using up-arrow and down-arrow while in the Open File by Name window's search box would change the selection in the results list, without bringing it into view.
  • Worked around OS behavior on 10.11 in which the search box in the Open File by Name window would lose keyboard focus and not get it back when it should have.
  • Fixed bug in which changing the "Document navigation" setting in the Appearance preferences didn't take effect until you created a new window or restarted the application.
  • Fixed bug in which the file info panel for remote documents (opened via built-in FTP/SFTP or a third-party file transfer client) would show file information for the backing cache file, rather than hiding the Info and Permissions tabs as was intended.
  • The "Copy Path" commands on the Edit menu now behave reasonably for documents opened from remote sources via the built-in FTP/SFTP support as well as by external file-transfer clients.
  • Fixed a bug in which a -37 error would be reported when trying to save a new document with a name containing certain characters.
  • Fixed bug in which keywords matched by the "Keyword Pattern" in a codeless language module were colored as comments rather than as keywords.
  • Fixed bug in which "Open Counterpart" and the Counterparts menu didn't find eligible files in the absence of data from the Open File by Name cache.
  • Fixed bug in which filenames whose extensions ended with a decimal digit would not match a custom language mapping for that extension.
  • Made a change to resolve an SSL connection failure when attempting "Check for Updates" on macOS Sierra.
  • Fixed a layout goof in the Keyboard preferences on pre-10.11 OS versions.
  • Fixed a bug in progress reporting in which the progress dialog would occasionally be blank, except for the progress bar and Cancel button.
  • Added additional diagnostic logging to help diagnose cases in which Unix tool execution fails unexpectedly.
  • TeX comments no longer interfere with Balance operations.
  • When using the "Check Syntax" or "Run" commands for a supported language, the command path in the #! line is now honored in preference to the language module's built-in command. Any specific arguments for debugging (e.g. -d for Perl) may be added as needed, and if so will be added after any arguments specified on the #! line.
  • Updated the list of Perl keywords, and split Perl predefined functions into a separate list so that they're colored as predefined names, and not as language keywords.
  • When using the "Check Syntax" or "Run" commands for a supported language, the command path in the #! line is now honored in preference to the language module's built-in command. Any specific arguments for debugging (e.g. -d for Perl) may be added as needed, and if so will be added after any arguments specified on the #! line.
  • Fixed cosmetic bug in which items in the recently used search strings popup (in the Find and Multi-File Search windows) had backslashes escaped.
  • Fixed bug in which the general-purpose "Unix Script Output" log would be nested one folder deeper in ~/Library/Logs/BBEdit/ than it should have been.
  • Fixed a crash which would occur when using a property specifier as the source for a scripted multi-file search/replace operation.
  • Text output from Unix scripts and filters is now normalized, so that any carriage return (ASCII 13) characters are converted to the internal representation, rather than appearing as gremlins.
  • Fixed drawing glitch which would occur when showing or hiding the Navigation Bar.
  • Script execution from the "Run" command now displays progress in situations where it didn't before.
  • When looking for installed Unix tools, the application will now enforce the restriction that any binary executables actually contain code that is runnable on the current CPU architecture. This fixes problems on systems that have obsolete PowerPC code installed in paths used by the application to find executables.
  • Removed vestigial entry from the results alert for the "Install Command-Line Tools" operation.
  • Fixed bug in which Markdown syntax coloring would become inconsistent during certain edits in text that was not part of a list or quoted block.
  • Fixed incorrect coloring of Markdown inline code while typing an unterminated code run at the end of a document.
  • Fixed drawing glitch which would occur in the list header of disk browser windows when resizing the sidebar required a text layout change.
  • Added support for the "squished heredoc" syntax introduced in Ruby 2.3.
  • Removed the factory default keyboard equivalent for "Print All", because it's a little too close to the factory default equivalent for "Previous Document".
  • Made a change to improve behavior when receiving text dragged from applications which only provide byte-swapped UTF-16 (I'm looking at *you*, Messages.app).
  • Fixed drawing glitches which would occur when resizing the sidebar in Differences windows.
  • Fixed bug in which the size of the differences list in Differences windows was not maintained correctly when reshaping the window (and sometimes it would disappear altogether).
  • When creating a new document from stationery, and the stationery file has a name extension that maps to a known language, the new document's language will be set to that language. For example, a new document created from a stationery file named "foo.tex" will have a language of TeX, and a document created from a stationery file named "bar.mm" will have a language of Objective-C++.
  • Fixed bug in which the application would crash while opening the Multi-File Search window in cases where a previously selected text document had had its backing file deleted.
  • "Remove Line Breaks" no longer causes a visible "jump" to the beginning of the document in the view being processed.
  • Fixed bug in which using the Text Options popover would destabilize the application.
  • The Terminal command file generated by "Run in Terminal" now contains logic to delete itself as well as the temporary copy created when running an unsaved document (if applicable) after execution is complete.
  • Fixed bug in which literal string matching ("is", "is not") in file filters was case sensitive.
  • Made changes to improve usability with SFTP servers that implement obsolete versions of the protocol (in particular, CoreFTP on Windows).
  • Fixed a crash which would occur when spawning shell subtasks on macOS 10.12.
  • If a Differences window has exactly one unsaved document displayed and focus is in the differences list, the "Save" and "Revert" commands will now operate on that document, rather than doing nothing.
  • Fixed various memory leaks.
  • When running on OS X 10.10 or later and "Increase contrast" is turned on in the system Accessibility preferences, text for UI elements in editing windows is now drawn darker, as are dividing lines between some UI elements.
  • Fixed bug in which emacs mode lines which specified unrecognized modes would set a document's language to "None", even when the document's filename extension correctly indicated the language.
  • Made a change to Open File by Name searching so that exact matches for the entered file name are found, even in very large search spaces, rather than being lost due to restrictions on the maximum number of search results.
  • When a document opens in a disk browser or results list window as a result of clicking on an item in the sidebar (or results list, as appropriate), the text view no longer draws as though it has keyboard focus, since it doesn't.
  • When running on macOS 10.12, our additions to the spelling panel are suppressed in order to work around a bug in which the OS lays out the panel incorrectly. (Radar 28263496.)
  • Fixed crashes and other misbehavior which would occur when switching between a color scheme and customized settings.
  • Worked around a bug in macOS 10.12 which would cause strange behavior when switching color schemes or changing individual color settings in the "Text Colors" preferences.

New in TextWrangler 5.5.1 Build 3944 (Jul 28, 2016)

  • This update address a display issue in the Preferences window.

New in TextWrangler 5.5 Build 3942 (Jul 26, 2016)

  • ADDITIONS:
  • There's a new settings group in the Appearance preferences: "Sidebar". The controls here determine the default behavior of the files sidebar in editing, project, and Differences windows.
  • Note: Using "Save Default Text Window" or "Save Default Differences Window" sets the default visibility for the sidebar in windows of each respective type; this always overrides the preference.
  • There is a new folder-comparison option in the Find Differences dialog box: "Only compare items in common". When you turn it on, TextWrangler will only list items in the results that exist in both of the folders being compared. This option is also available to the scripting interface.
  • There is a new setting in the Text Colors preferences: "Differences". This color setting determines how differences are highlighted in editing views when you select them in a Differences window. (The color for differences within a line is derived from this, by darkening or lightening as needed.) If a custom color scheme does not include a Differences color, TextWrangler will use a dark gray or light gray (depending on the scheme's background color) instead.
  • Synchro Scrolling is now enabled (and on by default) for Differences windows: when turned on, scrolling either text view in the window will scroll the other one. Synchro Scrolling can be turned off for Differences windows; and if you would like it to be off for all new Differences windows, turn it off and then choose "Save Default Differences Window" from the Window menu.
  • Things that are highlighted in the text at various times (matches for selected text, Live Search results, spelling errors, and diffs) are now marked in the view's vertical scroll bar. The tick marks indicating matches for selected text are off by default, but may be turned on in the Editing preferences, if desired.
  • The GUI setting for extra space in text views, which was removed in 10.0, has been restored to the Editing preferences.
  • Did you know that you could set TextWrangler up to use the Escape key to trigger completions? That's OK, nobody else did either. There's now a setting in the Keyboard preferences to enable this. Note that it works at cross purposes with both Emacs emulation and using the Escape key to exit full screen mode; that is, if you turn on Escape-key completion triggering, the Escape key will only work to trigger a completion, and will not function as either the Emacs meta key nor will it exit full-screen mode.
  • There is a new preference in the Keyboard preferences, subordinate to Emacs emulation: "Enable meta sequences". This is off by default, so that the Escape key is not intercepted and can be used to exit full screen mode when running on OS X 10.10 or later.
  • To restore the previous Emacs emulation behavior (in which command sequences beginning with a press of Escape can be used), turn this preference on, at the cost of not being able to use the Escape key to exit full screen mode.
  • Added control to the Editing preferences so that instances of the selected text may be highlighted if desired, rather than underlined.
  • The FTP/SFTP connection panel now has a Path field, so you can see the directory that will be set once the connection is completed.
  • The FTP/SFTP connection sheet now has an explicit field for specifying the port to use, if you want to connect to an alternate server port.
  • The "Insert Folder Listing" command now provides options to control whether the generated listing is hierarchical (the original style), or flat (which lists the full path of every item). The "Include hidden items" option is back after a long absence, as well. These settings are saved, and will apply when dragging a folder in to an editing view as well.
  • When piping data into the edit tool, you can now add a line number specifier, and the and the insertion point will be placed at the start of the indicated line in the resulting document. For example: ls -la | edit +5.
  • Added a new command to the Edit menu: Start Speaking. This command will speak the selected text in the document; if there is no selection range it will speak the entire document. If the document is empty, this command is disabled. When speaking is in progress, this command reads "Stop Speaking" and will stop the in-progress speech.
  • Added new command to the Edit menu: "Paste & Match Indentation". When pasting text, this command will attempt to indent it to the same point as the line on which you're pasting (or if that line is empty, the most recent non-empty line). The factory default for this command is Cmd-Opt-Shift-V. You can change the keyboard equivalent using the Menus & Shortcuts preferences.
  • The file info panel (used for text statistics and the Document Status navigation bar item) gets a new "location" field showing the URL to the file, and "Copy" buttons for the full path and the location.
  • Clicking on the cursor position display in the status bar now opens a popover that you can use to go to another line. (The popover stays up until you click outside of it or press the Escape key, allowing you to browse the file by line number.)
  • Added "New Text Window" to the application dock menu. This is equivalent to the "New Text Window" command.
  • By default, the Open panel implements the standard system behavior of displaying the same folder that was viewed the last time you used the Open command. If you wish, you may instead have the Open panel display the directory containing the active document (or some other location apposite to the front window): defaults write com.barebones.textwrangler OpenPanelShowsFrontDocumentDirectory -bool YES. If no documents are open and a suitable location could not otherwise be determined, the Open panel will show you the last-used directory.
  • Added x-show-tab-stops as an application-specific EditorConfig key. (Answer for @pborenstein: "not too hard.")
  • Added a new command to the Lines submenu on the Edit menu: "Duplicate". This will duplicate the lines which intersect the current selection range.
  • Added Toothpaste as a factory-supplied color scheme. Toothpaste was designed by Cat Noone and is included with her kind permission.
  • Added credit for Toothpaste to the About box.
  • "Find Differences" gets two new options in the dialog box: "Ignore blank lines" and an "All" option in the "Ignore spaces" group. These operate as you might imagine: "Ignore blank lines" skips differences that consist entirely of blank lines, and turning on "All" causes all whitespace to be ignored during comparison.
  • The difference window AppleScript class now has a compareoptions property. You can use this to query or manipulate the options that are applied when comparing files in that window. Changes to the options will take effect immediately.
  • The Editing preferences have been rearranged slightly; there is a new setting to control whether spelling errors appear as tick marks in the scroll bar, and it is collected with the previous setting that controls whether matches for the selected text appear as tick marks in the scroll bar.
  • Added support for the C binary notation to the C-family language syntax coloring.
  • Added support for Github-style fenced codeblocks to the Markdown module. At this point, we simply recognize them as a codeblock for purposes of code folding and syntax coloring. No additional syntax coloring is done in the language of the fenced code.
  • Updated the internal Markdown previewing script to convert github-style fenced codeblocks into Markdown's traditional code block output.
  • Custom keyword files (those that live in ApplicationSupport/TextWrangler/Custom Keywords) can now use an Emacs mode line to specify their language. This addresses the case in which you want to supply keywords for a language that doesn't have any filename extension mappings. For example. ".php" maps to "PHP in HTML", which means that embedded PHP keywords need to be in a keywords file that maps to the "PHP" language.Emacs mode lines and blank lines in the keyword file will be ignored.
  • When an untitled document is active in a window, the window's entry in the Window menu will be annotated with some text derived from the beginning of the document's contents.
  • CHANGES:
  • The internal PCRE library has been updated to the latest "stable" version of PCRE (8.3 plus maintenance updates; see the about box for the exact version). There have been changes to the supported pattern syntax since PCRE 5.x, the previous supported version. Most patterns should work as-is but there is a possibility that patterns that previously worked may require adjustment.
  • The "Find Differences" dialog box has been reworked.
  • The old path controls are dragged to the curb, and have been replaced with edit fields. When you choose a file, its path is entered in to the edit field. You can leave it alone, or make edits to it to choose alternative locations.
  • The image to the right of each path shows a file or folder icon if the path refers to an item on disk; if the item indicated by the path does not exist, the image will show an alert icon.
  • The image wells are also drop targets: you can drag a file or folder in to specify it. Finally, double-clicking in an image well will reveal the selected item in the Finder.
  • The "Compare: ( ) Files ( ) Folders" switch is gone. Find Differences will figure out what you want to do based on the items you provide. (You can only compare a file to a file or a folder to a folder.)
  • The "Enable" popup menu in the Open dialog (for filtering by file type) has been removed. "Show hidden items" now affects file filtering behavior as well as making hidden items visible; when "Show hidden items" is turned on, any file is enabled and may be opened.
  • The "Apply to Left" and "Apply to Right" commands (and buttons) no longer pay attention to the selected range(s) of text in the respective documents. Instead, they will apply the difference based on what is reported in the differences list (and highlighted using the Differences color).
  • The "Un/Comment" command has been split into two commands: "Un/Comment Lines" and "Un/Comment Block". The difference is whether commenting is done using the language's line-comment delimiter, or its block-comment delimiters. Thus, you get exactly what you asked for, without any confusion or guessing.
  • The one circumstance under which your request is overridden is if you request line comments in a language which doesn't have them (e.g. HTML or XML), or request block comments in a language which doesn't support them (e.g. Perl, CSS). In that situation, the commands will behave identically and apply whichever comment delimiter is available.
  • The old PreferLineCommentsWhenCommenting expert preference no longer has any effect.
  • Changed the height of the action bar (at the bottom of the sidebar) so that it lines up with the height of the status bar/scrollbar.
  • The action areas at the bottom of the sidebar in disk browsers, projects, and editing windows now use an appearance that matches the rest of the window adornments.
  • No more grip strips in the action area of the sidebar. (The effective area for dragging the splitter is the same, though, and the cursor will change in just the same way it did before.)
  • Added a preference to the "Sidebar" group in the Appearance preferences: "Show icons". This can be turned off to recover horizontal space or reduce visual load in sidebar lists.
  • Documents with unsaved changes are now indicated in the side bar with a ring around the close widget, rather than by darkening the document icon.
  • Rearranged the folder comparison options in the Find Differences dialog so that more frequently needed ones are at the top of the column, rather than being mixed in with ones that are less likely to be used often.
  • The side bar in document and differences windows is now uniformly referred to as the "Sidebar", as in "Show Sidebar" and "Hide Sidebar".
  • Made some edits to the Appearance preferences to clarify the "show sidebar" defaults.
  • The performance of Zip file filtering has been somewhat improved, and so the InspectUTIWhenFilteringZipFiles expert preference is no longer used. (The Expert Preferences help has been amended accordingly.)
  • Removed the rule between the line number bar and the fold gutter (when both are visible) for a cleaner appearance.
  • Document state storage no longer reads settings out of file resource forks, nor writes into them. If the UseResourceForkForDocumentState is turned on, the application will use extended file attributes for storing this information instead. (Any document settings stored in legacy resource forks will be ignored.)
  • Made a change so that the application no longer requests user interaction when attempting to resolve a reference to a document's file on disk (which would happen in cases where the document's backing file was deleted).
  • Language modules can now designate certain run kinds as "special" for purposes of balancing. When computing balance points (either while typing or in response to a "Balance" command), these runs are taken into account in a fashion similar to what has been done historically for strings and comments.
  • For language module developers: special balance runs are listed in the module's plist using a new key: BBLMBalanceSpecialRunKinds. This is an array of strings, each of which corresponds to a run kind generated by the module which should be skipped over when balancing (or balanced within, if the initial balancing point is inside of one of these runs).
  • Open File by Name will now search Xcode for system framework headers, rather than relying on previous installation of the Xcode command-line tools package (which places framework headers in /System/Library/Frameworks/).
  • It is now possible to use the Escape key to exit full-screen mode (on systems that support that behavior, namely 10.10 and later). Note that in order for this to work, you must turn off both Emacs meta sequence support and Escape-key completion triggering, in the Keyboard preferences.
  • When closing a window containing multiple documents, the "Close documents?" alert will now list the first few documents in the window, to help make an informed decision.
  • When using "Close All Documents" or closing a window containing multiple documents, if any of the documents require saving, you are now prompted to save them as a batch, rather than one at a time.
  • When running a multi-file Replace All, the confirmation dialog now runs as a sheet on the Multi-File Search window, rather than as an application-modal dialog.
  • "Use Selected Text for Find (grep)" and "Use Selected Text for Replace (grep)" will now escape control-character sequences (tab, line breaks, and other unprintables) in the resulting Grep pattern.
  • The horizontal scrollbar in text views is now only visible when it's needed in order to scroll the text horizontally. ("All right, I won't poison your dinner. THIS TIME.")
  • The factory default for FullScreenWindowsHogScreen is now on, so that clicking the "enter full screen" button will cause the window to take up the entire display, irrespective of whether it's a good idea to do so. You can hold down the Command key when clicking the "enter full screen" button to have the application make that decision based on the current width of the window; complete details are in the Expert Preferences help.
  • The Appearance preferences have been adjusted to account for the changes in the navigation/tool/status bar structure.
  • Cheated some space from the Cursor Position status bar item, in order to make more room in the status bar. The "Line" and "Col" indicators are now "L:" and "C:", respectively.
  • Removed the "Tool bar" option from the Text Options sheet.
  • The sidebar close widgets for modified documents now show a darkened "x" in the center as well as a ring around the outside.
  • Differences windows now show document paths in the navigation bar, just like the other windows, and thus no longer have a toolbar.
  • Reduced the navigation bar items in Differences window text views to just the essentials.
  • The action menu at the bottom of the sidebar duplicates everything from the contextual menu, and its icon caused confusion with the new Text Options item icon, so it's gone now.
  • Compiled language modules should be updated to be line-ending agnostic; BBLMInterface.h includes a new function: BBLMCharacterIsLineBreak, which may be used to assist in transition. Codeless language modules are unaffected by this change.
  • The "Classic Mac (CR)" line ending type is now described as "Legacy Mac OS (CR)" in the UI.
  • Operations that select a line (such as providing a line number to the command-line tool, or Open Selection with a file:line specification) will now place the insertion point at the beginning of the indicated line, rather than selecting the entire line.
  • Rewrote the "Info" sheet in FTP browsers to eliminate some legacy code. Operation is as before, but the Permissions options are arranged a little more rationally and have "Save" and "Revert" buttons.
  • Changed the behavior of the "New text document" setting in the Application preferences so that a new document gets created when activating the application only when no other text documents are open. (If other windows are open when the application is brought to the foreground while already running, no new document gets created.)
  • If flake8 is installed (which you can do using pip installflake8, see the pip website for more details), "Check Syntax" for Python scripts will use it instead, since it provides better diagnostics overall.
  • Made a change so that files processed during multi-file operations are processed in order by name, which may differ from the order in which the file system provides them.
  • Made a change to improve file filtering performance in the Open panel when many documents are open.
  • Retired the internal "68K Assembler" language module.
  • TextWrangler now uses the line feed (ASCII decimal 10) as line breaks in its internal representation for text in open documents, instead of the carriage return (ASCII decimal 13) that was the standard Mac format for many years. This (theoretically) reduces the time required to open documents, since in the normal case, no conversion is necessary; it also eliminates conversion logic when copying and pasting text, since LF-delimited text is also the standard interchange format on the Clipboard.
  • As before, you may use n and r interchangeably in search strings and Grep patterns. (The latter usage is for compatibility with old versions of BBEdit and TextWrangler.)
  • The "Hex Dump Front Document" command no longer provides a (confusing) choice of whether to dump the document's contents or its file on disk. The command will always dump the contents of the document, and now provides control over which encoding to use when interpreting the document's contents.
  • The "Hex Dump File" dialog no longer uses that awful path control.
  • Since Unix line breaks are now the norm, the -u/--create-unix options to edit are now treated the same as -c/--create, and will write out an empty file. The man page has been updated to reflect this.
  • Made a change so that Option-clicking in the close box of a window behaves as though you had pressed Command-Option-W to close all of whatever is appropriate. In practical terms, this means that it's more like "Close All Documents" when a document window is in front, which is more useful since it won't prompt you to close each multi-document window with a sheet.
  • Fold ranges in Markdown documents now include blank lines at the end of the range.
  • The Edit and Text menus have been rearranged, as follows:
  • All of the selection commands, except "Select All", are now on a "Select" submenu of the Edit menu.
  • The commands related to line insertion and movement are now on a "Line" submenu of the Edit menu.
  • The "Text Options" and "Printing Options" commands have been combined into a single "Text Options" command, which lets you adjust both sets of options in a single panel.
  • The spelling-related commands from the Text menu are now on a single "Spelling" submenu on the Text menu.
  • When viewing documents in Differences windows, differences ranges are now always highlighted and can be seen when scrolling through the document:
  • Only the selected top-level difference is colored using the Differences color when selected; all others are colored using a subtle gray shade.
  • When a difference containing sub-line differences is selected, all of the sub-line differences are colored using a darkened (or lightened, for dark color schemes) version of the Differences color.
  • When a specific sub-line difference is selected, it is colored using a darkened (or lightened, for dark color schemes) version of the Differences color. The surrounding difference range is colored using a subtle gray shade. None of the other sub-line differences are colored when a specific sub-line difference is selected.
  • The following changes have been made to the editing view structure:
  • The toolbar has been, uh, sent to live on a farm upstate.
  • The document icon is now on the right-hand end of the toolbar and behaves as before when clicked.
  • The Text Options icon is now at the left side of the navigation bar.
  • The text used to draw items in the navigation bar, status bar, and line number bar has been desaturated a bit.
  • The "current document" navigation bar item now shows the document's name followed by as much of the document's parent path as possible. Clicking anywhere on it will open the menu that lets you switch to other documents, as before.
  • The document navigation arrows have been retired. "Previous Document" and "Next Document" on the View menu still work as before.
  • The Current function/function menu has been moved to the right-hand side of the navigation bar.
  • The overall appearance of the navigation and status bars has been cleaned up quite a bit.
  • FIXES:
  • Made a small change to improve performance in the computations for soft wrapping text.
  • Fixed bug in which an empty selection range would be passed to AppleScript filters run from the "Apply Text Filter" command, rather than passing the entire text of the document (which is what should be done, consistent with other filter types and the documentation).
  • Made a change to improve directory scanning and file filtering performance for Find Differences folder comparisons (which also benefits multi-file search/replace and Text Factory application).
  • Fixed a case in which autosaved document data would be lost if the application crashed or was forcibly quit after the restoration of sleep data, but before an auto-save took place.
  • Corrected the error message text for error 13110 ("Export as Text" attempting to overwrite a non-text document type) and added error text for 13109 (font height exceeds text view height).
  • When the differences list has focus in a Differences window, commands on the View -> Text Display submenu will be enabled appropriately and the changes they make will apply to both of the displayed documents.
  • Command-clicking on a delimited URL will now properly handle line breaks (and subsequent white space) that may occur in the middle of the URL.
  • When performing a "Process Duplicate Lines" and not using a Grep pattern for matching, empty (zero-length) lines are now treated as equivalent (and thus duplicates) and will be removed if the options so indicate.
  • Fixed bug in which some commands on the Edit menu were inappropriately enabled in Differences windows when the list had keyboard focus, leading to possible unintentional edits (depending on choice of keyboard equivalents).
  • Fixed bug in which the "Flatten hierarchies" option in Find Differences did not actually do anything and so the hierarchies were allowed to remain resolutely unflat.
  • Made a change to reduce overhead when reading in a file during multi-file search or text factory operations.
  • Worked around OS API bug in which named historical backups would fail after changing the primary system language (in the "Language & Region" system preferences) without restarting the computer.
  • Fixed bug in which twdiff would activate the application, even after no differences were found.
  • Fixed crash which would occur when cancelling a search initiated by twfind by killing the twfind command.
  • Bookmarks listed in the Setup window will now show the bookmark's URL location as a tooltip when appropriate.
  • SFTP file transfers are now done on a background thread, with progress running on the main thread, to improve performance.
  • Made a change so that live matching is done on a background thread and updated when the work is done, rather than tying up the UI in cases where there are so many matches for the selected word that a noticeable amount of time is required to find them.
  • The current function display in the navigation bar will now replace tabs with nonbreaking spaces and collapse multiple runs of spaces to a single space, which improves display of function names in some situations.
  • Fixed bug in which replacements for capture groups in patterns containing lookahead assertions would generate incorrect (or junk) results.
  • Fixed crash which would occur in the C/C++/ObjC/ObjC++ function scanner when encountering certain unbalanced constructs.
  • Fixed bug in which double-clicking in the empty space of a palette backed by folder items (scripts, text filters, etc) would report an error instead of quietly doing nothing.
  • Made a change to correct tab width calculations when drawing non-antialiased text.
  • Live Search now does its work asynchronously, so that intermediate searches in very large documents don't tie up the search box as you type.
  • Made a change so that Open File by Name lists recent items after items which are derived from the active project (or other contextual source).
  • Fixed crash which would occur when printing with line numbers turned on.
  • Made a change to improve the performance of Quick Find and live-matching operations.
  • Enlarged the "Path:" text area in the File Info popover.
  • Fixed bug in which "Restore Defaults" in the "Menus & Shortcuts" preferences did not also reset hidden menus and items, as it should have.
  • Fixed bug in which turning on "Text Magnification" alone in the Appearance preferences was insufficient to trigger the status bar display.
  • When importing the legacy .bbcolors color scheme format, rgb(...) color values are now correctly converted using 0..65535 as the range, instead of 0..255.
  • Rewrote the logic which tests for reasons why a file might be locked. This should help correct situations in which the application inappropriately reports that files resident on remote server volumes are not unlockable.
  • Single-file "Find All" now takes a code path that avoids the multi-file search mechanics, so it will work as expected on open documents which are not necessarily seen by the system as text files (for example, SVG).
  • Highlighted ranges for "Live Search" matches no longer get cleared when the text view is activated or deactivated.
  • Fixed bug in which using the "Open in New Window" option from the Open panel would not open an additional window for a document that was already open. The underlying issue would also cause incorrect state restoration in cases where a document was open in multiple windows when the application was quit (or when an automatic state snapshot was made).
  • Corrected some missing terms in the replace AppleScript verb.
  • When opening a document into an explicitly specified window (as when restoring state during startup), if the document was already open in another window, the application will no longer move the document from the other window into the specified window (which might cause the other window to close unexpectedly).
  • Fixed bug in which incorrect time zone calculations were done on the dates of files listed in the FTP/SFTP browser UI.
  • Separator generation for "MARK:" comment callouts now works correctly in C/C++ and PHP files.
  • "Show Fonts" when a Differences window is in front now does something, and changes in the font panel are applied to both text views.
  • Added some symbols to color as predefined names in C-ish languages. (Mostly stuff from .)
  • Fixed crash which would occur when an error is returned from running an Automator workflow. (This would actually happen all the time on some OS versions in which the Automator workflow API always returned an error, even when none had occurred.)
  • When wrapping text in a document with "Auto-Expand Tabs" turned on, Hard Wrap will now detab the wrapped text, instead of leaving it indented with tabs.
  • Fixed bug in which tags with name attributes (e.g. map) were not correctly recognized as internal link targets.
  • Made a change so that scripted Replace All (and Find) operations on single documents are routed directly to the document's text, rather than through the Multi-File Search mechanics, which will increase performance and reduce UI churn caused by progress windows coming and going.
  • Added "finally" to the PHP keyword list.
  • Modernized the "Insert Emacs Variable Block" sheet.
  • Rewrote the panel used for confirming saves when doing multi-file Replace All or text factory operations.
  • Fixed bug in the Text Options panel in which dragging off a popup menu's button without selecting anything from it would cause it to select the first item in the menu.
  • Fixed cases in which list items that should have been drawn in the italicized system font were not, on 10.10 and later. This affects applied differences, aliases in disk browsers, and the "empty line" items in the Jump Points and other navigation palettes.
  • Updated the Objective-C/Objective-C++ keyword lists to add __kindof, nullable, _Nullable, _Nonnull, _Null_unspecified, and a few others.
  • Adjusted the YAML module so that completions may be generated from symbols in the file in which you're typing.
  • When Page Up and Page Down are allowed to move the insertion point, they now behave consistently with using Option-Up/Down Arrow for the same purpose.
  • Made a change to improve performance when highlighting (or clearing highlighting of) large quantities of matches for live-matched selections or Live Search results.
  • Made changes to improve performance when working in windows containing large numbers of documents.
  • Fixed bug in which displaying a bezel alert ("wrap around", "not found", etc) as the result of an operation that also dismissed the Find window would leave the front document window in an inactive state.
  • Made some changes to improve behavior when changing display geometry, either by adjusting the resolution of a single display, or by adding/removing displays.
  • Corrected the computation for deciding whether to use a contrast-enhanced I-beam cursor on text views with dark backgrounds.
  • Fixed bug in which XML tags beginning with non-ASCII characters weren't colored as they should have been.
  • Fixed bug in which paragraph tags did not get fold indicators.
  • Updated the search keyword tables to include new or changed preference settings.
  • Added an expert preference, PCREMatchLimitOverride, to be used only on the instructions of Tech Support to adjust an internal circuit breaker in the PCRE library.
  • We no longer ask the active printer for its output resolution when calculating margin offsets for the "1-inch gutter" option, since printer drivers never return the correct answer.
  • Fixed bug in which file filter terms referencing "Parent Folder" did not work correctly.
  • Fixed crash which would occur while typing a #MARK comment callout at the very end of a PHP or C file.
  • Fixed bug in which Go -> Previous/Next Difference would select items in the Differences list, but not bring the selected list item into view.
  • Operations that select a line (such as providing a line number to the command-line tool, or Open Selection with a file:line specification) will now place the insertion point at the beginning of the indicated line, rather than selecting the entire line.
  • When restoring application state, documents that were open only in results windows (search results, source control status, etc) but were not open in any other windows are now opened together into a new window, rather than having one new window opened for each instance of the document that had been displayed in a results window.
  • Put in a timeout to guard against a hang which occurs sporadically when we request the current runtime environment from the user's login shell.
  • Improved error reporting for invalid Grep patterns.
  • Fixed bug in which "Process Duplicate Lines" would delete the line following a blank line (in sort order), whether it was blank or not.
  • Fixed an error 10003 which would occur when performing scripted operations which involved high-frequency open/close cycles with different documents.
  • Fixed bug in which documents opened from a results window in which Soft Wrap Text was turned on did not correctly apply the wrap settings.
  • Made a change so that text in CDATA sections in HTML and XML files is now eligible for spell checking.
  • Made a change to improve performance when changing the live-match highlighting in documents with extremely long unwrapped lines.
  • Put in a workaround for an OS bug on 10.11 in which the state restoration progress window would appear blank or black for some period of time at startup.
  • Fixed bug in which documents which did not have saved state did not correctly adopt language-specific preferences when opened.
  • Fixed crash which would occur when performing a Sort Lines or Process Duplicate Lines operation using a pattern and the "All sub-patterns" option.
  • Text underlined or highlighted by the "Display instances of selected text" matching now uses the "Plain text" color, rather than deriving from the "Background" color.
  • Fixed a bug in which the keyboard focus was not on the name field in the "save color scheme" sheet, as it should have been.
  • Fixed bug in which Differences windows had, incomprehensibly, a Current Function item in the status area.
  • Made a collection of changes to improve startup performance and application responsiveness when initially loading the contents of very large folder-backed menus.
  • Fixed layout goof in text views in which all status area items were turned off, but Show Line Bar or Show Gutter was turned on.
  • By default, "display occurrences of selected text" will only search for qualifying text that is two characters or longer, so that selecting or placing the insertion point in front of a single character will no longer display highlights throughout document.
  • The "Strip trailing whitespace" option when saving files will no longer remove page breaks.
  • The Unix Shell Script language module now allows single- and double-quoted strings to cross line boundaries.
  • Fixed bug in which current-line highlighting would disappear from the first line in the document when using an unmodified up-arrow to move the insertion point to the beginning of the line.
  • Adjusted the PCRE library to use the application heap for recursion instead of the machine stack, which allows more deeply recursive patterns to run successfully (at the theoretical cost of some performance).
  • Fixed bug in which custom language mappings for file names or file name patterns didn't work for files without a name extension.
  • Worked around a bug in the Wacom tablet driver in which it was generating spurious mouse-wheel-moved events which would in turn cause unwanted scrolling during certain pen movements.
  • Fixed bug in which initiating a drag with the mouse could happen unintentionally when clicking on draggable objects.
  • Fixed crash and malfunction which could occur in certain situations when converting Unicode data from a non-Unicode on disk representation in zero-length files.
  • Made a change to reduce the transient memory requirements when performing a non-Grep Replace All operation using a replace string that is longer than the search string.
  • Made a change so that text factories and multi-file Replace All operations avoid running out of address space when processing an extremely large number of files.
  • Fixed crash which would occur when trying to change the name of a "Favorite" in the font panel.
  • Fixed bug in which a document's Undo history was cleared when using "Move to New Window" from the project sidebar popup or contextual menu.
  • Made some changes to address lurking concurrency problems during package loading.
  • Improved the performance of "Strip trailing whitespace" when saving documents and the eponymous preference is turned on in the Text Files preferences.
  • If a file-based Unix script or filter isn't usable because of its on-disk representation (as when choosing it from the Apply Text Filter or Scripts menus), an informative error is now reported.
  • Fixed bug in which heredoc strings in Unix Shell Script documents were not colored using the proper color.
  • Fixed a bug in the VHDL and Verilog HDL language modules that would cause unexpected coloring effects (which sometimes corrected themselves during editing, and sometimes not).
  • The Live Search box no longer displays the magnifying glass (the system draws it incorrectly on retina displays, and won't be corrected).
  • Fixed cosmetic glitch in results windows, along the boundary between the splitter and the text view.
  • When spell checking in HTML/XML, the checker now properly handles transitions between checkable ranges (such as CDATA body text) and non-checkable ranges (tags), so that all CDATA text will be checked, even if checking did not start inside of a CDATA range.
  • When closing a very large document without saving changes, and "Make Backups" is turned on, the auto-recovery file doesn't neeeeeeed to have trailing whitespace stripped out, so we no longer do that (and save lots of time in the process).
  • When "Find Next Misspelled Word" wraps around, the "Wrap Around" indication is now displayed (as it should be).
  • Fixed case in which a text view would draw twice when loading a document and then changing its selection range to some place that required scrolling.
  • Put in code to work around a bug in the OS (16742697) which would cause the application to crash after scrolling views in an Open or Save panel (and a few other windows).
  • Fixed a crash which would occur in some situations when calculating data for the fold gutter.
  • Fixed bug in which document state was not automatically saved in situations where it should have been saved when closing the document.
  • It is now possible to run Perl, Python, or Ruby files directly from an editing window, the Scripts menu, or the "Apply Text Filter" command when the file in question does not have a shebang line, as long as the document's language is set appropriately.
  • When python3 is available in a typical executable location, we will now use that to run Python scripts that don't have a shebang (#!) line.
  • Updated the built-in list of PHP predefined names so that symbols occurring in PHP embedded in HTML will be colored.
  • When saving an already extant document, the permissions check (to determine the need for authentication) no longer checks the parent directory if the file itself appears to be writeable.
  • "Save Default Window" is now disabled for singleton windows (Find, Multi-File Search, and others) rather than being enabled and showing the wrong title.
  • Fixed cosmetic glitch in results windows, along the boundary between the splitter and the text view.
  • Finder data storage files (".DS_Store") are now disabled in the Open panel, even if "Show hidden items" is turned on.
  • The language guesser for Python will now recognize shebang lines that specify python3.
  • Fixed crash which could occur when a background operation (such as highlighting matches of the selected text) was interrupted by a replacement of the backing store (Replace All, Revert, reload from disk, etc).
  • Made a change so that file enumeration when searching projects and evaluating Open File By Name results does not omit items when the starting point is itself an invisible directory.
  • Quieted a runtime warning when using the Save As panel to save a text document.
  • Conditionalized the workaround for Radar 16742697, which has been fixed for $FUTURE_OS_VERSION.
  • Fixed bug in which Objective-C/C++ specific keywords were inappropriately used in C/C++ documents.
  • Made a change so that using a language-specific color scheme (other than "Application Defaults") no longer fills the preferences with language-specific color settings; and at the same time fixed a bug which would cause some color settings to be incorrectly applied when using a language-specific color scheme.
  • Fixed bug in which the UTF-8 factory default encoding for new documents was not applied when it should have been.
  • Fixed bug in which a document's contents would briefly jump to the top after a "Replace All" operation.
  • Fixed a couple of cases in which documents would open or reload and briefly display at the top of the document before scrolling to the appropriate position.
  • Made a change to fix a crash which would occur when opening the file info popover on 10.11.4 when the Dock was positioned on the right side of the display.
  • Fixed a case in which saving a new document would cause its tab width to change to the default setting, which was a problem when the document's width had previously been changed to something else.
  • Fixed bug in which custom highlight colors specified by color schemes were not correctly applied when starting the application.
  • Made the line-number column in the Markers and Functions palettes fixed width, to eliminate confusing behavior when resizing the window.
  • Fixed crash which would occur when making changes to FTP/SFTP bookmarks and one or more of the stored bookmarks had a corrupted URL string.
  • If /dev/null is passed as an argument to twdiff, it will now exit normally (and quietly), rather than reporting a -36 error.
  • Fixed bug in which certain operations would cause the selection range to drift.
  • Worked around a pathological behavior in the OS which would cause the file info popover to take minutes to appear in some situations (in particular, when Active Directory services are in use).
  • Fixed a bug in which canceling a multi-file search/replace or Text Factory operation would leave some internal bookkeeping undone; after enough uptime this would cause future operations to stall while waiting for a condition which would never be satisfied.
  • Fixed a bug in which the HTML function scanner would generate function menu items with empty names for headings in some situations; this in turn triggered a bug which would cause a crash when the Current Function display needed to display that item in the navigation bar.
  • Made a fix so that high-frequency changes to progress status from background threads no longer cause drawing glitches in the progress panel.
  • Fixed a bug in the AppleScript internals in which whose tests for certain value types would occasionally fail for reasons that were not immediately evident to the observer.
  • The Markdown module will no longer add fold points for 1-character fold ranges. For example, a #headline will not have a fold point if the very next line is another headline (as that fold would only hide the line break).
  • Fixed bug in which Option-clicking to move the insertion point would frequently leave behind a stale line highlight.
  • Made a change to improve file filtering performance, particularly in the Open dialog.
  • Made a change so that Emacs-style backups (foo.txt~) no longer appear in folder-backed menus (Scripts, Text Filters, etc) when there's a non-backup file in the same location.
  • Fixed bug in which making changes to a folder being observed by a palette (Scripts, Text Filters, etc) would cause any expanded items in the palette to collapse.
  • Made some changes to improve internal performance during regular-expression capture.
  • The application no longer promises UTF-16 text to the Clipboard, which improves copy/paste compatibility with Microsoft Office.
  • Fixed a bug in which the "Extract" command in the Find window didn't respect the "Selected text only" option.
  • Made a change to increase the reliability of reloading changes to a document's backing file when they're made at high frequency (intervals less than the time resolution of the file system) or made by an attached documentDidSave script.
  • The differences list (in Differences windows) now always uses the small system font, and ignores the List Display Font preference. This works around bugs when trying to italicize the font on some OS versions.
  • If a documentDidSave attachment script exists and is run, we will now manually verify the disk file after saving, in case the script changed it. This works around problems in which we don't receive file system notifications when the script runs.
  • Made a change so that Emacs-style backup files are omitted from Switch to Counterpart and the Counterparts menu when appropriate.
  • Fixed bug in which character escapes in non-Grep search strings were not properly unwound when doing a single-file "Find All" or "Extract".
  • Fixed a case in which the Open File by Name window was doing more work than it needed to when it was activated, which would lead to delays.
  • When performing an interactive Process Duplicate Lines, the "Process" button is now disabled if you select both "Unique lines to clipboard" and "Duplicate lines to clipboard", since you can't do both.
  • Fixed cases in which files chosen from the Includes navigation bar menu weren't found and opened as they should have been.
  • Made a change so that the check for "is a file controlled by Perforce" will time out when necessary, rather than stall the application forever.
  • Fixed a hang which could occasionally and randomly occur while waiting for a response from certain forked Unix processes.
  • Fixed bug in which certain characters in search and replace strings would cause unexpected drawing effects in the Find window's search history menu; these characters are now hex-escaped.
  • Non-printable characters in the "Latin-1 Supplement" range (0x80-0x9F) are now escaped in search strings.
  • Fixed bug in which forced changes to UTF-8 while saving did not correctly update the text encoding setting display in the status area.
  • Full-path truncation in printed page headers now uses a little more intelligence, to make better use of the available space.
  • Condensed the page count in printed page headers, to make a little more room available for the full path (if used).
  • The path truncation used for menu items (Open Recent, windows) and other appropriate locations is now somewhat smarter, so that useful information is now retained in situations where it wasn't before.
  • Fixed a bug when auto-recovery data wasn't cleared when using Revert or Undo to discard changes to an open document; this would lead to the previously autosaved contents being restored at the next startup.
  • Fixed bug in which edit --launch did not bring the application to the foreground when it was already running.
  • Fixed a bug in which the highlight color was incorrect after selecting a color scheme in some circumstances.
  • Fixed crash which would occur while typing certain URLs into the Open File By Name search box.
  • If the page guide contrast (which also affects the contrast of tab stop lines) is set to zero, don't spend time drawing invisible tab stop lines.
  • The Guide Contrast setting is now range-limited, so that using the minimum setting no longer renders tab stops and the page guide invisible when those display options are enabled.
  • Fixed bug in which certain malformations in a language module's plist would cause the application to crash; and other errors in construction would cause the language module to fail silently. Validation has been extended to log these conditions and prevent the module from loading.
  • The internal PCRE library has been updated to 8.40 (current as of this writing).
  • Fixed crash which would occur while parsing fragmentary #include or #import statements in C-family languages.

New in TextWrangler 5.0.2 Build 3786 (Nov 12, 2015)

  • Includes fixes for reported issues.

New in TextWrangler 5.0.1 Build 3782 (Nov 9, 2015)

  • Additions:
  • This release consists entirely of fixes and behavior changes to address reported issues, and contains no new features.
  • Changes:
  • Rearranged the font options in the Printing preferences to make them a little clearer.
  • The factory default for FullScreenWindowsHogScreen is now on, so that clicking the "enter full screen" button will cause the window to take up the entire display, irrespective of whether it's a good idea to do so. You can hold down the Command key when clicking the "enter full screen" button to have the application make that decision based on the current width of the window; complete details are in the Expert Preferences help.
  • Results windows and disk browsers are now included when using the Arrange commands on the Window menu. (Each type of window is arranged with its own kind.)
  • Fixes:
  • Fixed bug in which "File Path" file filter terms did not work correctly.
  • Rewrote the bezel alerts (wrap around, "not found", unbalanced paren, etc) to use AppKit instead of HIToolbox, which eliminates a nest of old HIToolbox code and corrects appearance on Retina displays.
  • Fixed a bug in which the C/C++/Objective-C function scanner would very occasionally run off the end of a source file and crash.
  • Rewrote our font panel glue to work around longstanding OS bugs in which changes in the font panel were not reflected in their intended target (Editor Defaults preferences, Printing preferences, or active document).
  • Removed workaround for Radar 22872931 and corrected API usage. (This change has no visible effect, but let's hear it for using the APIs correctly!)
  • Fixed bug in which "Revert" would report an error when trying to revert changes to a document being viewed in a Differences window.
  • Fixed bug in which tab-to-indent didn't work correctly when the selected range of text was at the end of a document which itself did not end with a line break.
  • Put in some armorplate to protect against a crash that cannot be reproduced and whose name shall not be spoken lest it summon a shoggoth.
  • Put some code in to guard against a crash that would hypothetically happen during multi-file search processing in cases where a file got deleted from underneath the folder scanner thread.
  • We now use an alternative I-beam cursor on dark backgrounds which is more visible than the one provided by the system. Note that at higher display resolutions and larger cursors sizes, the cursor image will be jaggy due to a bug in the OS (23188495).
  • Fixed regression in which the "Magnification" status bar item did not correctly reflect the document's magnification setting.
  • Fixed bug in which the "Case Sensitive" option for Sort Lines did not affect the Unicode comparison used to determine duplication (the comparison was always case sensitive).
  • Fixed build goof in which the Mac App Store build of TextWrangler shipped with some inappropriate menu commands enabled.
  • TextWrangler gets the "Previous/Next Error" commands on the Go menu, which includes support for "Previous/Next Difference" when a Differences window is active.

New in TextWrangler 5.0 Build 3766 (Sep 30, 2015)

  • Additions:
  • The results windows for Find Differences are all new. Among other things, the old three-window presentation is gone, replaced by a single window which shows both old and new files at the same time, along with the diff list.
  • When two folders are compared, the sidebar on the left shows the hierarchy of files and folders that are different. The "Only in Old" and "Only in New" lists are gone; instead, each pair of icons indicates whether an item is missing from one or the other. If so, the arrow on the right-hand side of the item can be used to copy the file or folder over to replace the missing item.
  • The Differences window also supports a "widescreen" layout. Although there is no UI for changing the layout at this writing, you can do so through the scripting interface:
  • set widescreen of differences_window 1 to (not widescreen of differences_window 1)
  • "Save Default Window" also works for Differences window, so if you prefer the widescreen layout, you can use the script to change it, then "Save Default Differences Window" to make it the default.
  • There's a new feature: "Highlight instances of selected text". When you select something (that doesn't consist entirely of whitespace or punctuation), all of the occurrences of the selection are underlined; and the new pair of commands on the Search menu ("Next Occurrence of ", "Previous Occurrence of ") can be used to navigate the occurrences. (This navigation is independent of the text searching UI, although the string is added to the search history for convenience of future use.)
  • This feature can be turned on or off globally in the Editing preferences; there is likewise an adjustment for the delay before the highlighting is done.
  • "Zap Gremlins" has been extended to provide the option to use ASCII equivalents when replacing gremlins with the character code (thus replacing the old "Convert to ASCII" command), as well as an option to replace gremlins with HTML entities.
  • Added two new commands to the Edit menu for text views: "Select Up" and "Select Down". These commands facilitate rectangular selection via the keyboard. (Their factory defaults are Control-Shift-uparrow and Control-Shift-downarrow but can be changed as usual in the Menus & Shortcuts prefs.) Given either a single-range selection (that does not cross a line boundary) or an existing rectangular selection, "Select Up" and "Select Down" will extend the selection range up (or down, respectively) in the same column, thus creating (or extending) a rectangular selection.
  • These commands are disabled if soft wrapping is turned on in the view.
  • It is now possible for #! text filter scripts to present a dialog box allowing the user to specify arguments to the filter (which the filter script may then use to modify its operation on the input). This is done by creating a Cocoa nib file in Xcode, and placing it in a specific location relative to the script being run (namely, "../Resources/.xib"). It is necessary to follow certain specific rules when creating the nib. A separate metadata property list ("../Resources/-arguments.plist") may be included in order to specify the format of arguments on the command line.
  • When a Differences window is active, the "Next Error" and "Previous Error" commands on the Go menu change to "Next Difference" and "Previous Difference", and can be used to navigate even when the differences list does not have focus.
  • The "Text Colors" UI has been overhauled to allow for extended colors (and some new core color types have been added).
  • The format of color schemes has changed. Existing color schemes will be converted; note, however, that the new color schemes have many more color settings. Any missing color settings will use factory defaults.
  • The syntax coloring internals have been extensively reworked. Run kinds (used to determine colors) can now be extended by language modules, with each run having a default color and enough metadata to drive the prefs UI. Thus, language module developers are no longer limited by the set of built-in colors.
  • This rework required incompatible changes to the language module plug-in API. Language modules that worked with previous versions of TextWrangler may require updates before they will work again.
  • Because PHP can appear in one of two contexts, recognition of PHP has been split between two languages: "PHP", which is used only for "raw" PHP source, and "PHP in HTML", which describes PHP embedded in HTML documents. This should clear up some of the confusion which occurred from having PHP-in-HTML documents sometimes following PHP rules, and sometimes following HTML rules (particularly where clippings are involved).
  • Note: If you had previously made changes to the filename extension mappings to explicitly map PHP extensions to "HTML", or HTML extensions to "PHP", you will be well served by clearing those mappings and allowing the factory defaults to prevail.
  • @YES, @NO, @true, and @false are now colored as keywords in Objective-C documents (the latter two only in Objective-C++).
  • Objective-C numeric literals (e.g. @12345) are now colored as numbers in Objective-C/Objective-C++ files.
  • Added __objc_yes and __objc_no to the keyword list for Objective-C/C++
  • Added @import to the keyword list for Objective-C/C++
  • Added nullptr to the keyword list for C++ and Objective-C++.
  • There is a new expert preference: PrecomposeUnicodeWhenPasting. This is useful in situations where you frequently bring in text that contains combining Unicode characters from external sources (such as PDFs generated on other platforms), and need to crush two combining characters into one composed character where possible. This is not a generalized need, but if you run into it often enough, turning on the expert preference will save you some work:
  • defaults write com.barebones.textwrangler PrecomposeUnicodeWhenPasting -bool YES
  • (Despite the name, the precomposition is done when TextWrangler imports the Clipboard from other applications, not when the paste is actually done.)
  • Note that this requires an additional copy of the Clipboard when the application imports the text, and for very large pastes, there may be a noticeable delay while the text gets precomposed. Thus, you should only turn on this setting when you are frequently working with text that contains combining Unicode characters.
  • The UI for "Save Scheme" in the Text Colors preferences has been enhanced: there's now a pop-up menu so that you can choose the name of an existing color scheme if you want to overwrite it. (You'll be warned before overwriting an existing color scheme, though.)
  • Added color settings for verbatim sections and math strings in TeX documents.
  • There are now several built-in factory supplied color schemes. These may be used as-is, according to your preference, or you can select one, customize it, and use "Save Scheme" to create your own modifications (which are stored in the Application Support/Color Schemes/ folder, as usual).
  • The "BBEdit Light" color scheme is now the factory default. This is applied when you start up with no existing preferences or when you use the "Reset to Defaults" button in the Text Colors preferences.
  • The factory default colors from pre-5 versions are provided as "BBEdit Classic".
  • Font ligatures can now be controlled with an expert preference. This allows enhanced text rendering behavior in certain fonts. For example, the work-in-progress Hasklig font which uses ligatures to enhance the display of compound-character Haskell operators.
  • Ligatures may be enabled or disabled globally with this expert preference:
  • defaults write com.barebones.textwrangler EnableFontLigatures -bool YES
  • Note that you can also enable ligatures based on a font's display name. So, if you wanted to enable ligatures only for the Hasklig font, you would do it thusly:
  • defaults write com.barebones.textwrangler EnableFontLigatures -bool NO defaults write com.barebones.textwrangler EnableFontLigatures_Hasklig -bool YES
  • The font's display name is the name as it appears in the "Fonts" panel or in the Font Book application; not the name of the font file on disk.
  • In the sidebar of a multi-file Differences window, you can now click on a file or folder icon to ask the OS to open it. Hold down the Option key to reveal it in the Finder instead; or hold down the Command key to open the item in TextWrangler (even if the OS would open it in some other application).
  • There is a new control in the status bar at the bottom of text views; it displays the current magnification of the view and allows you to change it. The control can be hidden (or shown) using the "Text Magnification" option in the Appearance preferences.
  • There is now a keyboard equivalent for opening the Magnification menu; this can be changed in the "Menus & Shortcuts" preferences, under "Status Bar".
  • The popup-menu buttons at the bottom of the window side bar are now accessible via keyboard commands. There are none set by default; you can configure your own in the "Menus & Shortcuts" preferences; see the "Side Bar Items" section.
  • There is a third option in the Keyboard preferences to control Home and End key behavior: "Progressive (BRIEF compatible)". If you select this option, the Home and End keys behave as follows on successive presses:
  • the first press will move the insertion point to the beginning (or end) of the current line;
  • the second press will move the insertion point to the begin of the first line (or the end of the last line) in the current page of text, without scrolling;
  • the third press will move the insertion point to the beginning (or end) of the document.
  • The behavior is progressive within a specific time period. After the period expires, or if you change the selection range by other means, the behavior state resets, so the next press of Home or End will behave as in the first step described above.
  • The factory default timeout period is ten seconds. There is an expert pref to control it:
  • defaults write com.barebones.textwrangler BRIEFStateTimeout -float 10.0
  • There are some new commands on the View menu:
  • Collapse All Folds - This will collapse all automatically generated fold regions in the text, whether or not they are contained within other folds. (This is distinct from "Collapse Top-Level Folds", which collapses the top-level folds but leaves any nested folds open.)
  • Collapse Folds Below Level - On the submenu, all available fold levels are shown; choosing one will collapse all of the automatically generated fold regions in the text that are below that fold level. So, for example, Collapse Folds Below Level => 1 will leave the top-level folds open, but will collapse all of the folds below the top level, whether or not they are contained by other folds.
  • Clicking on the document icon in a window's toolbar will now open a spring-loaded info panel which displays basic information about the file, and gives you the ability (for local files only) to rename it, "touch" its creation/modification dates, and change its permissions. Dismiss the panel by clicking outside of it, switching to another window or application, or pressing the Escape key.
  • Added a "Swap" button to the Find Differences dialog box.
  • The info panel (raised by clicking on the document icon in the toolbar) now gets a "Text" tab displaying character, word, and line counts for the document (and if applicable the selection).
  • Clicking on the Text Statistics status bar item will now open a the document information panel with the Text tab pre-selected.
  • A "Get Info" command is now available on the View menu, as well as in the action and contextual menus for file sidebars (for items on disk) and disk browsers. This will display the same info panel that is available by clicking on the file's icon in the toolbar. When applied via action or contextual menu to sidebar items, it is only available for files or folders, and will not show text statistics.
  • There is a new command on the Search menu: "Replace All in Selection". This is enabled when there is a selection in the front document's text view (or in the document immediately behind the Find window). Choosing it will apply a Replace All only to the selected range of text.
  • CSS coloring has been enhanced: numeric values are now colored, as are color specifications (both built-in names and 3/6-digit hex color specifications).
  • SCSS is now supported as a built-in language. This is a superset of the support for CSS, with additional coloring for variables, // comments, as well as completion for the SCSS built-in functions.
  • *** Note: If you have installed the third-party SCSS language module, you will need to remove it, since it will otherwise override the built-in support.
  • There are two new commands on the Edit menu: "New Line Before Paragraph" and "New Line After Paragraph". These commands will insert a new line at the beginning of the paragraph(*) containing the start of the selection, or after the end of the paragraph containing the end of the selection, respectively.
  • (*) The term "paragraph" is used in the same sense as the Cocoa text system uses it, namely, a line boundary. This is at odds with the conventional definition of a paragraph, but consistent with the OS's interpretation of the term (and thus with other applications that implement the same behavior).
  • Added check box to the Edit -> Insert -> File Contents file panel: "Include separators". This will include a separator between each inserted file's contents, which includes a dashed line and the file's name.
  • There is now a simple way to add language keywords to installed languages without fiddling your fingers in the application package or other off-limits places. As follows:
  • in the Application Support/TextWrangler/ folder, there is a new subfolder, named Custom Keywords. It is created automatically when the application starts.
  • In this folder, place one or more files containing the keywords that you wish to be colored.
  • Each file's name should map it to the appropriate language, e.g. ".js" for JavaScript files. You can have multiple keyword files mapped to the same language, if you wish.
  • Each file should be UTF-8 text, no BOM, and contain one keyword per line.
  • Keyword lookups are case-sensitive if the language is case sensitive; case-insensitive otherwise.
  • Words in these files are colored using the "Language Keywords" color.
  • TextWrangler now supports the EditorConfig settings file convention. You can learn more about this at the EditorConfig web site.
  • TextWrangler supports most, but not all, of the core EditorConfig properties listed here. The end_of_line property is not supported; nor is max_line_length.
  • In addition to the core EditorConfig properties, there are some TextWrangler-specific additions. First, TextWrangler supports the following keys originating in Emacs:
  • coding: similar to charset, but allows you to specify any IANA character set name.
  • mode: allows you to explicitly specify the language. Many of the Emacs-style mode names work, as long as they correspond to supported languages in TextWrangler. In addition, any installed language in TextWrangler may be expressed as a mode name by lowercasing its name and replacing spaces with dashes. For example, "Ruby in HTML" becomes ruby-in-html; or "Strings File" becomes strings-file.
  • make-backup-files: set to 1 or 0, determines whether TextWrangler makes a backup of the file when saving.
  • backup-inhibited: if present and set to 1, will explicitly suppress the creation of backup files when saving.
  • Finally, there are some keys which are explicitly TextWrangler-specific. All of these keys have names that begin with x- in order to prevent collisions with any future core keys. These correspond directly to individual document settings, and if present will override the global preferences:
  • x-typographers-quotes: Use Typographer's Quotes
  • x-balance-while-typing: Balance While Typing
  • x-soft-wrap-text: Soft Wrap Text
  • x-soft-wrap-mode: (string) Must be one of CharacterWidth, WindowWidth, or PageGuide
  • x-soft-wrap-limit: (integer) if the wrap mode is CharacterWidth, specifies the number of characters
  • x-font-name: (string) the display font name
  • x-font-size: (integer) the display font point size
  • x-show-invisibles: Show Invisibles
  • x-show-spaces: Show Spaces
  • Unless otherwise noted, these application-specific keys are all Boolean flags.
  • There's a new (dynamic) command on the File menu: "Save All in Window". The factory default keyboard equivalent is Command-Option-Shift-S. This is enabled if any (or the only) document in the front window has unsaved changes; choosing it will save all documents in the front window.
  • The CSS/SCSS language module is all new. Folding, keyword coloring, function navigation, and completion have all been improved. Various bugs are fixed.
  • Added a new command to the first section of the Search menu: "Search in Document’s Folder" (its title when disabled). When a text document is active in the front window, this command is enabled and will activate the Multi-File Search window with the document's enclosing folder selected as the search location. (The name and path to the folder are displayed in the menu.)
  • The "Arrange" item on the Window menu now presents a submenu with all of the available arrangements. Choosing one will apply it; for any that you use frequently, you can assign a keyboard shorcut in the application's "Menus & Shortcuts" preferences.
  • A new language module for EditorConfig files is now built in, with syntax coloring and section navigation (via the function navigation menu).
  • The INI language module has been rewritten, and provides improved navigation as well as folding.
  • Changes:
  • The "Recent Documents" section in the sidebar (in windows that have one) is gone; it has been replaced with a "recent" popup button in the action area at the bottom of the sidebar. The menu on this button shows recently opened documents, up to the maximum number specified in the Application preferences. The Show/Hide Recent Documents command on the View menu has been removed.
  • The "Start Recording"/"Stop Recording" command has been removed from the Script menu; the system-level support for script recording never did quite work correctly in 10.6 and later, and there is no modern equivalent for the (now deprecated) APIs required to support it. Use the corresponding feature in the AppleScript Editor or Script Debugger instead.
  • Renamed "Collapse All Folds" on the View menu to "Collapse Top-Level Folds", because that's what it really does.
  • The "Process Lines Containing" dialog has been rewritten (and rearranged). It now also includes the search history and Grep pattern menus proximate to the search string.
  • The Entab/Detab dialog box has been rewritten (and its layout updated).
  • Rewrote the Add/Remove Line Numbers dialog
  • Changed the "Installed Languages" button in the Languages prefs pane to match the standard system button appearance.
  • Rewrote and modernized the Prefix/Suffix Lines dialog
  • Rewrote the "Hard Wrap" dialog box.
  • Rewrote the "Process Duplicate Lines" sheet.
  • Rewrote the "Sort Lines" sheet.
  • Cocoa-ized "Compare Against Previous Version".
  • The "encoding couldn't be guessed for this document" sheet has been Cocoa-ized.
  • Updated the "Clear Markers" dialog.
  • Rewrote the password panels used for privilege escalation used in password prompts for SSH.
  • Rewrote the "Replace All" options panel for text factories. For bonus points the fields now use the default editor font and have scrollbars.
  • The sheet for adding Grep patterns from the Find or Multi-File Search window has been rewritten. You can choose a pattern from the popup menu to prefill the name (if you wish to replace an existing pattern).
  • Rewrote the Hex Dump dialog. Resource fork dumping has been retired.
  • The "Options" sheet in the Multi-File Search window has been Cocoaized.
  • The modal panel that appears when you click "Replace All" in the Multi-File Search window has been Cocoaized.
  • The "Show Results" option in the modal "Replace All" options panel has been removed; results for multi-file Replace All are always displayed.
  • Rewrote the panel for creating a new item (file or folder) in a disk browser.
  • Rewrote the "New..." panel in FTP/SFTP browsers.
  • Rewrote several of the sheets used by the FTP/SFTP browser window and save panel.
  • The "Find Differences" dialog box has been rewritten. It should behave substantially as before, but now uses the standard Cocoa path controls. (It is in fact a Cocoa dialog box now.)
  • "Set Marker" now uses the new Cocoa panel.
  • The "Find & Mark All" sheet has been rewritten as a Cocoa sheet.
  • "New..." for filters in the Multi-File Search window now uses a window-modal sheet rather than an app-modal dialog box.
  • #pragma mark and its friends in other languages now support the "Xcode style" syntax, in which a leading and/or trailing minus (-) separated from the rest of the mark text by a space, e.g. - this is a mark - will add a menu separator before and/or after the named mark, as indicated.
  • The Open File by Name window no longer attempts an additional search if no results were found and you hit the "Search" button. If the window isn't finding something that you think it should, please contact Tech Support for assistance.
  • The "Capitalize Sentences" option to Change Case is now smarter about capitalizing sentences that begin with something other than a word character. All of the case transformations are now locale- aware for better correctness with non-English and non-Roman writing languages.
  • Changed the mechanics of creating local cache files for FTP/SFTP temps. A file hierarchy for each account/server is created, and the file stored therein. The folder permissions for the hierarchy are 0700 (u+rwx,ao-rwx).
  • The application no longer uses Growl for notifications, since it now runs only on systems where Notifications are available.
  • [...] Restored the long-lost ability to open Finder "text clippings" (created by dragging text to the Finder from any application) into untitled windows by dragging a clipping on to the application's dock or desktop icon.
  • The "New" and "Old" nomenclature for the Find Differences UI has been replaced by "Left" and "Right".
  • When scanning directories to build the cache for Open File by Name and other purposes, ~/Library/ is now skipped to avoid spending time caching data that is not useful.
  • The language-specific preferences overrides (via the upper list in the "Languages" preferences) can now include the display font; so if you like you use (for example) one font for Markdown, one font for Objective-C, one font for HTML, and so on.
  • "Straighten Quotes" now straightens the "lower" Unicode single and double quotes.
  • Commands on the View => Text Display menu apply to both text views in the Differences window.
  • The about box has been rewritten.
  • The #! menu has been rearranged, and some behaviors for running #! scripts have been changed, as follows:
  • "Run…" has been changed to "Run with Options…". This brings up a dialog which lets you control what is done with the script output. The options to "Run in Debugger" and "Run in Terminal" have been removed, since you can do that explicitly from the #! menu itself (and scripts run that way don't get their output back into the application anyway).
  • The "Run File" command has been removed.
  • When running a script from a file, the application will set the current working directory to the one containing the script file. (The old "chdir to script's directory" option has been removed.)
  • "Check Selection Syntax" and "Run Selection Only" have been removed.
  • The AppleScript commands for running #! filters have been removed.
  • If you want to just reveal a file in the Finder by clicking on the document icon in an editing view's toolbar (and bypass the info panel), hold down the Command key while clicking on the icon.
  • Promoted the "Case sensitive" check box in the "Process Duplicate Lines" dialog box, because the setting affects duplicate detection even when not using a Grep pattern to determine the matching string.
  • When creating a new document, the file is created without HFS type and creator metadata, as long as its name maps to something that is recognizable as a text file (either by internal language mapping or the system identifying its filename extension).
  • TextWrangler no longer pays attention to the global system font smoothing setting when drawing text in text views. The existing application-specific expert preferences still work, though; so use those if you need to adjust font smoothing in the application.
  • When a #! script is run, the following environment variables are now set if applicable:
  • BBEDIT_ACTIVE_PROJECT: Path to the frontmost (z-order) project document if it's on disk BBEDIT_INSTAPROJECT_ROOT: If the frontmost (z-order) project is an instaproject, this is set instead to the path of the folder represented by the project.
  • Objective-C @property declarations are now flagged as prototypes, so they will only appear in the function menu if "Show function prototypes" is turned on in the Appearance preferences.
  • The application will no longer use the TUTX, utxt, or UTF8 HFS file type codes as determinants of the text encoding used inside the document.
  • The "Go To Line" panel has been rewritten; and you can now enter a line number of the form "xx:yy", in which the "yy" is a character offset into the destination line. If the character offset exceeds the number of characters on the line, the insertion point will be placed at the end of the line.
  • The fourth command on the Search menu is now always "Search in Project or Disk Browser" (its title when disabled). It is only available when a project or disk browser is the active window, and when enabled displays either the project's name or the root directory of the disk browser. Selecting this command will activate the Multi-File Search window with the appropriate item selected as the search location.
  • The previous "Arrange" item on the Window menu has been renamed to "Cascade Windows" to describe what it does. The modified version to "Tile Two Front Windows" remains available, on the Arrange submenu.
  • Fixes:
  • TextWrangler 5.0 contains fixes for previously reported issues, as well as the following fixes of note for OS X related symptoms:
  • In order to work around a crash on OS X 10.11 (22523205), code which loads, saves, and interprets printing options in saved document state has been removed. (It is in fact the case that these settings were never actually used once loaded.)
  • Worked around a bug in OS X 10.11 (22636752) in which the font panel would open and be unresponsive to clicks, or changes in the font panel would not affect settings in the Preferences window.
  • Worked around a bug in OS X 10.11 (22872931) in which the application was not notified correctly when files were added, removed, or renamed within folders (Clippings, Scripts, Text Filters, and Stationery).

New in TextWrangler 4.5.12 Build 3398 (Dec 9, 2014)

  • Additions:
  • This release consists entirely of a change for compatibility with future OS releases, and contains no new features.
  • Fixes:
  • Added some code to work around a bug in OS X 10.10 Yosemite (18785168/18701840) in which the height of the Open and Save panels would creep by 22 pixels each time, until the bottom edge of the panel was off screen and inaccessible.

New in TextWrangler 4.5.11 Build 3394 (Oct 16, 2014)

  • Additions:
  • This release consists entirely of a change for compatibility with future OS releases, and contains no new features.
  • Fixes:
  • Worked around a crash which would occur when using the file panels on OS X 10.10. (Radar 18008831)

New in TextWrangler 4.5.10 Build 3392 (Aug 27, 2014)

  • Changes:
  • Implemented the latest code-signing procedures recommended by Apple for compatibility with future releases of OS X.

New in TextWrangler 4.5.9 Build 3390 (Jun 7, 2014)

  • Additions:
  • This release consists entirely of fixes for reported issues, and contains no new features.
  • Fixes:
  • Fixed crash which would occur occasionally (depending on the shape of memory) when trying to balance delimiters and the selection start was at the beginning of the document.
  • Worked around an elusive OS behavior in which the application would receive spurious change notifications for folders that it wasn't actually watching, which in turn triggered inappropriate refreshes of the Scripts, Text Filters, Stationery, and/or Clippings menus.
  • Fixed likely cause of an occasional crash at startup.

New in TextWrangler 4.5.8 Build 3380 (Apr 9, 2014)

  • Fixes:
  • Fixed hang which would occur if Spotlight was blocked on indexing when bringing up a source picker (as in multi-file search or text factory execution).
  • The application no longer claims to be able to edit "Java Web Start" files, which should prevent the OS from inappropriately opening them after downloading.
  • Fixed bug in which the first right-arrow gesture in a text document would have no effect when the document had been opened with soft wrapping turned on and the insertion point was at the very beginning of the document.
  • Fixed a cluster of bugs which conspired to prevent image windows from opening up with correct size and placement; the image's dimensions are now listed in the Window menu as well.
  • Fixed bug in which keyboard equivalents including the Shift key couldn't be set properly in the "Menus & Shortcuts" preferences.
  • Fixed crash which would occur when using the "New..." button in an FTP browser window while the item list was empty.
  • Fixed bug in which horizontal scrollbar calibration would get out of whack after deleting (or shortening) the longest line in the file, and then inserting text elsewhere to create a line that was longer than the previous record holder.
  • Fixed bug in which the line number bar would show incorrect line numbers following the beginning of a folded range of text.
  • After a conversation with Gruber, changed the UTI conformance for net.daringfireball.markdown from public.text to public.plain-text. This will fix QuickLook's failure to display Markdown files (it would show a document icon instead).
  • Changed the name of the "Data File" pseudo-language to "Text File", and added ".txt" and ".text" as default mappings to that language (in addition to the existing ".data" and ".dat'").
  • Fixed bug in which files which should have triggered a privilege escalation when opening did not, and instead reported a 10004 error.
  • Fixed a bug in which changes to display configuration would cause windows to be incorrectly reshaped in some situations. (Typically when an external display was removed from a laptop, and the window was located on the external display and was larger in either dimension than could be displayed on the laptop screen.)

New in TextWrangler 4.5.7 Build 3370 (Mar 5, 2014)

  • Additions:
  • This release consists entirely of fixes for reported issues, and contains no new features.
  • Fixes:
  • Fixed bug in which progress dialogs would leak memory.
  • Fixed memory leak in the innards of the font system.
  • Made changes to significantly improve performance when generating syntax-coloring information for extremely large files (SQL dumps being a good example of same).
  • Fixed a performance bug when scrolling in text views with extremely long lines and the Line Numbers bar visible.
  • Fixed bug in which data structures backing the Scripts menu (and other similar folder-backed menus) were not properly released when the menu was refreshed, leading to creeping memory use.
  • Fixed a memory leak in SFTP process cleanup.
  • Made a change to work around a mystery crash at startup.
  • Various internal changes to improve stability.
  • Fixed bug in which one pane of a split-pane text view would get blanked out in certain circumstances. (Replace All in a split window was a good way to reproduce this.)
  • Made changes to improve the display of path names in menus when the path is ~ or /.
  • Fixed a bug in which FTP browsers reopened as part of startup state restoration would never reconnect to their previous locations and always drop a sheet asking for connection information.
  • When reopening files during state restoration at startup, the application will no longer attempt to mount volumes that are not available (e.g. remote file server volumes). This should resolve hangs that occur when the system goes off and tries to reconnect to a server that is no longer available (as tends to occur when taking a laptop home from the office).
  • If for some reason you preferred the old behavior and want the application to attempt remounting of volumes containing reopened files, you can use this expert preference:
  • defaults write com.barebones.textwrangler AllowVolumeMountDuringStateRestore -bool YES
  • When generating the Markers popup, leading whitespace from the marker name is now used to indent the menu item, so that type-to-select works correctly in the menu.
  • Fixed a bug in which files opened by external request when starting the application (e.g. double-clicking a document in the Finder) were opened before sleep state was restored, resulting in the desired documents ending up in their own buried window, rather than active.

New in TextWrangler 4.5.6 Build 3356 (Jan 23, 2014)

  • Additions:
  • This release consists entirely of fixes for reported issues, and contains no new features.
  • Fixes:
  • Fixed bug in which bz2-compressed files were not read correctly.
  • Fixed bug in the Fortran scanner in which it was confused by certain keywords appearing out of context.
  • Fixed crash when using "Find in Reference" with no document open.
  • Updated copyright year.
  • Fixed a bug in the Fortran function scanner in which subroutine/function ends weren't correctly detected when the qualifying identifier didn't end exactly at a line break.
  • Fixed bug in which the functions and folds could be out of sync if the document contents were reloaded from disk or reverted.
  • Restored the previous order of startup so that crash recovery takes place after sleep state restoration.
  • Fixed cosmetic glitch in which the pop-down arrow icon in the header of disk browsers would sometimes draw in the toolbar area.
  • We now preflight the use of xcrun and avoid it if we can determine that the developer command-line tools were not installed. The AskXcodeForCommandLineTools expert preference is now obsolete.
  • Fixed crash which would occur if an error occurred while trying to save an FTP/SFTP bookmark's password into the keychain. (The error is now logged to console, instead.)
  • Fixed bug in which heavy FTP logging activity would cause the application to run out of memory and crash.
  • Fixed bug in which the FTP log file was created with (usually incorrect) random permissions. It is now created u+rw as intended.
  • Fixed crash which would occur while typing in one of the file lists in a multi-file Find Differences results window.
  • Fixed lurking bug which would occur while processing identical files during a multi-file Find Differences operation.
  • Fixed bug in which Text Factory transformations applied to untitled documents would change the document's line endings to "Classic Mac (CR)".
  • Fixed a bug which had no visible effect, but which triggered a warning from the graphics system when toggling check boxes in the Multi-File Search window's source list.

New in TextWrangler 4.5.5 Build 3346 (Dec 19, 2013)

  • Additions:
  • This release consists entirely of fixes for reported issues, and contains no new features.
  • Changes:
  • Changed the Dash support to use the newer lookup syntax, and added expert-preferences support for specifying which docset keys to include in the query. This is done on a per-language basis, by specifying an array of keys in a defaults write command, thusly:
  • defaults write com.barebones.bbedit DashQueryKeys_ -array
  • For example, for Objective-C++:
  • defaults write com.barebones.bbedit DashQueryKeys_Objective-C++ -array cpp iphoneos macosx appledoc cocos2d cocos2dx cocos3d kobold2d sparrow c manpages
  • The list of query keys recommended for various languages may be found here. Note that you must use TextWrangler's human-readable language name in the defaults write above, not Dash's.
  • TextWrangler now passes through the document filename extension to Dash when making queries (as long as the document is backed by a file on disk).
  • Fixes:
  • Implemented a workaround for file corruption on SMB volumes when running on OS X 10.9 (caused by a bug in the OS, 15627108).
  • Fixed bug in which the application would (inappropriately) look inside of its own package for attachment scripts in cases where the Attachment Scripts application support folder was absent or unreadable.
  • Fixed bug in which running an AppleScript script from the Scripts menu would occasionally trigger a refresh of the Scripts menu and palette.
  • Added support for MODULE PROCEDURE statements in Fortran, which fixes a crash in the Fortran function scanner. INTERFACE declaration blocks are also supported, for the same reason.
  • The order in which language modules are loaded is now relevant to the order in which filename extensions are mapped to languages, which ensures consistent behavior of same.
  • Worked around a bug in OS X 10.9 (15646538) which would cause a crash when returning internal scripting error information in certain situations.
  • Fixed bug in which UTF-8 text dragged from results lists was zero length.
  • Fixed bug in which the Fortran function scanner would crash when given garbage input (basically, a mangled source file in which no structure blocks were ever terminated with END statements).
  • Fixed bug in which function (F1-F20) keys could not be assigned as keyboard equivalents (though if they had previously been set, they would continue to work).

New in TextWrangler 4.5.3 Build 3310 (Jul 18, 2013)

  • Additions:
  • This release consists entirely of fixes for reported issues, and contains no new features.
  • Changes:
  • When starting the application from somewhere other than /Applications/ (or ~/Applications/), you're now offered the opportunity to relocate it to /Applications. This replaces the old alert about running from the install image, and provides a better first-run experience as well. (This all only applies to non-App Store builds.)
  • When starting the application, holding down the Command, Control, and Shift keys will now give you the opportunity to discard any existing auto-save state. You should do so with extreme caution; discarding the auto-save state means that you will lose any unsaved changes or untitled documents that were previously remembered as part of the crash recovery mechanics.
  • Made some cosmetic adjustments to the Line Numbers bar in editing views.
  • Made some cosmetic adjustments to the Cursor Position display in editing view status bars.
  • Fixes:
  • Fixed a bug in which horizontal scrollbar calibration would be incorrect in certain edge cases; it should now generally be more accurate than before.
  • Fixed bug in which clicking the "View Privacy Policy" button in the TextWrangler first-run/register dialog would report an error instead of going to the privacy page.
  • Fixed bug in which the x-counterpart variable in files would cause a failure to find the counterpart when they were of differing languages or names. Also added Resources as a search directory for counterparts.
  • Rewrote our custom cursors to use image-based NSCursor instead of CURS resources, for great justice (and correct appearance on retina displays).
  • Since the contents of */Library/QuickTime/ seem to exist only to crash applications, those plug-ins are now prevented from loading into our address space.
  • Application state snapshots now include the count of untitled windows, to avoid confusion when creating new untitled documents after starting up with saved state.
  • Made a change to prevent addition of a default filename extension when doing a Save As or other operation which involved generating a default file name, and the document name already had an extension.
  • Fixed bug in which closing the last document in an editing window would not close the window in situations where multiple documents had been selected in the window's sidebar.
  • Fixed crash which would occur when closing a document listed in the sidebar, after the sidebar item had been dragged into a different order in the list. (At that point the item would fail to update its name if the file's name on disk changed, as well.)
  • Made changes so that the FTP/SFTP bookmark internals will return and report errors when given bad input, rather than crashing. (Still no clarity on why the bad input was happening, though.)
  • Fixed bug which would cause internal exceptions (and subsequent strange behavior, like all menus being disabled) at startup on certain systems. I don't know why she swallowed a fly.
  • Fixed a bug in the twfind tool in which it would fail to report results back to standard output.
  • The built-in software update mechanism now uses https to connect to the update server for fetching update information, and verifies the downloaded update before installation to guard against tampering or corruption. This fixes CVE-2013-3667, thanks to Chris Hickstein for the report.
  • Made a change to the window geometry calculations so that default diff results tiling is on the main screen again in systems containing two (or more) screens of identical shape and size.
  • Fixed crash which would occur when opening a document with saved state indicating a split view, but for which the split ended up not being restored (possibly due to display geometry changes).
  • When choosing a font size that is too large (as defined by its line height exceeding the height of the text view it's asked to display in), an editing view will refuse the change. This will address the occasional situation in which the edit fields in the Find or Multi-File Search windows appear to be blank or behave strangely when the default editing font is set to a sufficiently large size.
  • Fixed bug in which Move Line Up/Down didn't properly scroll the moved text back into view in situations where it should have.
  • Crash my app at startup and you're banned from the ballpark. Yeah, EasySIMBL, I'm talking to you.
  • The various HTML DTD tables are now included in TextWrangler, to improve accuracy in code folding computation.
  • Fixed crash which would occur sometimes when closing documents while the Multi-File Search window was open.
  • Flash Player, you have generated your last crash log.
  • Added a build phase to strip xattrs from items in the application package, which solves a problem in which the OS creates Finder attribute files when the application is copied to a non-HFS file system (e.g. a FAT-formatted USB thumb drive) and in so doing renders the application's code signature invalid.
  • Fixed crash which would occur rarely when trying to open a document.
  • Fixed crash which would occur sometimes when using "Hard Wrap Text" to wrap a paragraph at the beginning of the document.

New in TextWrangler 4.5.2 Build 3300 (Jun 5, 2013)

  • Additions:
  • This release consists entirely of fixes for reported issues, and contains no new features, nor changes to existing features.
  • Fixes:
  • Fixed bug in which certain operations which involved placing text on the Clipboard would fail with a -102 error if done immediately after rebooting.
  • When scanning HTML documents for folds, empty XML tags will no longer throw off the calculation (even if the document is not using XML/XHTML).
  • Fixed crash which could happen when preparing data for export to the Services interface.
  • Fixed bug in which the horizontal scrollbar calibration would be incorrect in situations where multiple lines had the maximum number of characters (measured over the document) but different numbers of tabs.
  • Fixed cosmetics of the toolbar in { results, disk } browser windows when the navigation bar was turned off.
  • Fixed bug in which changes to the "Text Status Bar" preferences would affect only the active text view.
  • Fixed bug in which dragged rectangular selections would include text from outside the selected ranges in cases where the selection did not begin at the start of the selected line(s).
  • Fixed bug in which the wrong menu item was selected when doing a Save As and the document's encoding was Western (Mac OS Roman).
  • The "Open Text Documents" section of the popup menus in the Find Differences dialog is now sorted by name, rather than by Z order. This makes it easier to cope with large numbers of open documents.
  • Fixed bug in which page-guide-colored turds would appear in the scrollbar when changing the selection in windows that were narrower than the page guide width by less than the width of the sidebar.
  • Fixed incorrect default name in the save panel when using "Save As" on a document whose name begins with a period.
  • Added support for using the scroll wheel while making or dragging text selections.
  • Fixed bug in which the FTP browser would get confused and/or crash in situations where changing directories or refreshing the listing would result in the number of items shrinking.
  • Fixed crash which would occur in some situations as the result of a file name change or other external file system changes.
  • Fixed bug in which the Save panel wasn't made to point at the directory most suitable for saving a document. This might also manifest as the Open panel not opening on the directory that one might expect.
  • Fixed bug in which PHP coloring would go wrong in cases where a variable was followed immediately by a quote character.
  • .DS_Store files and other Finder administrivia are now hidden from file listings in disk browsers, even when "[Show] Everything" is turned on.
  • Made a change to the low-level SGML parser, so that double quotes inside of processing instructions are expected to be balanced, and from that, prevent ?> inside of double quotes from prematurely ending the PI. This will ensure that (for example) PHP code is correctly scanned for functions and syntax coloring when it uses double-quoted strings that contain ?>.
  • Fixed bug in which spell-checking ranges would creep while editing in certain situations.
  • Fixed bug which would lead to multiple synthetic mouse events being lost (e.g. multi-click button programming using USB Overdrive or other mouse software), as well as some other unpredictable input event behaviors.
  • Fixed bug in which the Live Search box was initially unresponsive when the Editor_AlwaysOpenQuickFind expert preference was turned on.
  • Made a change to prevent the annoying system alert when trying to save a text document that doesn't use one of the state-approved filename extensions.
  • Fixed crash which would occur when insufficient memory was available to compare two very large files.
  • Fixed bug in which the Setup window bookmark editor would allow you to enter a bookmark without a server name, and then crash when trying to save it.
  • Fixed bug in which the Counterparts menu would show gigantic previews from Photoshop documents instead of scaling them down to 16px for appropriate menu display.
  • Fixed bug in which the "Decimal" column in the Entities floater was not sorted correctly, and fixed layout goofs in the window. (Also, restored missing Hex column.)
  • When no other settings are present (having been carried over from old versions), Find Differences results will be presented on the largest display by default, rather than the "main" display (the one containing the menu bar).
  • All of the screen-geometry internals have been rewritten to use NSScreen instead of the legacy HIToolbox/Quickdraw APIs. Although there's no way of knowing whether this will fix any report symptoms (such as window titles under the menu bar), it'll be easier to say "[NSScreen visibleFrame] is returning the wrong answer sometimes" and get help with a current API.
  • Fixed a collection of bugs which conspired to cause the application to consume more CPU when in the background than it should have.
  • Updated the Wrap Around indicator for retina displays.
  • Updated the Clippings menu title art for retina displays.
  • When making the sidebar visible, limit its width for the sake of appearance and usability.
  • Changed the counterpart discovery logic ("Open Counterpart" and the Counterparts navigation bar menu) so that it looks in the document's directory (and suitable ancestral peers) before consulting Xcode or the Open File by Name cache.
  • Made a change to significantly improve the performance of counterpart matching for C-family sources.
  • The YAML parser wasn't handling EOF correctly in certain circumstances, resulting in incorrect fold points throughout the document.
  • Fixed bug in which AppleScript comparison operators were potentially being unnecessarily executed multiple times for each comparison test. (There's no evidence that this caused any incorrect behavior, only that it was wrong.)
  • Fixed bug in which the Undo state for "Remove Line Breaks" was incorrect, leading to lost content when undoing a Remove Line Breaks operation.
  • Use NSUserName/NSFullUserName instead of CSCopyUserName.
  • Completed the list of ARC storage qualifiers and added some missing property attributes for Objective-C/C++, and added clang-specific __has_XXX keywords to the built-in keywords for C/C++/Objective-C/C++
  • Fixed bug in which the Objective-C/C++ function scanner would get confused by @interface and @protocol forward declarations.
  • Added a "Unix man page" language module, which is useful for live-previewing mandoc files as you edit them. (There's no "function" navigation or syntax coloring, only live-preview support.)
  • Fixed bug in which the insertion point was not drawn correctly in inactive text views (it should have been drawn as a dashed line, but was drawn solid).

New in TextWrangler 4.5.1 Build 3280 (Apr 4, 2013)

  • Fixes:
  • Quoted some parts of PCRE error messages to make them a little easier to read.
  • Fixed autorelease memory leaks while doing Process Lines Containing and some related text transforms.
  • Added preference search metadata for the "Open documents into the front window when possible" setting.
  • Fixed bug in which the Text Encoding popup in the save panel did not reflect the document's current encoding setting.
  • Added UTI declaration for Textile: com.barebones.textile-source conforming to public.text.
  • Updated various pieces of artwork to correct appearance on retina displays.
  • Corrected drawing layout of the inline "collapsed fold" indicator.
  • Made a change so that the file name extension is always displayed in the save panel when appropriate, even if "Show all filename extensions" is turned off in the Finder's preferences.
  • Removed is from the JavaScript/ActionScript keyword list.
  • Fixed a bug in the TeX syntax coloring which (under certain circumstances, such as whenever it was asked to run...) caused it to stop scanning as soon as it started.
  • Fixed bug in which counterpart matches from the Open File by Name cache were not correctly screened by language when they should have been.
  • Added public.html to the list of file types that will get the application's "Text Document" icon.
  • Fixed a bug in which excessive memory was used for some internal data structures, which would lead to a crash when opening very large and complicated files (usually XML).
  • Mac App Store builds are now identified by a line item in the about box.
  • The display glyph for invisible spaces (when "Show Invisible" and "Show Spaces" are both turned on) is now U+00B7 (MIDDLE DOT). If spaces don't display when those settings are turned on, then your display font is missing that glyph, and you should report it to your font's developer as a bug. (I would have used U+1427 (CANADIAN SYLLABICS FINAL MIDDLE DOT) for the humour value alone, but not enough fonts supported that glyph. Sorry.)
  • Fixed bug in which using Hex Dump to dump a single character would make life miserable for all concerned.
  • When pasting text into an empty untitled document, the application will now try to guess its encoding (from any metadata that may be in the text itself). This fixes a case in which you'd get an encoding mismatch warning when pasting (for example) XML with a character set of utf-16 into an empty document, which defaults to UTF-8.
  • When evaluating a line comment for removal, whitespace at the end of the comment delimiter is now disregarded.
  • Fixed bug in the Fortran (yes, Fortran) function scanner in which functions were missed unless there was at least one blank line after the end of the previous function (or the function was at the beginning of the file).
  • Fixed bug in which paths sent to the Terminal window for execution were incorrectly encoded in situations where an item in the path contained non-ASCII characters.
  • Fixed bug in which selecting an item from the Search History or Grep Patterns popups in the Find window would not correctly update its button enabling.
  • Fixed bug in which "Show hidden items" in the Open panel was checked, but the setting was not honored when opening the panel.
  • The "Enable:" popup in the Open panel now remembers its setting in between invocations of the panel (and across launches of the application).
  • Made changes so that the Save panel pre-selects the base file name of the file being saved, and enforces the correct filename extension for certain document types.
  • The application will no longer write HFS type and creator when saving a document in situations where it doesn't recognize the filename extension being saved; instead, it will write the type and creator only if the document has no filename extension.
  • The font/size displays in the Preferences window now display fractional point sizes.
  • Symlinks are now always enabled in the Open dialog, so that you can follow the ones that point to folders.
  • Fixed bug in which the "Enable" popup in TextWrangler read "All BBEdit Documents" instead of "All TextWrangler Documents".
  • Fixed bug in which the "x" widget highlighting in lists would get stuck when rapidly moving the mouse off the widget into another section of the window.
  • Fixed bug in which Unicode hex displayed in the Character Inspector was always displayed little-endian, even when it should have been displayed big-endian.
  • Fixed bug in which the "Escapes" line in the Character Inspector would not display character escapes correctly in some files.
  • Corrected display of the application icon in the about box on Retina displays.
  • Made comparison of item names in FTP/SFTP listings case-insensitive.
  • Fixed case in which PHP line comments inside of single-line directives (e.g. , you can't make this stuff up...) would cause the PI closer to be missed and subsequently mess up color scanning.
  • Fixed a case in which PHP variable uses followed immediately by a question mark would confuse the syntax coloring thereafter.
  • Fixed bug in which the application-modal Save panel for documents would not save the document when invoked (but the operation was cancelled, so using other means to save the document would work).
  • Non-App Store builds now prevent /Library/QuickTime/Sonix SN9C201 WebCam from loading and crashing us. If you are using an App Store build of BBEdit, remove /Library/QuickTime/Sonix SN9C201 WebCam.component manually.
  • Fixed bug in which certain interactions which could occur after a window-modal "Save As" (most notably, reporting of unmappable characters) would instead fail and report an error.
  • Fixed bug in which the Verilog function scanner would hang on any file.
  • Fixed a bug in the Markdown parser, where in some cases it would miss a closing tag in HTML sections. This affected both syntax coloring and document structure (folding and function popup).
  • Made a change to reduce the amount of time spent displaying startup progress (at the expense of not displaying the name of every single file being reopened).
  • Corrected handling of "//" comments in the Object Pascal function scanner.
  • Updated the I-beam cursor for improved appearance on retina displays.

New in TextWrangler 4.5 Build 3264 (Feb 22, 2013)

  • Additions:
  • 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.textwrangler 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).
  • 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.
  • "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 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.)
  • 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.
  • Text windows get a scripting property: "display magnification". This is a float; 1.0 is normal display.
  • There's a new switch for the edit tool: -m (long form --language). This allows you to specify a language name on the command line when piping data in to edit from a Unix tool.
  • 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.textwrangler FlashBalancePointsWhenNavigating -bool NO
  • Changes:
  • Unix script output logs now live in ~/Library/Logs/TextWrangler/, either in "Unix Script Output.log", or, in the case of script-file-specific log files, in ~/Library/Logs/TextWrangler/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 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; TextWrangler 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.textwrangler LegacySearchStringEscapeMapping -bool YES
  • "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.)
  • 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 BBEdit 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.
  • 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).
  • More improvements to Open File by Name
  • TextWrangler 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.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, TextWrangler 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 editing windows has been updated.
  • Made two behavior changes to Unix tool discovery: first, if the tool's override path is set to /dev/null, TextWrangler 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, TextWrangler 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, TextWrangler 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.textwrangler 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 .
  • 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, TextWrangler now consults with it when looking for Unix helper tools in the absence of an explicit expert override.
  • Control-n and Control-p are synonyms for previous/next when navigating the list of results in Open File by Name windows. OFBN lists.
  • 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".
  • 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
  • Fixes:
  • Leading and trailing whitespace and line breaks are now stripped from string values in codeless language modules, to resolve situations in which a multi-line formatted pattern using (?x:...) ended with one or more carriage returns after the closing parenthesis, which would in turn cause the pattern to not function as intended.
  • Fixed bug in which certain malformations in codeless language modules were not detected early enough to prevent them from causing problems later on.
  • Fixed bug in which "Run in Terminal" and "Run in Debugger" were inappropriately sticky for scripts run from the Scripts or Apply Text Filter menus.
  • Made a change to reduce the amount of time spent loading names from tags files for syntax coloring.
  • Fixed a bug in which the Multi-File Search window did too much work in situations where documents were being opened (or closed) at high frequency.
  • Fixed bug in which changing the Soft Wrap Text settings (Page Guide/Window Width/Character Width) in per-language preferences would set them to the wrong value.
  • Fixed a bug in which Replace All operations consumed far more memory than was appropriate, which in turn would contribute to prematurely running out of memory while processing a large quantity of files.
  • Fixed missing Command-key modifier on the keyboard equivalent for Un/Comment.
  • Added a few more types to the list of things that TextWrangler recognizes as text documents.
  • Fixed crash which would occur when cancelling a download of the user manual.
  • Fixed a bug in which opening (by pulling down) the Open Recent menu would mount remote volumes or disk images when it was really not necessary. That work is now deferred until you actually choose an item from the menu.
  • Fixed internal exception and subsequent crash which would occur when trying to save a Grep pattern (via the Setup window) with an empty field.
  • Fixed bug in which a now-unused preference from an old version would cause the toolbar to remain visible, even when all of the gating preferences were turned off in the Appearance prefs.
  • Fixed bug in which "Replace All" or "Replace to End" would fail in cases where the most recent direct search from the Find window was a "Find Previous", and there were no matches between the start of the selection range and the beginning of the document.
  • Resolved an incorrect icon reference in the application properties which caused blank icons to be displayed for TextWrangler documents; and removed some inappropriate UTI exports.
  • Fixed bug in which New (with Clipboard) incorrectly forced the document's language to "(none)" and thus interfered with automatic language guessing.
  • Fixed bug in which the esq-q Emacs keybinding brought up the Hard Wrap options sheet, instead of just doing it.
  • Fixed a pair of bugs that conspired to mangle windows located on a display which got disconnected; typically they would end up back on the main display, but at an unusably tiny size.
  • Armorplated the suspected site of a nonreproducible crash.
  • Fixed crash which would occur when decoding AppleDouble files from within Zip archives, and the file was missing an entry for the resource fork.
  • Fixed bug in which using the "Close" contextual menu to save and close multiple documents would result in the documents being neither saved nor closed.
  • Added some missing search keywords for items in the Application preferences.
  • Added comment strings to the Verilog and VHDL language modules.
  • Fixed a crash when starting up with items in our Startup Items folder and DragThing running.
  • Fixed crash which would occur when using a service to open items while DragThing was running (and in a couple of other situations).
  • If the front editing window is in full screen mode, then Unix script output will be opened into the front window, rather than into a separate window (and separate space). (In cases where the Unix Script Output window is already open, there will be no change to document grouping or ordering.)
  • Fixed bug in which windows created while TextWrangler was in full screen mode would end up with their title bars under the menu bar after exiting full screen mode.
  • Completion is now allowed in "content" runs of TeX documents.
  • Fixed bug in which C++ typedefs containing namespace declarations would confuse the function scanner.
  • Attempted workaround of an OS bug in which keyboard events registered during or close to the end of a three-finger trackpad drag (to select text) were lost. So, if you did a three-finger drag and hit Cmd-X too quickly after releasing the trackpad, the desired Cut operation would not take place.
  • Fixed bug in which using "Save to FTP Server" on an open document would not correctly update the information in the Currently Open Documents list.
  • Added "rgba" to the CSS keywords list.
  • Fixed crash which would occur when trying to manipulate certain properties of a browser window when no document was being viewed.
  • The inline collapsed-text "pill" indicator is now scaled appropriately for a larger range of font sizes (and looks more attractive at all sizes).
  • Fixed a bug in which certain fonts could not be used for printing.
  • Fixed bug in which the sources list in the Multi-File Search window wasn't highlighted with the proper colors when the window (or the application) was not active.
  • Check for certain (very short) but canonical strings at the beginning of a possible text file. This corrects some cases in which a UTF8 check of the partial file can end up falsely reporting the file as non text, in case the file contains a lot of valid multi-byte UTF-8 characters, and the check ends on a character boundary.
  • Fixed bug in which soft-wrap indentation preferences were not correctly applied when printing.
  • Improved guessing of Objective-C/C++ files.
  • Fixed bug in which the last line of the selection would be skipped entirely when doing a "Print Selection", if the selection did not end with a line break.
  • Fixed bug in which ridiculously long strings were not selectable in the search history menu.
  • "Select Line" and "Select Paragraph" are now disabled in the Find and Multi-File Search windows.
  • Fixed bug which allowed disk browser windows to be collapsed to zero width.
  • You can now use "Replace to End" when the Find window is in front (assuming that the window immediately behind is also an eligible target for a Replace All operation).
  • Truncate the file name in the "Run..." sheet (on the #! menu) to avoid wrapping in the control.
  • Fixed impedance mismatch in the scripting system internals, in which testing for uniqueness of an item's name was case sensitive, but resolving references to items by name was case insensitive, leading to errors when trying to do things like compare two open documents with names differing only in case. (Note that as a side effect of this fix, TextWrangler will be strict about resolving references to objects by name; the case that you supply must match the case of the desired object.)
  • Fixed bug in which the "Apply Text Filter" head menu couldn't be hidden, and corrected the name in the Menus & Shortcuts preferences.
  • Added "!" to the list of characters which is considered when deciding whether a string needs to be shell-escaped before sending it to the Terminal.
  • Fixed bug in which the "Run selection only" option in the Run... command on the #! menu had no effect. Note that along with this fix there's a behavior change: if you have an eligible selection, the "Run" (no ellipsis) command will run the selection; otherwise it will run the whole document. This is different from the previous behavior, in which the "Run selection only" switch was sticky (and since it was invisible, you never knew what would happen).
  • When doing "Find in Reference" URL lookups, only the symbol name (and, if used, the language name) are encoded with percent escapes, rather than applying them to the whole URL string. This way, you can use URL metacharacters in the template string (such as "#") and they'll work.
  • The UseNumericKeypadForCursorMovement preference still works, but since there's no GUI for it, changes to it can only take place outside of the application. Such changes are now correctly detected. Also, there's now notification feedback for toggling the setting on the fly (which can be done using Option-Num-Lock [the upper left key on the numeric keypad]).
  • Canonicalize filter names for the "Apply [Last] Text Filter" command.
  • Corrected bug which caused the Text Encodings preference pane to display stale values after Restore Defaults, unless the app was quit and restarted.
  • Corrected the scripting dictionary to clarify that the search string and replacement string properties are returned as Unicode text; and the search string script and replace string script properties have been removed, since they haven't been used for a long time (and access to them didn't work).
  • Fixed bug in which the line number bar didn't always refresh correctly when adjusting the line spacing preference.
  • Fixed bug in which list views with keyboard focus wouldn't allow keystrokes that didn't belong to them to propagate to the rest of the system.
  • A bug in the python module caused folds to start in the wrong place when a foldable, non-comment block began with a comment.
  • A Java file's fold points and function popup would become confused if, under certain circumstances, a class instance was created and properties were accessed all in the same statement, such as with new Foo(new Bar(bat).baz()).
  • Attempts to change the soft wrap mode to an invalid value using the scripting interface will now report an error.
  • Fixed bug in which the "Edit" button for editing the known_hosts file in case of an SSH host verification failure didn't work on newer versions of the OS.
  • "Save As" is now disabled when the active document is "synthetic" (derived from the contents of a Zip archive or tarball, or downloaded directly from a URL). Use "Save a Copy", which behaves correctly in ways that "Save As" did not when it was inappropriately enabled.
  • The font panel accessory view (with the tab width setting) no longer comes and goes whenever the font panel's event target changes; this in turn eliminates the tendency of the font panel to "shimmy" when closing or opening a bunch of documents.
  • Fixed bug in which the per-language tab width setting wasn't properly applied when changing a document's language setting.
  • Added large and high-resolution icons for the application.
  • When importing the clipboard from another application, we now rotate the clipboard ring (in a fashion similar to what happens when you Copy; so no rotation occurs if the current slot is empty). This way, "Paste Previous" can be used with text copied from other applications.
  • When running a shell process (for #! scripts and other purposes), we take a moment to grab the login environment and use that to set up the shell environment for the script being run. This should (among other things) ensure that $PATH and other important environment variables are set correctly when running Unix scripts and commands from within the application.
  • Fixed bug in which window split options were inappropriately mirrored into other windows (e.g. results or disk browsers).
  • Fixed bug in which windows containing editing views were allowed to be made narrower than was healthy.
  • Corrected a bug which caused the Menus & Shortcuts pane to display stale keystroke data until the window had been recycled.
  • Made it possible to use the Menus and Shortcuts pref pane to assign key equivalents to scripts nested in folders.
  • Fixed a bug which made clearing or assigning key equivalents which contained glyphs unreliable.
  • The Patterns setup editor and find menus menus are kept in sync. Items may be rearranged in the Setup window, and the menu will immediately reflect those changes.
  • Removed some obsolete floaters from the AppleScript dictionary.
  • Disk Browsers expose a r/w "root path" property in the scripting dictionary. It does what it sounds like it does.
  • Fixed a bug which caused Live Search to mis-report the hit count if a match abuts its own doppelgänger.
  • replacing all the text in a view via the scripting interface (or certain other mechanics) no longer scrolls to the end.
  • Fixed crash which would occur after copying diffs to the clipboard, or exporting them to a text file.
  • When exporting results from a Find Differences window or results browser, the application now provides a default file name.
  • Results exported from a Find Differences window are now written with Unix line breaks, instead of legacy Mac OS.
  • When exporting results from a Find Differences window or results browser, the resulting file will only have its file type and creator assigned if the application determines that the file name indicates that it's not a text file.
  • Fixed a hang which could occur if a codeless language module had a grep pattern that returned a 0-length match.
  • Disable the Replace All command if "Selected text only" is checked, and the target view has a rectangular selection.
  • Disable all the Find buttons if the search string is empty.
  • Zip browsers' nodes are sorted alphabetically, not by pack date.
  • Shift Right only adds whitespace to lines that contain non-whitespace characters. The new behavior is keyed to an expert preference. It is still the default; but if you prefer the previous behavior, you may enable it: defaults write com.barebones.textwrangler AllowShiftRightToIndentWhitespaceOnlyLines -bool YES. This preference can also be set per-language in the usual fashion, by adding the language's name to the preference key: defaults write com.barebones.textwrangler AllowShiftRightToIndentWhitespaceOnlyLines_C++ -bool YES (The Expert Preferences help has been updated to include this information.)
  • Fixed a bug which caused the functions popup (and floater) to display callouts regardless of the preference setting.
  • "Use Selection for Replace" with an empty selection clears the replace string.
  • Fixed case in which using "Replace" or "Replace & Find" in the Find window would replace the entire contents of the document with the replacement string, in specific cases involving a zero-length Grep match and the document not having a selection range.
  • If a remembered window was full screen when quitting, it is restored to that state when starting up.
  • When restoring application state which includes a zip browser, we open a zip browser instead of a disk browser to the parent folder.
  • When saving a new untitled document, we now make an attempt to pick a reasonable default directory for the save panel, when a disk browser is immediately behind the document's window.
  • Auto-folds can be collapsed from either start or end indicators.
  • When saving a file with "Save a Copy" we attempt to create the copy with same permissions as the original file.
  • Fixed a problem where block commented code ended up with an incorrect selection.
  • Corrected a bug which would cause the Preferences window's panel selector and panel content to get out of sync.
  • If you enable Typographer's quotes, TextWrangler will only insert them in stuff that looks like prose. This allows you to have fancy quotes in the comments and strings in your C files, but still use the real deal in the code parts. (also works in HTML, etc.)
  • New documents created as output from text transformations (e.g. Process Lines Containing) will follow the same rules as all other created or opened documents, when deciding whether to make a new window or not.
  • Fixed a bug which could cause the scrollbar size/position to become stale when cutting text.
  • Command-backspace is now an alternative to Command-D in the "Save changes before closing" dialog.
  • Fixed a bug which would cause the vertical scrollbar to get out of whack if TextWrangler was tracking changes to a file on disk, and the file got substantially shorter (like less than one screenful).
  • Corrected horizontal scrollbar calibration when dealing with long lines containing characters which required glyph substitution in the current display font.
  • Assigning or removing a shortcut to a submenu no longer collapses the parent node. While I was at it, selecting a new top menu resets the scroll position and selection in the right pane, so things look much neater.
  • Call -deselectAll: when loading each pane of the Setup editors. This looks nicer, IMO.
  • Holding-down the Option key when double-clicking, pressing the Return or Enter keys, clicking the Open button, or closing your eyes and thinking of ponies, will open an additional FTP/SFTP browser window if the selected item is a directory. (Just like it says in the manual.)
  • Fixed bug in function generation for Fortran (yes, really) which caused Go -> Functions -> End to fail on the last function in the file.
  • Made some changes to guard against the suspected cause of a crash while attempting to arrange windows under some conditions.
  • Fixed bug in which the function menu would navigate in the wrong window in situations where a document was opened from a Search Results window into an existing multiple-document window.

New in TextWrangler 4.0.1 Build 3152 (May 16, 2012)

  • Fixes:
  • Fixed an internal error that generated lots of console noise when starting a multi-file search.
  • Fixed a bug in which the Multi-File Search window did too much work in situations where documents were being opened (or closed) at high frequency.
  • Fixed bug in which changing the Soft Wrap Text settings (Page Guide/Window Width/Character Width) in per-language preferences would set them to the wrong value.
  • Fixed bug in which password changes (for items already stored in the keychain) were not saved when they should have been.
  • Fixed a bug in which Replace All operations consumed far more memory than was appropriate, which in turn would contribute to prematurely running out of memory while processing a large quantity of files.
  • Fixed bug in which the application didn't accept public.url or public.file-url data types via the Services interface, even though it claimed it did so.
  • Added a few more types to the list of things that TextWrangler recognizes as text documents.
  • Made a change to avoid tickling a bug on 10.6.x which could cause stalls or a crash while saving file references (such as for recent items, and a few other internal uses).
  • Fixed crash which would occur when cancelling a download of the user manual.
  • Fixed a bug in which opening (by pulling down) the Open Recent menu would mount remote volumes or disk images when it was really not necessary. That work is now deferred until you actually choose an item from the menu.
  • Fixed internal exception and subsequent crash which would occur when trying to save a Grep pattern (via the Setup window) with an empty field.
  • Fixed bug in which a now-unused preference from an old version would cause the toolbar to remain visible, even when all of the gating preferences were turned off in the Appearance prefs.
  • Fixed a bug in which file locators (used in projects and other places) would inappropriately carry over a legacy-format alias record.
  • Fixed a bug in which folders in project windows would sometimes refuse to twist open after opening the project.
  • When considering dropped files for insertion, the application will now inspect their contents in cases in which the file metadata doesn't indicate that it's a text file.
  • Fixed bug in which "Replace All" or "Replace to End" would fail in cases where the most recent direct search from the Find window was a "Find Previous", and there were no matches between the start of the selection range and the beginning of the document.
  • Fixed bug in which some TextWrangler preferences were not migrated from previous versions when they should have been.
  • Fixed bug in which New (with Clipboard) incorrectly forced the document's language to (none) and thus interfered with automatic language guessing.
  • Fixed bug in which the esq-q Emacs keybinding brought up the Hard Wrap options sheet, instead of just doing it.
  • Fixed a pair of bugs that conspired to mangle windows located on a display which got disconnected; typically they would end up back on the main display, but at an unusably tiny size.
  • Armorplated the suspected site of a nonreproducible crash.
  • Fixed crash which would occur when decoding AppleDouble files from within Zip archives, and the file was missing an entry for the resource fork.
  • Fixed bug in which using the "Close" contextual menu to save and close multiple documents would result in the documents being neither saved nor closed.
  • Fixed bug in which the file type filter setting was not correctly retained when closing and reopening a project. Along the way, cleaned up some glitches in the file filter menu.
  • Added some missing search keywords for items in the Application preferences.
  • Added comment strings to the Verilog and VHDL language modules.
  • Fixed a crash when starting up with items in our Startup Items folder and DragThing running.
  • Fixed crash which would occur when using a service to open items while DragThing was running (and in a couple of other situations).

New in TextWrangler 4.0 Build 3142 (Apr 11, 2012)

  • Additions:
  • There is a new folder in Application Support/TextWrangler/, named Setup. It contains data that previously was stored either in the application preferences or in the com.barebones.textwrangler.preferenceData folder that was in ~/Library/Preferences/. Specifically: file filters, FTP/SFTP bookmarks, Grep patterns, and key bindings are stored here.
  • The ability of TextWrangler to search inside of compressed files can now 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 twfind 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 an 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, and Grep patterns. Use the "+" button to add something, "-" to remove it, double-click (or Enter) to edit.
  • 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.
  • 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.textwrangler 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. The file list is manually reorderable and can be organized using collections, which addresses a longstanding request from heavy users of the drawer.
  • 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 TextWrangler 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.
  • 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 TextWrangler.
  • Verilog and VHDL language modules are now built in. These were previously written by Yasuhisa Kato.
  • 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, TextWrangler will import any BBColors files that you have created. Color schemes live in ~/Library/Application Support/TextWrangler/Color Schemes/. Note: Using the bbcolors command-line tool to make color changes will have no effect in TextWrangler 4.
  • Added support for the include command/directive in ActionScript files. Included files are now listed in the file inclusions popup.
  • TextWrangler now stores document state 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.
  • For languages backed by a codeless language module, TextWrangler now generates fold points for delimited blocks. (A good example of this is the "Go" language module, available at http://www.barebones.com/support/bbedit/plugin_library.html, 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", TextWrangler 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. 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 TextWrangler 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 TextWrangler. 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.
  • There's a new script attachment point for documents: documentShouldFinalizeAuthenticatedSave. This gets called in cases where an authenticated save is necessary (for text documents only).
  • The "Strip trailing whitespace" and "Ensure file ends with line break" options can now be configured per-language, if desired.
  • Added a "Privacy" button in the Application preferences for non-App Store builds, linked to the privacy policy on our web site.
  • Other notes:
  • Choosing "Open Selection" (which is available when appropriate text is selected in the front editing view) will now bring up the Open File by Name window, and populate the search box with the selected text (and the search results, if any).
  • The contents of the search box are now accessible via the scripting interface, as the search string property:
`get search string of open file by name window`
  • `set search string of open file by name window to "Hello World"`
  • Changing the search string will update the results.
  • Changes:
  • TextWrangler now requires Mac OS X 10.6.
  • Made some pretty significant changes to the way scripts and filters are installed and managed
  • NB: Text Factory execution is no longer supported.
  • When starting up, TextWrangler 4 will copy items from your Unix Scripts and Unix Filters folders into your Scripts and Text Filters folders, as appropriate. TextWrangler leaves a cookie behind in its Application Support folder to indicate that this has been done.
  • The old modal Find dialog is gone.
  • 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.
  • 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 (including color schemes) and extension mappings are now handled on a "customizing" basis.
  • 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 Text Window", "Save Default FTP Browser", etc.
  • 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.
  • 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. Hold down the Option key, and "Arrange" changes to to "Tile Two Front Windows" (and does just that).
  • 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 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.
  • 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.
  • The system key equivalent for "Enter Full Screen" is Cmd-Option-F, which was also the factory default for "Live Search". We must perforce give way, so Live Search is now Cmd-Control-F by default. As always, both of these may be adjusted to taste in the "Menus & Shortcuts" preferences.
  • 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 "Text Files Only" filtering in 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.textwrangler InspectTextFileContentsForListFiltering -bool NO
  • JavaScript and ActionScript now have separate preferences to control the display of anonymous functions in the function popup.
  • Tools (and their man pages) are no longer copied to /usr/local/bin, but are instead symlinked out of the bundle to those locations. Thus, updating the application automatically updates the tools, once the symlinks are installed.
  • Shift-key at startup no longer suppresses 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.
  • 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 TextWrangler 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 BBEdit text factories where desired, because the latter has run their filters this way since forever.
  • When entering full screen mode, document windows are now sized to the same width as they were before entering full screen mode, which preserves the "distraction free" semantics of full screen mode.
If you want your full-screen windows to consume screen real estate like a hungry wumpus, you can hold down the Command key while clicking on the "enter full screen" widget, or use an expert preference:
defaults write com.barebones.textwrangler FullScreenWindowsHogScreen -bool YES
  • Support for reading QuickTime movies has been removed (it was off by default, anyway).
  • Added support for the emacs esc-T (transpose-words) gesture.
  • TextWrangler now makes a reasonable guess at a filename extension when using "Save As" for a new document.
  • The user manual is no longer included in the application package. When you choose "User Manual" from the help menu, the application will download the proper user manual PDF and store it in the Application Support folder. (Thus, it only needs to download the PDF once, unless you remove it or update to a new version.)
  • The "Open the User Manual" option has been removed from the first run dialog.
  • The file filter menu used in disk browsers and project windows has been reworked to make it a little more useful.
  • The default keyboard equivalent for "Un/Comment Selection" is now Command-/, for consistency with Xcode.
  • When using Un/Comment, if nothing is selected, TextWrangler will apply the line-comment delimiter to the entire line containing the insertion point.

New in TextWrangler 3.5.3 Build 2890 (Jan 24, 2011)

  • Additions & Changes:
  • TextWrangler 3.5.3 contains no new features, nor changes to existing features.
  • Fixes:
  • Fixed a fistful of bugs which contributed to unnecessarily high memory utilization.
  • When importing service data, line breaks are now converted to the internal representation.
  • TextWrangler now advertises its ability to supply and accept service data as UTF-8 (as well as UTF-16 and plain Mac Roman text).
  • Fixed bug in which a multi-file or text factory Replace All would touch the file being processed, even if it contained no matches for the search string.
  • If "Make Writeable" fails because you have insufficient (non-elevated) privileges, TextWrangler will flag the file for authenticated saving instead of refusing to let you do anything. (Note: This does not apply to App Store versions of TextWrangler, which are not able to perform authenticated saves.)
  • Backtick strings (shell execution escapes) in PHP code are now colored as strings. (They are also treated as strings by the PHP function scanner, which won't have any visible effect but which maintains correctness.
  • Multi-line brace blocks and multi-line parenthetical expressions are now foldable in PHP code.
  • Backslashes are now correctly recognized as character escapes when computing color in Unix shell scripts.
  • Fixed hang which would occur when Find Differences encountered a directory for which the user didn't have read access.

New in TextWrangler 3.5.2 Build 2888 (Jan 14, 2011)

  • Fixes a reported crash when trying to use "Find Differences" or the old modal Find dialog.

New in TextWrangler 3.5 Build 2880 (Jan 7, 2011)

  • Additions:
  • The Quick Search window is gone, and has been replaced by an in-window Live Search bar. Choosing the "Live Search" menu command on the Search menu will open this bar.
  • As you type in the search field, matches for the string get highlighted in the window's editing view. The search is always literal and case-insensitive. The "previous" and "next" arrows to the left of the field are useful for navigation; you can also type Return or Shift-Return in the search field to go forward or backward.
  • The Emacs key bindings ctl-S and ctl-R will open the live search bar if necessary; if the search bar is already open, ctl-S will search forward, ctl-R will search backward (assuming that something is entered in the search field; and also that the Emacs keybinding support is turned on in the preferences).
  • Made the regex for detecting python #! lines more precise.
  • Added support for swipe to navigate between documents to MDI windows and the documents drawer.
  • TextWrangler gets text folding, including automatically generated fold points and the relevant commands on the "View" menu.
  • Services clean-up for Snow Leopard: Renamed certain services to provide better context in the services menu, contextual menu, and configuration interface on Snow Leopard.
  • Provided NSRequiredContext in the service specification so that a) services are enabled by default and b) non-file path text selections are excluded from the open file service.
  • When you drop a tarball (a ".tar" file) on TextWrangler, or double-click on such a file in a disk browser, TextWrangler will now browse into the tarball instead of opening its raw contents in an editing window.
  • If for some reason you prefer the old behavior: defaults write com.barebones.textwrangler Misc:OpenDiskBrowserForTarballs -bool NO
  • The window scripting object class now has a property: "live search bar visible", which indicates whether the Live Search bar is currently displayed in that window.
  • TextWrangler can now browse Zip archives (in the format created by the Finder's "Compress", or by using ditto -k from the command line). Drop a Zip archive on TextWrangler to see it in action.
  • Added support for enums to the Java language module. Enums now receive auto-fold points and are enumerated in the function popup.
  • When you first save a file which begins with a shebang line, TextWrangler will now make that file executable (a+x, as modified by the umask).
  • The "search here" command (third on the Search menu, after "Multi-File Search") is now enabled when a text document is active and exists on disk.
  • Edit -> Insert gets a new command: "Emacs Variable Block". This brings up a sheet for confirming the insertion of Emacs variables describing the option settings for the current document. (Using all of the options can result in a pretty verbose result; so you may find it useful to prune the resulting text as desired.) These variables are honored and have precedence over saved document state when TextWrangler opens the document. (Inserting the explicit settings can be useful when sharing the document with others.)
  • ObjectiveC 2.0 @property declarations now appear in the function menu.
  • When setting up ~/Library/Application Support/TextWrangler/ for the first time, the folder skeleton contains a "Read Me.txt" file at the top level, with helpful information and pointers.
  • TextWrangler now offers enhanced script attachability. In addition to adding scripts to menu commands as has been possible for a long time, you can now attach scripts to certain application and document events.
  • The attachment points (corresponding to the function names in your attachment scripts) are listed below. Except as noted, all of them share the following characteristics:
  • Every function takes a single argument, which is a reference to the object in question: the application for application entry points, or the document being opened/closed/saved/etc for document entry points.
  • Any attachment point whose name contains should is expected to return a Boolean result: true or false. If it returns true, the operation will continue. If it returns false or throws an error (see below) then the operation will be cancelled. So, for example, applicationShouldQuit returning true will allow the application to quit; returning false will not.
  • If an attachment script causes a scripting error and does not handle it within the script itself, TextWrangler will report the error. In the case of functions which are used to allow a should action, this will prevent the action from occurring.
  • Changes:
  • The internal format of saved document state has been reworked, as well as the behaviors for saving and loading it. The most important visible changes are as follows:
  • When saving state, TextWrangler captures only those settings which are fundamental to the document (window position, selection range, folds, splitter setting), or settings which vary from the global preferences. The So, for example, if the default document font is Consolas when you save the document, and the document uses that font, but you change the global preference to Menlo before the next time you open that same document, the document's font will be set to Menlo. (Note that this behavior applies to any document setting which takes its default from the prefs; the font is used only to illustrate.) This change should resolve lots of confusion surrounding the question of "I changed my prefs, how come my document settings don't reflect that?"
  • The internal data format of the state has changed to accommodate this new behavior. Documents with existing saved state will exhibit the old behavior when they are opened; this is not a bug. TextWrangler will write out the new state format the next time you save the document.
  • Note that the new format is not backward-compatible; so if you open the document with an older version of TextWrangler, the new format state will be ignored.
  • Also:
  • If you are using the expert preference to save state in the document's resource fork (rather than in a central location), please note that the new format state data is not actually saved in a resource anymore - it is now written into an extended attribute, which you can verify from the command line using xattr -l /path/to/some/file.
  • And finally:
  • A new "Normalize Options" command is available on the Edit menu. This command will reset the front document's display and editing options to the current defaults established by your preferences (including any language-specific overrides), and clear the document's saved state. This can be useful in situations where previously saved state is restored and contains undesired variances from your preferences.
  • The following UI changes have been made to text encoding selection:
  • "Unicode (UTF-8, no BOM)" has been renamed to "Unicode (UTF-8)".
  • "Unicode (UTF-8)" has been renamed to "Unicode (UTF-8, with BOM)".
  • The text encodings menu (as used in the status bar, preferences, and other locations) has been rearranged so that the most commonly used Unicode variants (UTF-8 and UTF-16-BE+BOM) are at the top of the menu, with a separator between them and the rest.
  • A fresh install of TextWrangler will no longer populate the Application Support/TextWrangler folder; instead it will simply create empty placeholder folders so that you know where stuff goes.
  • The "Open Hidden" command has been removed from the File menu, since the "Show Hidden Items" check box is available on all supported systems now (and it works).
  • When saving a document to a mounted file system (not FTP/SFTP), the application now does a "safe save" so that the existing data on disk is not replaced until the new document data has successfully been written.
  • "Replace All" text factory operations no longer generate a results entry so a results window should no longer appear at the end of a factory run containing Replace All actions, unless errors occurred.
  • Reworded scary confirmation text when deleting items from the Multi-File Search sources list.
  • The GUI switch to use the old Find dialog has been removed from the Text Search preferences. The preference is still supported, so if you previously changed it, the change remains in effect. The expert preference for controlling use of the old Find dialog is: defaults write com.barebones.textwrangler FindDialog:UseOldSk00lFindDialog -bool YES
  • The --gui option to bbfind now brings the application to the front when starting the search. To suppress this, add -b or --background to the command line.
  • The on-disk storage format for file filters has been changed to something more future-friendly; the saved filters are now located in "File Filters.filefilters" in ~/Library/Preferences/com.barebones.textwrangler.PreferenceData/. (Note that although the file is readily human-readable, the internal structure is undocumented and subject to change; modifications made without using the application's UI are not supported...) Existing filters will be converted (nondestructively) to the new format. Note that the new format cannot be used with older versions of the application.
  • When browsing a Zip archive or tarball, if there is only one top-level item and it's a folder, the rest of the items are hoisted (and the top-level item is not shown).
  • If a window contains multiple documents, its submenu on the Window menu will contain diamond indicators as appropriate for any documents with unsaved changes or state.
  • If a file changes on disk and the copy open in TextWrangler has unsaved changes, you now have the option to ignore future changes to that file (for as long as the document remains open in TextWrangler; closing and reopening will cause the behavior to reset).
  • The expert pref for controlling whether or not temporary files area eligible for the Open Recent has been changed. The new invocation to do so is: defaults write com.barebones.textwrangler RecentItems:RememberTempFiles -bool YES
  • Iä! Iä! Birdies fhtagn!
  • If you Select All in a Find Differences results window, the Apply buttons will then copy the entire document in the indicated direction. (Note that it is not currently possible to selectively apply a subset of more than one diff - you can apply one, or all, and nothing in between.)
  • The application has undergone extensive internal rework, in order to improve performance, remove some longstanding limitations, and pave the way for new features. By and large, the internal changes should be invisible, but the following top-level changes deserve mention:
  • Support for BBXT plug-ins has been removed. This means that the "Plug-Ins" window is gone from the Palettes menu, the plug-in summaries are gone from the About box, and the Tools menu is gone (if you didn't see it before, you won't notice any difference). If you drop a BBXT plug-in on the application, you'll get an alert to the effect that plug-ins aren't supported.
  • Automatic import of pre-8.0 format Grep pattern data is no longer supported. (If you have such a file, please write to support for assistance.)
  • It is now possible to open files significantly larger than before; the ceiling isn't unlimited, but it is no longer limited by the previously extant constraints in the OS.
  • The following large-scale text transformations are significantly faster and/or require less transient memory: Multi-file search (and replace), single-file Find All, Process Lines Containing, Sort Lines, Process Duplicate lines, Prefix/Suffix Lines
  • For text documents whose size exceeds a certain threshold (expressed in bytes, factory default 1MB), TextWrangler will ignore the Soft Wrap Text preference and leave wrapping off in order to improve the performance of opening very large files. The threshold may be adjusted if desired: defaults write com.barebones.textwrangler Editor:SoftWrapLengthThreshold -int 1048576
  • If you set the limit to zero, TextWrangler will always honor the Soft Wrap Text preference, even in situations where soft-wrapping a large file may cause it to take a very long time to open.
  • Since "Find All Misspelled Words" is pretty much pointless on files over a certain size, the maximum amount of text checked by this command is now limited to 1M (1024 squared) characters. This may be adjusted with an expert preference: defaults write com.barebones.textwrangler Editor:SpellCheckLengthLimit -int NN where "NN" is some decimal value. Use -int 0 to suppress the limit check altogether.
  • The "Don't Process" (or equivalent) buttons have been removed from the following commands' dialog boxes: Add/Remove Line Numbers, Change Case, Find and Mark All, Hard Wrap, Hex Dump, Prefix/Suffix Lines, Process Duplicate Lines, Process Lines Containing, Rewrap Quoted Text, Sort Lines, Zap Gremlins
  • Adjusted the terminology and keyboard equivalents in the Add/Remove Line Numbers sheet to be a little more consistent with expectations.
  • The software update checker will provide notifications when the machine has been idle for 30 minutes, in addition to at launch and after manual check.
  • When creating results windows from the scripting interface, the name is no longer mandatory -- if absent, the application will generate one.
  • When creating results windows from the scripting interface, the application will use narrow list items if none of the results items have a "message" or "match_string" property.
  • When creating results windows from the scripting interface, the "result_kind" may be omitted from the item records; if absent the kind is assumed to be "note_kind".
  • When you are backspacing with an insertion point, TextWrangler will delete a tab stop's worth of spaces if there are only spaces (and tabs) between the insertion point and the start of the line on which you're editing. This may be disabled by an expert preference if desired: defaults write com.barebones.textwrangler Editor:DeleteIndentationWhitespaceToTabStop -bool NO
  • Holding down the Shift key when starting the application no longer suppresses the #! menu.
  • If a hierarchical results list entry is collapsed, and one or more children are error entries, the collapsed entry text is drawn in red.
  • The "Use Unicode line breaks" preference and document settings have been consigned to the dustbin of history.
  • If a document has an explicit encoding declaration, but the declared encoding doesn't map to anything known, you'll get an alert when saving. (The document will be saved in whatever encoding is displayed in the status area at the bottom of the window.)
  • Cache files for FTP/SFTP are now kept in ~/Library/Caches//FTPTemp/, rather than ~/Library/Caches/

New in TextWrangler 3.1 Build 2640 (Jan 19, 2010)

  • Additions:
  • When scanning folders for various purposes (multi-file search, Find differences, and others), SCM administrative directories are specifically ignored, even if "Search Invisible Folders" is turned on: CVS, .svn, .git, .hg, .bzr. This avoids potential disasters that can result from indiscriminate search and replace in such directories. If, however, you choose to live dangerously, you can allow TextWrangler to see inside of these directories:
  • defaults write com.barebones.textwrangler Misc:SkipSCMAdminDirsWhenScanningFolders -bool NO
  • Note that this behavior represents a change from previous versions, in which you could search inside of such directories by using "Search Invisible Folders".
  • The Enter key can optionally generate a CR (controlled in Editing:Keyboard)
  • When pasting into an editing view, TextWrangler will convert non-breaking spaces (Unicode 0x00A0) in the pasted text to ASCII spaces (Unicode 0x0020). To disable this conversion:
  • defaults write com.barebones.textwrangler Clipboard:ConvertNonBreakingSpacesWhenPasting -bool NO
  • When running on Mac OS X 10.5 and later, there's a new item in the Open dialog: "Show hidden items". This controls whether the dialog box shows invisible files and folders. The setting you choose will persist across runs of the application.
  • FTP browsers get a "New..." button, which when clicked allows you to create a new file or folder in the location to which you're currently connected. Creating a new file will open it; creating a new folder will navigate into it.
  • You can now use the extended hex notation in literal searches: x{NNNN}, where N is any hexadecimal digit. You can use up to four hex digits; the following examples are equivalent:
  • x{d}
x{0d}
x{00d}
x{000d}
  • "Open Selection" and "Open File by Name" now use the front document's default save location if one is available and the document isn't saved to disk. This makes it useful in the case of a file that will be implicitly created when saving but which doesn't exist yet, as in edit /path/to/some/new/file.
  • Search results now contain an additional property in the "Result Entry" scripting object type:
  • match_string (text) : for Grep search results, contains the text matched by the pattern
  • There is an interface to simplify the creation and editing of Attached Menu Scripts.
  • TextWrangler will now honor the "com.apple.TextEncoding" extended file attribute, if present and appropriate. (The attribute will not override a BOM, explicit encoding specification, or Apple Event parameter, but is used if the file is not valid UTF-8, not pure ASCII, and no other hints are available.)
  • When saving a text document, TextWrangler will now write the document's text encoding into a "com.apple.TextEncoding" extended file attribute, if the preferences allow it. (The factory default is to write extended attributes if the file system containing the file supports them, and not otherwise; see the Expert Preferences reference in TextWrangler Help for the details.)
  • On Mac OS X 10.5 and later, the contextual menu will contain "Unlearn Spelling" when appropriate so that you can remove learned words from your user spelling dictionary as necessary.
  • There's a new built-in language, "Software Package Notes". This is a hook on which to hang internal mappings for the sorts of files that are typically included as additional documentation in Unix software package distributions. There is no syntax coloring or function navigation, but files mapped to this language are recognized as text and thus openable and searchable when text files are filtered for processing or display.
  • There's a new command-line tool, twfind. It provides a command-line interface for running multifile searches. Here is a quick summary of its usage and options:
  • Usage: twfind
  • -h, --help print this help and exit -v, --version print detailed version information and exit -V, --short-version print abbreviated version information and exit -n, --case-sensitive search case sensitive (default: case insensitive) -g, --grep interprets "" as a regular expression -w, --match-words only return matches that fall on word boundaries -R, --no-nested-folders suppress searching of nested folders -I, --search-invisible-folders search invisible folders --all-file-types search all file types (default: text files only) --name-pattern only search files whose names match the given pattern (may be used multiple times) --gui open a results window instead of returning results -c, --count only print number of matches found -Z, --null separate results lines with NUL instead of newline -S, --suppress-context only print file path and line number of match -E, --editor-commands print results in the form ofeditcommands -0 interpret input separated with NUL instead of newline
  • You can combine single-character switches. Thus,
  • twfind -ngw some-string ...
  • is equivalent to
  • twfind -n -g -w some-string ...
  • You can also use "--" to end the parsing of switches, in cases where you need to specify a search string or file path that begins with two hyphens:
  • twfind some-string -- --name-of-some-file
  • It is possible to search more than one folder at a time by specifying multiple "path" arguments. Apart from the special case of using "--", the first non-hyphenated argument is interpreted as the search string (or pattern, if -g is specified) and all others are file paths. So, you could write:
  • twfind error /var/log /Library/Logs/
  • and this will cause twfind to search for the string "error" in two different folders.
  • If no search paths are specified on the command line, twfind will attempt to read them from standard input. This makes it an attractive target for the output of other tools such as find. For example:
  • find . -name "*.py" -print | twfind blah
  • takes the paths printed by find and searches those files.
  • The input is expected to be separated by Unix newlines (
  • ). In cases where standard input is generated programmatically and the paths are separated with a NUL, you can pass a -0 on the command line. Again using find as an example input source:
  • find . -name "*.py" -print0 | twfind blah -0
  • A --name-pattern option is available for filtering files by name in the directory(ies) being searched. The wildcard syntax is the same as that used by the "Matches Wildcard" file filter term:
  • '?' matches any single character;
'#' matches any digit;
'*' matches any run of characters;
'' is used to escape the next character (for matching literal '?', '#', or '*')
  • so, twfind foo . --name-pattern "*.py" will search for the string foo in the current working directory, in every file whose name ends in .py.
  • Ordinarily, twfind returns results in this form:
  • /path/to/file:NN
  • where "NN" is the line number containing the match, and "" is the text of the line where the match occurred. You can modify the output in a few different was: -S will suppress the line, which is a prerequisite if you want to use the output of twfind as input to another tool (like xargs).
  • If you like, you can have twfind generate output in the form of edit commands, each of which can be executed to open the file and select the line. Use -E. (Note that that this implies -S and will suppress the context.)
  • Whether or not you use -S, the -Z switch modifies the output by using a NUL (ASCII 0) character to separate the lines of output, rather than a newline (ASCII 10). This can be useful for programmatically parsing the output, or running it through xargs -0.
  • Using -c will suppress all of the output, and simply return the total number of matches that were found.
  • It's also possible to use twfind as a front end for the GUI multi-file search. Add --gui to the command line, and the search will start and present a Search Results window, rather than returning any text results to the tool. (This option causes the tool to exit as soon as the search is started.)
  • Note also that using -h, -V, or -v will cause the tool to exit immediately without performing a search, even if there are valid search string and options provided.
  • The Find and Multi-File Search windows now show tooltips when you hover over various option switches and buttons. Each tooltip shows the keyboard equivalent for the item; as before you can adjust the equivalents using the Menus preferences.
  • Prefix/Suffix lines remembers recent choices. Prefix and Suffix keep separate histories, currently capped at 10 unique items.
  • Changes:
  • For the convenience of user scripts (run from the shebang menu) TextWrangler sets some runtime environment variables to reflect the front-document state as it is when the script is about to be run:
  • BB_DOC_LANGUAGE Name of the document's current language (not set if language is "none") BB_DOC_MODE Emacs mode of the document's current language BB_DOC_NAME name of the document BB_DOC_PATH path of the document (not set if doc is unsaved) BB_DOC_SELEND (zero-based) end of the selection range (not set if not text document) BB_DOC_SELEND_COLUMN (one-based) de-tabbed column number of BB_DOC_SELEND BB_DOC_SELEND_LINE (one-based) line number of BB_DOC_SELEND BB_DOC_SELSTART (zero-based) start of the selection range (not set if not text document) BB_DOC_SELSTART_COLUMN (one-based) de-tabbed column number of BB_DOC_SELSTART BB_DOC_SELSTART_LINE (one-based) line number of BB_DOC_SELSTART
  • NB: selection ranges and other offsets are expressed in characters, not bytes.
  • The popup menus in the Find Differences dialog (for quick access to open and recent documents/folders) have been retooled. This also fixes a reported cosmetic glitch.
  • The preferences key to control whether TextWrangler ignores RCS keyword variances when comparing is now Diff:IgnoreRCSKeywords, as in:
  • # pay attention to changes in RCS keywords when comparing files defaults write com.barebones.textwrangler Diff:IgnoreRCSKeywords -bool NO
  • The "Smart Quotes" option has been renamed to "Use Typographer’s Quotes" where it appears in the preferences (Editor Defaults, Languages -> options), and editing controls (options menu in the toolbar, "Text Options" command).
  • When saving a text document, TextWrangler will look for a mismatch between the text encoding setting in the status bar, and any explicit encoding specification in the document's contents (HTML/XML meta tag or PI, or an Emacs variable). If a mismatch is found, an alert is presented so that you can avoid saving the document in this condition.
  • The warning includes an option to compare the open document against what's on disk, in cases where you are saving a text document.
  • Super Get Info is retired, and so is the preference to display its icon in the toolbar.
  • The "Color Grep patterns in Find dialog" setting has been removed from the Text Search preferences. The Expert Prefs help has been updated with the secret formula for changing this setting.
  • The "Show document icons" FTP/SFTP preference never got hooked up; so the switch has been removed from the "FTP" preferences. The remaining switch has been renamed to "Listings include files starting with “.”."
  • Support for non-bundled plug-ins has been removed. If you have a plug-in which no longer appears in the Tools menu after updating to TextWrangler 3.1, please contact the developer of that plug-in for assistance.
  • "MARK" callout for comments now generates the same function entry type as a #pragma mark or bbmark directive elsewhere
  • Closing a multi-file Find Differences result window will now prompt you to confirm, if you have applied any differences.
  • Fixes:
  • Fixed a bug where the Find Multiple window did not honor color preferences for grep search/replace strings
  • Fixed regression in which the End key didn't jump to the end of files with more than (32K - 1) lines.
  • Resetting language specific preferences also resets the general settings.
  • "Recent Items" shows up in the preferences search drawer.
  • Fixed a bug where we would install a new edit tool in /usr/bin, instead of upgrading one in an alternate location.
  • Fixed bug in which dragging text into one of the fields of the Find (or Multi-File Search) window would cause the other field to reset to the previous global state of the Find settings.
  • man pages are installed in /usr/local/share/man/man1/ if the edit tool is located in a directory which contains the path segment "/local/".
  • Before performing any authenticated operations, TextWrangler ensures that the auth helper tool is current.
  • Adjusted the authentication prompt string when installing the auth helper tool on Mac OS X 10.6 and later
  • Using the font panel to change a document's font/size/tab width will now dirty the document's state.
  • Deleted a stray line from the CSS keyword list.
  • Fixed regression in which "Move to Trash" for an item on a server volume would report a -120 error instead of asking you to delete the item immediately.
  • results windows created through the scripting interface no longer get created with a prefs key, to avoid filling the prefs with settings for arbitrarily named windows.
  • Fixed bug in which an auto-saved document's line break setting was not restored correctly when reloading it.
  • Fixed disk browser bug in which safe-saving the file behind the displayed document from another application would cause the display to be cleared and reset to "No Editor".
  • Fixed suspected cause of a crash while resolving script object accesses to the Find window.
  • Fixed terminology error that made it difficult to access the Find or Multi-File Search windows via the scripting interface.
  • "Replace" and "Replace & Find Next" now update the search history.
  • Some per-language overrides were not applied when a document was reopened. Fixed.
  • Some per-language overrides were not applied when a document's language was changed (when saving, or choosing the language from the menu).
  • Returned tooltips to the Open Recent menu.
  • If the remote server drops the SFTP connection (or it's broken for some other undetermined reason), the FTP browser or dialog will now alert you and invite you to reconnect.
  • Eliminated unnecessary computation, resulting in a 2x speedup when opening a large, soft-wrapped document.
  • Keyboard focus is now forced to the file listing when an FTP browser window gets created.
  • The warning shown when trying to close a results browser with items removed is no longer shown if you've deleted all the items.
  • Fixed bug in which printing a document without making any changes to its print settings would disconnect it from the preferences, so future preferences changes would have no effect on the document's print settings until the document had been closed and reopened.
  • Fixed bug in which changes to the default text printing font preference didn't stick.
  • Gruber's [REDACTED] "url-like" links are recognized and launched.
  • When opening a file located on a remote (file, NOT ftp/sftp) server, TextWrangler will now listen to the document's parent folder for changes, rather than the document's file. This resolves a -61 error reported when attempting to save a file that had been opened from an AFP server by client on two different computers.
  • Fixed bug in which the listing in the FTP Browser/save dialog would not correctly scroll to the top of the list when displaying items not returned in something close to alphabetical order by the server.
  • Fixed bug in which "Save to FTP/SFTP Server" would report a -1728 error if the front FTP browser window was not connected to a server (and never had been).
  • It is now possible to scroll (horizontally) to the end of a line that's more than 65536 pixels long.
  • Fixed crash which would occur when reading certain gzip files.
  • Made changes to reduce the file system overhead involved in opening a document.
  • If a file is pure ASCII, it is now read using the default encoding for new documents, rather than allowing the fallback mechanics to take effect. In practice with factory default prefs, this means that pure ASCII documents will load as UTF-8 (no BOM), which is preferable to the previous behavior (reading them as Mac Roman).
  • Fixed bug in which hard wrapping a paragraph would cause the text view to scroll inappropriately.
  • Fixed crash which would occur if events ended up dispatched to a window which was in the process of being closed. (This tended to be irregular and hard to reproduce for some, not so much for others.)
  • When manually showing or hiding the Dock, TextWrangler no longer resizes any windows, even if they would overlap the dock. (This is consistent with the standard application behavior.)
  • Fixed bug in TextWrangler wouldn't come to the front when opening files from an FTP browser by click-through.
  • Adjusted the file filtering for folder comparisons so that files which cannot be compared are still allowed to appear in the lists of results if "Text Files Only" is turned off.
  • Fixed a bug in which supplying UTF-8 data from a text view to a drag receiver would fail.
  • Worked around a crash in ClearDeadKeyInlineSession where AppKit inappropriately handled a TSM event destined for one of TextWrangler's TSM documents.
  • Fixed a bug in the command line tool where open/print errors returned from TextWrangler weren't reported to the user.
  • When calculating completions in a case-insensitive language document, we no longer allow any built-in symbols (keywords or predefined names) to override tokens found by examining the document, unless the case is an exact match.
  • Application state saves (autorecovery) now include the drawer state (open or closed) and the drawer width.
  • Fixed bug in which Hard Wrap using "Page Guide" as the limit would calculate line break points incorrectly.
  • Fixed bug in which some commands in the disk browser's action menu were enabled inappropriately after the volume under the disk browser had been ejected.
  • Fixed bug in which application state would fail to save if it included a disk browser whose backing disk had been ejected.
  • Long path names now extend to the width of the list in the Multi-File Search window, rather than being cut off at 64 characters.
  • Fixed bug in which deleting remembered items from the source list in the modal Find dialog or the Text Factory run window would fail to remove the item from the appropriate recent items list.
  • Fixed bug in generation of summary text in the modal Find dialog when "Exclude Matches" was turned on.
  • Fixed a bug in which opening a file from an FTP/SFTP browser didn't correctly use the browser's connection to the server. This would occasionally cause problems with servers running Pure-FTPd whose admins blindly followed the example in the server software's man page, and started the server with "-C 2" to limit client connections to two per IP address.
  • Fixed a bug where choosing "Learn Spelling" or "Ignore Spelling" left the spelling ranges in a state where they could not subsequently be updated.
  • Fixed bug in which invisibles placeholders drawn with "Show Invisibles" and "Show Spaces" active were drawn in the wrong font, which would in turn cause misaligned columns.
  • Fixed bug in which language-specific text wrap preferences were not applied when opening an existing document.
  • Update the recent menu on inspection events so that it isn't blank when accessed by spotlight for menus.
  • When doing a "Use Selection for Find" (with grep turned off), we now escape literal CR, LF, TAB, and FF in the selected text.
  • TextWrangler prefers public.utf8-plain-text to the UTF-16 based variants when reading data from the pasteboard or placing text via drag-and-drop.
  • This is the native type provided by Cocoa applications. By using it in preference to the UTF-16 variants we avoid getting a translated version of the rich text data which is also on the pasteboard. In certain situations, this can result in data which differs by more than just the encoding. (For example, when copying from Safari, WebKit places non-breaking space translated plain-text on the pasteboard, and tab-delimited data for any selected tables. But the translation of the rich text data results in something quite different.)
  • Fixed bug in which un-splitting an editing view would cause non-US text entry to fail, if the bottom pane had focus before the view was un-split.
  • Removed the hard-wired limit on the number of items representable in a menu that is backed by a folder (Scripts, Stationery, Text Factories, Unix scripts/filters).
  • Fixed bug in which tags in XML (vs. HTML) were incorrectly treated as CSS.
  • Fixed broken wording for tool installer authorization when running on system versions prior to Mac OS X 10.6.
  • Fixed bug in which the "Text Files Only" setting in the Open dialog incorrectly disabled folders.
  • Corrected passive FTP expert prefs in help.
  • Fixed bug in which opening files with non-ASCII names from the disk browser would fail.
  • Fixed crash which would occur randomly at some point after bringing up the Multi-File Search window.
  • Fixed bug in the C/C++ scanner in which it would crash instead of bailing when encountering excessively nested parens and/or braces. This typically happened when setting the default language to C++ or similar and then opening files which were most assuredly not.
  • Marked additional columns in the source control dialogs as sortable.
  • Fixed a bug which caused split windows to draw the top pane as if it were scrolled to the top if a replace all was performed in the bottom pane (the scrollbar was actually left in the correct position, but the content was incorrect).
  • Added fix for the documents drawer not updating after a Save All.
  • Added SUHelpAnchor keys to TextWrangler's plist, and created help pages for the software update checker dialog
  • Fixed bug in which closing a document and requesting a save to an explicit location would ignore the save location and prompt. This construction now works correctly:
  • tell application "TextWrangler" to close text document 1 saving yes saving in file "Boom Box:Users:siegel:Desktop:text.txt"
  • Fixed bug in which using Save As to change the encoding or line break type of an unmodified document (by saving over itself) wouldn't work.
  • Made changes so that automatic saving of application state only takes place when something has changed.
  • Fixed a bug which caused updates to man pages to succeed, but new installs of man pages to fail.
  • Fixed bug in which identifier names containing language keywords would confuse the Pascal parser and cause it to generate wacky fold points for procedures and functions.
  • Corrected capitalization of control titles in the Text Printing section of the print dialog.
  • When doing an Open Counterpart, TextWrangler first checks to see if the document in which you're working is in the active Xcode project, before asking Xcode for the counterparts. In this way, we avoid opening inappropriate counterparts when the file happens to have the same name as one in the project.
  • Adjusted the behavior of Open Selection/Open File by Name to match that of Open Counterpart: if the front document exists on disk and is not in the active Xcode project, we don't ask Xcode for anything, to avoid possibly opening the wrong file with the same name.
  • Fixed bug in which changing a document's language would not cause the associated preview window to refresh when it should have.
  • Fixed bug in which some commands were inappropriately enabled for the editing fields in the Find and Multi-File Search windows.
  • Fixed bug in which closing a multi-document window in which at least one of the documents had been opened from an FTP/SFTP server would cause an attempt to save those documents back to the server, even if they hadn't been modified.
  • Added missing resources, whose absence caused a -4960 error to be reported in TextWrangler when using the "Stop Recording" script menu item.
  • Changed wording of the alert which appears when you try "Move to Trash" on an item and no trash folder is available.
  • Fixed a crash in the Java function scanner which would occur when encountering a package class.
  • Fixed a bug which prevented the installation of an updated Application Support folder.
  • updated twdiff man pages to reflect the positional significance of the file arguments.
  • Fixed authorization dialog wording.
  • Fixed bug in which "Save Default Window" was not enabled for FTP browsers as it should have been.
  • Fixed crash which would occur when closing the Multi-File Search window with certain search sources selected.

New in TextWrangler 3.0 (Sep 2, 2009)

  • 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.
  • 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
  • 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.
  • 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.
  • 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!
  • 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.
  • 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.
  • 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.
  • 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.
  • 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 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.
  • 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.
  • 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.
  • 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 ...".
  • Added a feature to the language module interface for giving the module control over resolution of include file references.
  • 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.
  • 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.)
  • 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.
  • 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.
  • 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 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.

New in TextWrangler 2.3 (Jan 16, 2008)

  • Additions:
  • Disk browsers now put files and folders in the drag, so you can (for example) drag a file from a disk browser to an editing window to insert it, or to any application that accepts file URLs, such as Terminal.
  • Disk Browsers get a contextual menu for the file list: if you right-click on items you get commands to open the selection, the same commands as on the "Copy Path" submenu, and, for single selections, a "Go Here in Terminal" command which will open a new Terminal window with the working directory set to the selected folder (or to the parent of the selected file).
  • 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" replacing "com.apple.Terminal" with the bundle ID of your preferred terminal application.
  • Added a pair of new commands to the Insert submenu on the Edit menu: "Short Time Stamp" and "Full Time Stamp", which insert short and long forms (respectively) of the current date and time.
  • Lua language support is now built-in.
  • This release contains an all-new Python language module, which adds an assortment of previously requested features and addresses previously reported bugs.
  • You can now drag items from FTP browser windows to other locations; for each selected item, its URL is placed in the drag in a form that is (hopefully) usable to other applications.
  • The scripting dictionary now contains a "build number" property.
  • The TeX module now recognizes: align, alignat, falign, gather and multiline as "math environments", in addition to those it already supported.
  • Added support for JavaScript function declarations which use the rare form of: foo = new Function( "function body string" )
  • This is a very uncommon way of declaring functions, but it's legal, had been omitted, and was requested.
  • In TeX (LaTeX) files, command and environment definitions are now parsed and syntax-colored properly. The affected commands include:
  • ewcommand, enewcommand, providecommand,
  • ewenvironment, and enewenvironment. (Support for def was added earlier.)
  • The Java module now fully supports annotations and annotation definitions. Annotation are treated as modifiers. Annotation definitions are treated like interfaces, except the entry in the function popup is prefixed with "annotation" instead of "interface".
  • Language modules (codeless and otherwise) can now specify whether "code" runs (that is, anything that's not a comment, string, or keyword) can be checked for spelling. NB: if you've written a language module of your own, you should probably add this key/value pair to your language module's plist _if_ your module is for a "markup" language as opposed to a "scripting" language (e.g. anything that's not explicitly in a comment is probably text content, and not code).
  • "New (with selection)" and "New (with clipboard)" now create the new document using the language of the selection or clipboard (respectively).
  • Changes:
  • TextWrangler no longer natively supports reading PICT files. The QuickTime image translators handle this, and if that doesn't work out, well, there's always Preview.app or Xee. :-)
  • The first-run dialog now has just a single check box for installing the command-line tools: it will install both the edit and the diff tools (bbedit/bbdiff or edit/twdiff as appropriate).
  • The "Install Command Line Tools" button in the Application preferences has been moved to a menu item in the TextWrangler menu. It's more visible there and makes room for a new option in the preferences.
  • Multi-file Find Differences: When "List Identical Files" is turned on, identical files are grayed out in the list; the bullet has been removed from non-identical files to reduce visual clutter.
  • The Find Differences results window gets an updated Reload button and some minor cosmetic adjustments.
  • FTP browsers get the new Reload icon
  • The "Tools" menu is now hidden unless compatible plug-ins are installed. This is a return to older behavior, and obviates the instructional "Why is this menu empty?" command that was previously placed on the Tools menu when no plug-ins were installed.
  • The Languages list shows the version numbers of installed language modules (including built-ins and factory modules).
  • The "Save Selection" contextual menu item now drops a sheet.
  • In FTP browser windows, hitting the Return or Enter key while the keyboard focus is in one of the edit fields will attempt a connection, as long as there is a host name in the "Server:" field. The "Connect" button will throb to indicate this. The old behavior of advancing to the next field when hitting Return or Enter is gone. When the focus is on a selected item in the list, Return/Enter opens the selected item as before; now the "Open" button throbs to indicate this.
  • The "Find" button in the Quick Search window now throbs to indicate that hitting Return or Enter will perform a Find.
  • If there is no selection, "Find Definition" will drop a sheet (prefilled with its best guess, like "Find in Reference" does) rather than always trying to guess based on the insertion point.
  • Under Mac OS X 10.5 or later, you can scroll background windows with the scroll wheel or trackpad as appropriate.
  • Fixes:
  • Fixed bug in which certain Control-key combinations would end up being inserted into the editing window when used as menu command equivalents.
  • Fixed bug in which the Java function scanner didn't correctly handle backslash escapes in strings.
  • Paths containing ; are now properly escaped when restoring the saved working directory.
  • Fixed regression: "Find in Reference" didn't do pydoc/perldoc lookups in TextWrangler.
  • In blockquotes spanning multiple lines in Markdown, the last quote marker(s) is not colored as a keyword if the blockquote falls near the end of the file.
  • Fixed a bug where "Check Spelling as You Type" didn't correctly handle contractions which used a smart apostrophe.
  • Fixed a typo in the JavaScript keyword list: isNaN not isNan
  • When skipping over comment tokens (generally when seeking the name of something for the function popup), skip #mark tokens as well.
  • Fixed a crash in the TeX scanner.
  • Fixed some TeX rescan issues.
  • When generating names for entries in the function popup in Markdown files, make sure the names are at least one character long.
  • Added support for the TeX "sectioning" commands paragraph and subparagraph. They work just like all of the other section-like commands, but they are the lowest in the hierarchy.
  • Fixed a regression where the factory default language mappings for HTML/XML were incomplete. This resulted in among other things, malfunctioning of the batch HTML updater, syntax checker and link checker.
  • 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.
  • Fix for "Compare Two Front Documents" not ordering the new/old docs correctly.
  • Fix for Codeless Language Modules where if a comment pattern was specified but a string pattern was not, comments were colored as strings.
  • When using the "Make Backup Now..." command, the sheet that drops down now points to the preferred backup directory.
  • Fixed bug in which cancelling an "Open Counterpart" operation was impossible.
  • Fixed bug in which the password wasn't correctly looked up when opening FTP/SFTP files from the Open Recent menu.
  • "Save Default Window" now saves splitter position in browser windows, and no longer works at cross purposes with auto-saved positions.
  • Fix for a problem with rescanning Math string runs in TeX.
  • Fix for the issue that egin*{something} should not match end{something}, because egin* is not a valid beginning to an environment. In other words, the fix in 8.6.1 for starred commands was too aggressive.
  • Fix for stuck squiggle ranges after applying Learn Word or Ignore Word.
  • Added additional PHP predefined symbols. Thanks as always to Carsten Bl�m.
  • Java language module now supports generics and anonymous classes.
  • Fixed bug in Markdown syntax coloring when a list item contained a link reference and the list item content was edited after (to the right of) the link reference.
  • "Color Math Strings" (for TeX) is now on by default.
  • Fixed math error when computing width of the line-number column during printing.
  • Long names are truncated in the search progress window rather than running off the edge of the window.
  • Made a couple of cosmetic fixes to the list used in FTP browsers and dialogs: symlinks now use the composited system alias icon, and there's a bit more breathing room in the lists at the default spacing.
  • Fixed an off-by-1 bug in the drawing of the navbar in the disk browser.
  • Fixed some off by 1 positioning bugs in the navigation bar and status bar at the bottom of the text view.
  • Fixed a bug where if a codeless language module specified a comment pattern but not a string pattern, comments were colored as strings.
  • Fixed a bug where popping up a navigation bar or status bar item via the keyboard would intermittently pop up the menu in the wrong screen location.
  • Made a change to significantly reduce the transient memory requirements for reading a file during multi-file search and text factory execution.
  • Made a change to reduce transient memory requirements when performing text transformations in a Text Factory.
  • Fixed a bug where the initial properties (i.e. make new with properties {bound: }) weren't honored for ftp browsers and disk browsers.
  • Fixed a bug where text factory files which lacked an HFS type but had a valid extension were not recognized as such when their name was > 31 characters long.
  • When activating the Quick Find window, its internal state is now set so that Return or Enter will search for the string already in the window, and typing any other character will clear the string before entering your typed character. (This behavior was already in place for the case in which the Quick Find window had been closed.) In this way, there is no need to explicitly clear the Quick Find window when activating it - just start typing.
  • Made various fixes and improvements to the image viewing window, including better behavior with small images, a reasonable minimum window size, and scroll bars for easier viewing of large images.
  • Adjusted things such that extensions on folder names which are used as items in places such as the Script Menu are no longer stripped from the string used for the menu item text.
  • Script menu items of the form "3. Test" will no longer have the ". Test" trimmed as if it were a filename extension.
  • Changed the text factory/multi-file search engine so as to throttle transient memory usage. This retains some measure of machine-wide performance and usability during processing of very very large (100MB files).
  • the factory suffix mapping of ".cgi" to Perl has been removed. If you have existing language settings and this has caused a problem for you, you can remove it by hand in the Language preferences.
  • Fixed bug in which customizations to the language comment strings (used by the Un/Comment command) were lost when moving between machine architectures. Please note that as a result of this fix, you will need to reapply any customizations if you are running on an Intel machine. Sorry for the inconvenience.
  • If you opt out of installing the command-line tools at first run time, the application will no longer prompt you to install them each time you start up. If you subsequently manually install the tools, update checking at app start will resume; also, if you perform an authenticated open or save, the edit tool is mandatory and will be installed at that time.
  • Array indicators in method signatures (like "public foo[] bar()") no longer confuse the function parser.
  • Commas in class signatures no longer confuse the Java function scanner.
  • Tweaked the "Strings" language guesser so that it is much less likely to generate false positives.
  • Fixed hang which would occur when encountering an XML PI in a Markdown document.
  • Markdown module no longer imagines that it sees list items or Setext-style headers in the middle of inline (non-block) html tags, such as * blah.
  • Inline link references (like [link text][id]) in Markdown can now have line breaks (but no blank lines) and nested, matched pairs of square brackets within the link text, and will be syntax colored appropriately.
  • The direct parameter to the find event is now correctly marked required. This fixes the problem where scripting bridge generated the wrong glue code.
  • Fixed headerdoc tag typo which prevented correct parsing of file.
  • Fixed hang which occurred when parsing with headerdoc for @function declaration with no matching macro.
  • Fixed charset issues with headerdoc output.
  • Misc. cleanup to the headerdoc stuff; removed stray (s) and fixed entity encoding.
  • The default "From" page range is now {1, 1} when printing. This is consistent with other applications on Mac OS X.
  • Java "type parameters" containing commas, e.g. "new Foo", were not properly parsed.
  • Java array initializers like 'new String[] {"abc"}' could break the function popup.
  • Made some performance improvements to the TeX language module.
  • TeX: Starred math environment names are now better supported, and must match. (So, egin{align*} can only be closed by a matching end{align*}).
  • Fixed bug in which using "Find All" with multi-file search turned off would always search the entire front window, even if "Search Selection Only" had been turned on.
  • In Java files, 'new' followed immediately by a closing parenthesis could cause a hang.
  • Fixed bug in which case-sensitive file systems weren't taken into account when examining open documents by name.
  • Implemented a workaround for the Learn and Forget buttons being disabled at times in the spelling panel. Bug reported to apple.
  • The TeX scanner has been thoroughly schooled on the concept of 'interval notation', e.g. [1,infinity), in TeX files. It promises not to get it wrong any more. We'll keep our eyes on it, but it seems to have learned its lesson.
  • Corrected the flags passed to Launch Services for a --background launch.
  • Added some more missing PHP keywords
  • In TeX (LaTeX) files, use of the def macro to create an alias to a math environment would inevitably confuse the syntax coloring. Now you can use def to do something like this: defe{egin{equation}} without TextWrangler seeing that line as the start of an equation.
  • The tab width used in the "Entab" and "Detab" sheet now defaults to the editing view's tab width, and never to a stored preference.
  • Fixed bug in which the application would look up the wrong password in the keychain in fairly rare situations (specifically, when you had the same account name on the same server for both FTP and SFTP logins, but different passwords).
  • Fixed bug in which using a scripted multi-file search or Apply Text Factory would fail if the items to search were specified as the result of an object-specifier expression that resolved to a list of items.
  • Fixed bug in which Java class methods with no modifiers (such as some constructors) would sometimes confuse the parser such that the function popup would list the method before the class which contained it.
  • Fixed bug in the Java module's function scanner related to parsing nested class instance creation expressions such new Foo( new Bar( new Bat() ), baz ) Such a construction could cause an incomplete function popup.
  • Fixed a bug in the Markdown module, wherein *em* (or _em_) and **strong** (or __strong__) elements, followed by a tab, would cause the rest of the line/paragraph to be treated as a code section.
  • Running scripts from the script menu is now re-entrant.
  • Fixed bug in which typing certain keyboard equivalents in the file dialog sheets would invoke the corresponding menu command rather than operating as expected in the dialog itself (e.g. Cmd-D for "Desktop").
  • If for some reason the subprocess supporting sftp file transfers exits, you'll now get notified in any affected FTP Browser window(s), rather than just having sftp file transfers mysteriously start failing.
  • "Open Counterpart" should be a lot faster now, in cases where a file search is necessary to locate the counterpart file.
  • The function scanner for JavaScripts could be confused by backslash-escaped string delimiters within strings. This is fixed.
  • Fixed a longstanding oversight in the About box. :-)
  • Tightened up the guesser for Strings files. It's now a lot more difficult for it to guess incorrectly.
  • Ruby's %W-style "interpreted string-based array constructor" is now detected and syntax-colored appropriately.
  • Fixed a bug in the Java language module which caused the function popup to be incomplete when class instance creation expressions were followed by some unexpected syntax.
  • 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.
  • Fixed regression in the JavaScript module, introduced in 8.7, wherein Function.prototype would be listed in the function popup as [anonymous] 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.)
  • Fix for incorrect handling of 'A' keystroke events in key_translate when the modifier key was down.
  • Fix for bug where "Save a Copy" (n.b. only "Save a Copy", not "Save As") would generate an empty file when saving over the original file.
  • Fix for bug where the wrong values were passed to menu scripts for the menu title and item title when choosing Preferences or Quit from the application menu.
  • Fixed a bug where a scripted multi-file search or replace would display the "not found" sheet when the script was run from the script menu regardless of the "showing results" flag.
  • Fixed a bug where Exchange Words did not work correctly if the right-hand word was at the end of a line.
  • Fixed bug where Process Lines Containing factory engines indicated they were not configured, even though they were.
  • Since we cannot auth save to server volumes, don't bother trying.
  • Fixed a bug where empty nodes in Disk Browsers could get their disclosure triangles stuck in the open position.
  • The title of the FTP put dialog reflects whether we are putting a copy, or not.
  • When guessing languages from file names, if the filename ends in .gz or .gzip, guess based on the base filename instead of the compressed name.
  • If an SFTP connection fails because the host key changes, give the user the option of editing the known_hosts file directly, instead of making them find it themselves, and having to guess at the line containing the stale key.
  • After restoring disk browser windows, restore their titles as well so Disk Browser 1 still points to the same directory it did when you quit.
  • Made it possible for Text Factories to operate on single line selection ranges.
  • Add/Remove Line Numbers works on a single line selection. (I'm not sure why this would be useful, but there you have it.)
  • Fixed a bug where grep patterns added or removed in the Text Searching pref pane were not reflected in the Find dialog until the application had been recycled.
  • Write out documents in Z-order, so when they are restored (in reverse order) the correct item is selected/active.
  • If you cancel the admin authorization for installing the command line tools, TextWrangler won't try to automatically install them again. As before, you can use the "Install Command-Line Tools" command on the TextWrangler menu to install the tools at some later point.
  • Fixed bug in which perldoc/pydoc/ri results windows ignored the position and size requested by a previous invocation of "Save Default Window".
  • When scanning Pascal source files, TextWrangler will stop scanning a string if it encounters a line break in the middle of the string; this prevents subsequent eligible functions from being missed.
  • Fixed crash which would occur when trying to run a Text Factory containing one or more operations which had comments, but which were not otherwise set up.
  • Fixed bug in which "#script#" placeholders in clippings would fail to expand if the script name was longer than 32 characters.
  • Fixed bug in which the Cursor Position display didn't show up if it was the only visible item in the Status Bar.
  • Fixed bug in which content in JSP files was not checked by "Find All Misspelled Words".
  • Fixed a problem where the initial state of the backup settings were getting clobbered if you had previously configured a backup directory.
  • use CFAbsoluteTime to track modification dates to prevent timezone drift
  • Document state includes an MD5 of the in-memory text at the time state is written out. On open, we make sure the document wasn't changed by another editor before applying state. This eliminates drift in selections.
  • Fixed bug in which intra-line diff highlighting didn't work on lines that had non-ASCII characters.
  • Fixed a bug in the Java function parser related to parsing parameters in class instantiation expressions.
  • Fixed bug in which the operands to the "Language" file filter test weren't properly loaded when editing a filter containing such a test.
  • Text Factories are included in "All Readable Files" in the open dialog. There is now a "Text Factories" filter menu item.
  • Fix for documents in "Startup Items" being reopened with the wrong screen position.
  • Sort FTP browsers using the same rules as the document drawer and menu.
  • Shift-double-click on an item in the Clipping floater reveals it in the Finder, just like Scripts and friends.
  • Fixed bug in which PHP function declarations were ignored if more than one comment followed the declaration.
  • Suppress the menu annotation for FTP browser windows not connected to servers, instead of showing an empty pair of parentheses.
  • Fixed a bug in regex based codeless language modules which would causing function parsing to prematurely stop after finding a one-line function.
  • Fixed a bug where the verify host key dialog could end up stuck between the progress dialog when connecting to an sftp host.
  • If asked, the ssh askpass helper will store the password credentials in the keychain after they were supplied by the user. 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.
  • Edit fields now correctly draw their frame when enabled and active. The edit fields in the ftp browser disable/lock while the connection is active.
  • Secondary sort order for same-named documents is full path, instead of creation date.
  • Fixed a broken format string when prompting for an FTP password
  • Made a change to avoid creating keychain items when no password was supplied
  • Added a new hack to force alias resolution in the code paths that Save takes. This resolves issues with -35 errors being returned while saving a file to an unmounted (but reachable) AFP volume.
  • Fixed -10000 error when cancelling the authorization dialog for installation of the command-line tools.
  • Made some changes to the SFTP code which should help (though not completely address) the bad behavior when a host pointed to by an open browser goes AWOL due to connectivity issues.
  • The SFTP code timeout for no data on an open request has been reduced from 90 seconds to 20 seconds.
  • If an FTP/SFTP connection times out, we disconnect from the server, so you only need to click "Connect" to resume, instead of issuing the redundant "Disconnect" first.
  • Fixed a regression where caused the emacs arrow key emulation (Control-N,P,B,F) to stop working.
  • Corrected a regression which resulted in an error alert when trying to print a specific page range of the document.
  • Dragging the document icon out of the toolbar no longer drags a blank square.
  • Typing "// #mark " at the end of a JavaScript file could cause a hang. Also, pragma marks ("// #mark") in JavaScript files would sometimes have the last character clipped from the name in the function popup.
  • The HTML function and color scanners now correctly recognize the currently allowed MIME types for embedded JavaScript.
  • Fixed off-by-one in generation of search results strings when the match ended on the last character of a file.
  • Fixed bug in which a -1700 error would be reported when bringing up the Find Differences dialog, "Use File Filter" was turned on, and the saved filter had no terms.
  • Fixed bug in which the wrong date/time was displayed in the info dialog for FTP items.
  • The Help Book can install the command line tools for you.
  • The TeX module now correctly handles the commands ig, igg, and Bigg (previously, they could cause incorrect coloring of math environments). If there are other standard commands that don't take parameters and instead just act on the next character, please tell us about them.
  • Fixed a bug where if you tried to hard wrap a document at a width narrower than your tab width, TextWrangler would hang (and eventually crash).
  • Fixed a bug in the TeX module which caused it to miss the closing of math environments in certain circumstances, which would in turn cause it to miss the closing of any "parent" environments. The result was incorrect indentation in the function popup.
  • In TeX files, math delimiters ($) within command {parameters} were sometimes ignored or misunderstood (poor things).
  • Fixed -1701 which would occur when asking TextWrangler to open a URL without a path component (e.g. "sftp://localhost")
  • Fixed crash which would occur when clicking the "Add" button after having deleted a collection that was selected during a previous invocation of that button.
  • Fixed bug in which the PHP function scanner would be confused by more than one "extends" or "implements" qualifier.
  • Fixed bug in which the wrong URL template was used for "Find in Reference" when the lookup symbol was in an embedded language run (e.g. PHP in HTML).
  • Fixed bug in which the "Change Line Endings" text factory action had no effect on documents that were open when the text factory started running.
  • Fixed bug in which the "Ends With" filter term would incorrectly fail when the suffix string used for the match occurred in the middle of the string being tested (as well as at the end).
  • Fixed bug in which no file filtering (including "Text Files Only" testing as well as more advanced file filters) took place for text factories run from the Text Factory menu.
  • Fixed crash which could occur when saving a very large document.
  • Fixed occasional crash which would occur when closing an FTP browser window.
  • Fixed a bug which could cause a crash when clicking the close widget on the last document in the documents drawer, or dragging the last document out of the documents drawer into another window.
  • Changed the collating order in FTP browser windows so that items whose names begin with a period will float to the top of the list.
  • Fixed bug in which the date printed was incorrect when printing page headers for the "Date Last Saved" option.
  • Fixed bug in which TeX syntax coloring would get out of whack if "Color Math Strings" was turned off and the scanner encountered certain constructs in the document.