Additions

If a preference key does not exist in CFPreferences, we then look
in ~/.bbedit for a matching preference key.

Our two-stage namespace has been preserved, so if the old
preference was was:

<key>StatusBar:SGIButton</key>
<true/>

then the .bbedit file would have this data:

[StatusBar]
SGIButton = 1

If neither preference system possesses a setting, the factory
default is used.

For those who feel the need to, you can create a section in your.bbedit file:

[PreferINIPrefs]

Which will cause BBEdit to ignore things set in the GUI, and prefer
those settings.

If you do this, note that the UI does not, and will
never, track changes to the .bbedit file.

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

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

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

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

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

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

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

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

(Note that ssh compression is on by default.)

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

* BBEdit now has a “Sleep” command. The menu command is
on the application menu, and the application responds
to kBBEditSuite/kAESleepApplication.

Control over saving of existing documents is in place with an
expert pref:

If it’s set to YES, then any document that exists on disk
will be saved before sleeping. If set to NO (the default),
the document gets an autosave which will be restored when
the app comes up again. (Untitled unsaved documents are
always autosaved, irrespective of the preference setting.)

When BBEdit gets quit because of a system shutdown, restart, or
user logout, it now does a “Sleep BBEdit” in order to restore as
much of the application state as possible when starting back up.
(This means that you may not be prompted to save new or unsaved
documents, since they will be autosaved when the application
sleeps.)

* There’s greater control available over whether
documents on remote servers (FTP/SFTP) or unmounted volumes
are opened when automatically reopening documents at
application startup. BBEdit will now prompt you if you have
one or more documents opened via FTP/SFTP, and give you the
opportunity to skip them or to reopen them.

The following expert prefs may be used:

Startup:AllowVolumeMount# If set to NO, BBEdit will not attempt to mount a volume# containing a document it wants to reopen. defaults to YES.

Startup:ReopenRemoteDocuments# If set to NO, BBEdit will not attempt to open any# documents that were opened from FTP/SFTP servers. Defaults# to YES.

Startup:PromptToReopenRemoteDocuments# If set to NO, BBEdit will open remote documents without# asking, if Startup:ReopenRemoteDocuments is set to YES. If# set to YES, BBEdit will prompt to give you the opportunity# to skip remote documents. Has no effect if# Startup:ReopenRemoteDocuments is set to NO. Defaults to YES.

* Lasso is now a fully supported language, with syntax
coloring, functions listed in the function popup, and
automatically generated fold points.

* 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 small menu control. Clicking this control
displays a popup menu with commands to copy the file’s name, path,
or URL. (These commands are also available via Edit → Copy Path.)

* The Go To Line sheet can take relative input: Entering a value
prefixed with /- will add the value to the current line number.
For example, with line 100 selected, "@75@" will move to line
175; “-75” will go to line 25. An unsigned number will move to
the specified line number, as before.

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

* Disk browsers and project windows 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 BBEdit.

* The contextual menu in text views gets a new command: “Move
Selection to Scratchpad”. This will append the selected text to
the end of the Scratchpad, and delete it.

* Added “Go Here in Disk Browser” to the View menu and to the
contextual and action menus for disk browsers and project
windows. 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 project list or disk browser).

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

* There’s a new command on the Search menu, which appears right
below the “Multi-File Search” command: “Search in …”.

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

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

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

The same command is available on the action (‘gear’) menu
in projects and disk browsers as well.

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

If the language module has

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

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

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

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

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

* New option in the Python language settings (Preferences →
Languages and then double-click on the Python item in the
languages list): “Scan HTML strings for functions”. When turned
on (the default, and 9.0 behavior), 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.

* BBEdit now implements the necessary hooks so that the following
JavaScript functions now work when using “Preview in BBEdit”:

window.alertwindow.confirmwindow.promptwindow.onbeforeunload

JavaScript user interaction is disabled during auto-reloads that BBEdit
performs as you type or save your documents.

window.onbeforeunload is not triggered for an auto-reloads, or on window
close.

Additionally, the “Choose” button for <input type=“file”> elements
is now functional.

* 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:

* The “Run Unix Filter” action in text factories is now more
flexible. Previously these required a unix executable (+x mode).

Unix executables continue to work as they have in the past.

If the chosen ‘filter’ is not an executable, but has a #! line, is it
automatically run for you.

All other ‘filters’ log a reasonable error.

* When choosing “Don’t Save” from the confirm save before Preview
prompt (when preview is working in Ask mode), the document is
previewed through a temporary file. (The previous action was
identical to cancel; a no-op.)

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

* “Move to New Window” is enabled in for project windows
containing only one document.

* 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 (i.e. not projects, which are already
autosaved), not just text documents. Untitled documents are now
remembered with saved application state (including sleep) and
restored to their correct content and position as necessary.

* If writing a backup file requires elevated privileges,
BBEdit can help you out.

* Added support for Python 3 to the #! → Check Syntax command.

* You can now use the scripting interface to create new items in a project:

tell application "BBEdit"

tell project document 1

— add a file or folder:
make new project item with properties {file:POSIX file “/Users/siegel/p4/trunk/BBEdit/dox/”}

Changes

* The on-disk representation for project documents has
changed. Hopefully for the last time. :-) BBEdit projects
are now packages (directories that appear to the Finder and
other interested parties as a single file). Inside the
package there is one file containing the project data, and
another containing the project settings (expanded items,
file filter settings, etc). The settings file is unique for
each user of the project.

This organization allows a project to be checked in to
source control, and each user can have their own settings
and remembered state without affecting the project data
itself, which used to require unnecessary commits.

Project documents in the new format have the filename
extension “bbprojectd”. File group and project documents
created by previous versions of BBEdit will be upgraded
(with a backup first), as before.

* 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.bbedit.PreferenceData/
are no longer used and may be deleted.

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

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

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

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

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

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

* When completing or inserting a clipping, the clipping
file is always read from disk – if you have the clipping’s file
open and have unsaved changes, the changes will not be inserted.

* 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 BBEdit 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 svn/python/etc.

Today you can override this for svn, p4 and cvs with the
expert preference. This change should make use of the expert
pref unnecessary in most cases.

* 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.

* Fixed math error which would cause a Hex Dump operation to
take up to twice as much memory as was required to complete
the operation. For dumps close to the size limit, this would
result in errors at the end of the dumping process.

* The reopen application behavior will fire the startup action if
there are no non-floating windows open. (Previously, having a
floating window open caused the action to be suppressed.)

* The --scratchpad option from the command line tool invokes
“automatic” mode scrolling, which means that if the EOF was
previously visible when the text is added, the window will scroll
EOF back into view (like Terminal does).

* Fixed bug in which project contents got duplicated in the
list (and consequently on disk) if the project document got
reloaded due to a change in its backing file (for example,
when checking in or out of an svn repository).

* Fixed bug in which Text Factory documents did not correctly
reload if the backing file was changed on disk, and behaved
strangely when using Revert to discard unsaved changes.

* Fixed a bug where P4 Show Opened would report no files opened
when your login ticket had expired. It now reports the correct
status.

* The Show Gutter command is correctly disabled for the scratchpad
window.

* Fixed a bug where the incorrect relative data was generated for
a reference to the project’s parent folder.

* Fixed bug in which Save As on a document opened from
FTP/SFTP would point the save panel at the “FTP Temp”
directory.

* Fixed crash which would occur if an error occurred while
invoking pydoc in the course of a “Find in Reference”
operation.

* Fixed a problem where -9870 was sometimes reported when setting
the font with the font panel.

* Corrected a bug which caused the text statistics placard to not
refresh after the word count timer fired. (the visible symptom being
the ellipsis sliding from word count to line count instead of the
placard growing in width)

* Fixed a bug which prevented the “Unicode” line ending
option in the status bar from being enabled when it should
have been.

* BBEdit no longer allows you to change the tab width of an
editing view to zero. This, along with some internal
changes, resolves a crash which would occur when attempting
to do so.

* The file filtering in projects now treats packages (like
nibs) as files when “Invisible Items” is turned off, so that
custom filters work correctly.

* The “.” and “..” items are now filtered out of the file
listings in FTP/SFTP browsers and save panels.

* Fixed a bug in the ActionScript function parser. No longer
tripped up by a function return type of * (which is the
explicit way of typing something as “untyped”).

* Fixed crash which would occur if BBEdit ran out of memory
while trying to compare two files of sufficient size.

* Fixed a bug which prevented the progress dialog and/or dock
progress from appearing for some operations.

* Fixed a bug which caused incorrect operation when trying to
Save or Save As to a new file whose name contains a “/”. (Trying
to use “/” in filenames is eventually going to cause you pain.
Now there is one less place.)

* Fixed a bug which allowed ActionScript’s get to be
recognized as a function-starter in JavaScript files
(similar to the function keyword).

* Fixed possible cause of a crash related to populating the
function popup in JavaScript files.

* Fixed crash which would occur when trying to do a Find All in
the selected text in a text view that was not backed by a
document (such as the Scratchpad or Clipboard).

* Fixed crash which could occur during a threaded Replace All
(from multi-file search or text factory execution).

* Fixed bug in which symbols whose names began with extern were
listed incorrectly in the function menu for C/C++/ObjC/ObjC++
files.

* Fixed bug in which accessing the URL property of a
non-text document via the scripting interface would fail.

* Fixed bug in which the “Find All” and “Replace All” buttons
in the Multi-File Search window weren’t correctly enabled
when they should have been after using the history or Grep
pattern menus to fill in the text fields.

* Made a change to reduce the amount of work done by the
application to maintain the web browser list (for the
Markup→Preview menu) when an application is launched or
quits.

* Fixed a bug where certain preferences which should have
been excluded from syncing were not.

* Fixed crash which would occur when adding a folder or path
in the File Search preferences, after having previously
deleted certain other entries in the list.

* Fixed case in which “Find in Reference” would crash when
invoked on an empty Python file.

* Fixed bug in which the “Save to FTP/SFTP Server” dialog
didn’t allow you to follow symlinks on the server.

* Fixed bug which prevented language-specific options from
taking effect for new documents.

* Find in Python Reference (pydoc) works correctly when pydoc emits
non-ascii or non-utf-8 output, as is the case for modules with
broken doc strings. (e.g. plistlib, Python Issue #5432)

* The shipping build of ctags/readtags is built with NDEBUG=1
so that assertions don’t bring the tool down in normal use.

* Made a bunch of changes to reduce the performance hit
associated with using files located on high-latency remote
file systems.

* Fixed a bug where Save to S/FTP server inappropriately required
a password when saving to an SFTP server (where you might be
using public key authentication.)

* Fixed bug in which certain operations (such as previewing
in a browser) would attempt to save documents that weren’t
dirty.

* Fixed bug which caused a -50 error to be reported when
trying to invoke “Text Options” for a Subversion commit
window.

* Fixed a problem where we would sometimes target the wrong P4
repository.

* Fixed bug in which the “Search For” field in the modal Find
dialog always got focus when bringing the application to the
front while the dialog was up.

* Fixed a bug where undo after a reload/verify didn’t mark the
document dirty.

* Fixed bug in which Jump Back and Jump Forward didn’t scroll
the window back to the correct vertical point (i.e. where it
was when the state was captured).

* When opening files from a project window’s file list,
BBEdit will now hand off to the system any files that BBEdit
could open, but shouldn’t (OmniGraffle documents being one
of many possible examples).

* During project file autosave, if the project file can’t be
found (due to USB drive dismounts, network changes, etc.) we
notify the user once, and continue trying to autosave.

* Fixed missing fold widgets for fold ranges containing a single
line break.

* Fixed a bug where the fold range end indicator would draw on
the wrong line when soft-wrapping. (This also improves where the
start indicator is drawn in those same situations.)

* Adjusted the factory sizes for Disk Browsers and Projects
so the text view size is consistent with text windows.

If you have chosen “Save Default Window”, those saved
settings will still supersede these.

* If the project’s backing disk file isn’t available and the
project needs to be saved when closing, BBEdit will now give
you the option to save it somewhere else, or to close it
without saving.

* Open from FTP/SFTP Server will no longer show project or
file group documents.

* Fixed bug in which a page break at the end of a line would
cause an extra blank line to be printed at the top of the
next page.

* Fixed error performing P4 commands when a browser window was
frontmost, and the selected item corresponded to an item in the
trash

* Fixed bug in which the “add to recent list” parameter to a
“save” event was ignored.

* Fixed bug in which using “Save As” did not change the
document’s language if the default was something other than
“(none)”. This change also addresses a bug in which
the document’s language wasn’t recalculated if the file’s
name changed on disk.

* When the Find window is up, “Replace All” is disabled if
the search target is blocked by a sheet.

* The “Selected Text Only” setting in the Find window is now
remembered across invocations of the window (and runs of the
application).

* Fixed crash which would occur when trying to set or change
a keyboard equivalent after having started the application
with the Shift key down (which disables loading of plug-ins
and other services).

* readtags will bail gracefully when asked to parse a tag
file that it doesn’t know how to read, rather than crashing.

* Fixed a bug where expanding a collapsed editor view in a
results browser would sometimes result in screen turds left
where the editor view should have been drawn.

* Fixed bug which prevented you from adding packaged
documents to a project window using the “Add” button in the
project’s toolbar. (Dragging the package to the project list
did work.)

* The ponies’ steel shoes have been replaced with ones crafted
from saronite, which should provide greater long-term durability
in the field.

* Fixed a bug in which the search/replace history wasn’t
updated when doing a search or replace from the Search menu
after editing the search or replace string in the Find
window, switching to another document (without closing the
Find window), and then using the Search menu.

* Non-text documents now require a double-click to open from
a project’s file list when single-click-to-open is turned
on.

* Expanded the VBScript keyword list

* When looking up passwords given only a host name, the
FTP/SFTP connection sheet will only look for keychain items
with the right protocol identifier, to save wear and tear on
the keychain.

* A variety of changes have been made to reduce application
startup time.

* Fixed bug in which the SQL language guesser was a little
too enthusiastic, and would guess files as MySQL that
weren’t.

* Fixed a bug where if “Save Default Window” was applied to a
browser with a collapsed editor view, the next instance of the
window would incorrectly show the editor view at its minimum
size.

* Fixed a bug in the Ruby module which would cause a multi-line,
general delimited input string (%+string+) to fold incorrectly
(the closing fold point was one character too soon).

* Fixed a bug in the Ruby module where Begin/End blocks could
cause fold points to be be placed at seemingly random places in
the document.

* Fixed a bug in the Ruby module where complete for or while
loops, written on a single line and within curly braces, could
throw off the folding for the entire document.

* Fixed a bug in the TeX module in which a $math$ section within
a {required param}, where the $math$ section contained a closing
curly brace (e.g. \caption{foo $i_{0}$ foo}), would confuse the
parser. This tended to manifest as incorrect autofolds and
improper indentation in the function popup.

* When auto-saving, documents that have not yet been saved or
have unsaved changes now retain additional state information
that cannot be reproduced from the document on disk.

* If an HTML/XML document has a character set declaration that
specifies UTF-16, but the document has already been eliminated
as a UTF-16 document, the charset declaration is ignored. This
resolves the problem which arises if you save a document as
UTF-8, manually edit the charset declaration, and save again,
rendering the document unopenable by BBEdit.

* Fixed a bug where Check Syntax for Python didn’t show a results
browser when using Python 2.6.×.

* Fixed an edge case in the C folds generator where cuddled
braces didn’t generate the correct fold range when at the left
margin.

* Fixed a bug where the contextual menu contained disabled search
commands (instead of omitting them) when the selection range was
empty.

* Deleted what appears to be a stray line in the PHP predefined
names list.

* Fixed crash which would occur when trying to drag a project
window from the Windows palette and no document selected in the
project (or the editing view collapsed).

* Files which are +x and begin with a shebang (#!) are now
assumed to be text files.

* When doing a Save As, if the document’s name already ends in
the recommended extension, we won’t add the recommended
extension again.

* Fixed bug in which some open documents were left out of the
saved application state if the auto-save interval triggered
while in the process of reviewing unsaved documents.

* Fixed bug which prevented language guessing from working when
doing a “New (with Clipboard)”.

* The Ruby module will no longer detect regular expressions as
the first token immediately after a string or another regular
expression. This resolves a syntax coloring bug found with the
syntax used by the Merb framework (which uses an overloaded “/”
method.)

* Fixed bug in which a Subversion source control configuration
didn’t properly record the password you entered when creating it
in the Preferences window.

* Fixed bug in which closing the Multi-File Search window had the
side effect of turning off “Wrap Around” for future interactive
searches.

* Application state restoration (reopening documents that were
opened the last time you quit or slept the app) now honorsProjects:RememberOpenDocuments and will not reopen documents
that were open in a project window.

* Fixed bug in which the cursor position display was initially
incorrect in new editing windows created from existing
documents.

* Fixed bug in which using a keyboard equivalent for an item on
the Text Options menu in the Scratchpad would cause a drawing
artifact in the Scratchpad window’s toolbar.

* Fixed a bug where temporary files written for ‘Preview in
BBEdit’ through a local web server were written incorrectly,
resulting in ‘gremlins’ appearing in the preview window.

* Updated the built-in list of VectorScript keywords, and added a
list of predefined names, suitable for completion duty.