Add format_string::escape

This produces a string where all format string characters have been properly escaped.
Add kSettingsLineEndingsKey

Presently not used (by the loader/saver).
Add settings_t::raw_get

This allows getting a variable from the global domain without any variable interpolation (for settings that use $variables or \escapes).

This is required to provide a UI for editing preferences values (here we want to edit the unexpanded value, and the version in the global domain).
Quote variables when writing Global.tmProperties

We also eliminate variables which have same value as in Default.tmProperties.
Hookup Preferences window to tmProperties

Presently the new file type is not setup to use tmProperties as the way this is specified (in tmProperties) needs special-casing. Will likely change that.
Don’t do upward cascading when storing ‘attr’ settings

Used in tmProperties this is to target untitled files, files with unknown encoding, and similar, so unlike text or source scopes, we do not want to set the option broader than the exact scope.
Hookup document type in Preferences window

All UI settings in TextMate should now work and be sticky.

Closes issue #162.
Label the build.ninja target

This is to prettify the build output (for the cases where build.ninja needs to be regenerated).
Disable soft tabs for the project

Incase the user has it “globally” enabled.
New svn executable based Subversion scm driver

* Rewrote the Subversion SCM driver to use the svn executable
* Badges work just like Mercurial
* TM_SCM_BRANCH is set to the full repository URL for the working copy

See issue #273.
fixup! Extend gutter theming to selection foreground

Previous solution didn’t handle soft wrapped lines.

This solution also scales better, as we no longer need to break up ranges and create an entry per selected line.
Also save spelling language in settings

Missed this one in a previous commit.
Proper escaping in section headers (tmProperties)
Improve flexibility in settings API

If we only provide key and value, we set the setting globally.

If we provide an additional file type, we set it for that file type and parent file types (i.e. “text” is parent of “text.plain”) plus globally. An exception is when we give an “attr” scope as file type (then we do not cascade upward).

If we provide a path / glob, we set it for that path / glob and, as file type we can provide NULL_STR to limit it to just that path / glob, the empty string ("") to also set it globally, or a file type (which is treated as above).
Use escape sequence for line endings

This is to make the tmProperties file more transparent (should the user wish to manually inspect it).

As the variable part in the settings is treated as a format string, we can use ‘\r’ and ‘\n’ for CR and LF respectively.
Gracefully handle ‘svn info’ failure

This command would e.g. fail if the repository format is of a newer date (in which case the code expecting a result would do “out of bounds” access).

Rather than split on newline, split third element on colon, and then take second element of that result, we now parse the output into a map and look for the ‘URL’ key.
Move rightMouseDown: to subclass

The problem is that when we implement rightMouseDown: then we won’t receive menuForEvent:, but some OakControl subclasses (like OakTabBarView) may want to show a context menu.
fixup! File Browser will now remember it's width

Since the framework doesn’t depend on itself, it cannot include its exported headers.

This closes issue #282.
Add tagForLayerContainingPoint:

This is meant for subclasses which need to translate an NSPoint to a layer and cannot rely on the normal handling of this in the superclass.
Add menuForTabBarView: to delegate protocol