Coerce keyFileCustomPath to UTF-8

The text encoding (or even field type) can be practically anything, so we need to either handle everything or coerce to UTF-8.

This is a quick fix for an issue with QuickCursor, a more thorough review of encoding used with AppleEvents is to follow.
fixup! Incorporated scalable icons.

Implemented proper alignment of the icons with the line number font.
Added the ellipsis icon for folded text.
Lower the minimum value for the tab size slider to 1.
Fix running mate via sudo

Since we now use the (numeric) user ID as part of TextMate’s named socket (to allow multiple users on the same system to each run an instance of TextMate), mate needs to know this.

Running ‘mate’ via ‘sudo’ has getuid() return zero (root), hence why we need to specifically handle this.
Remove debug output
Keep (installed) auth server up-to-date

The recent move to 64 bit broke the (binary) protocol used between TextMate and the server for authenticated reads/writes (since size_t is now 64 bit).

This fixes issue #354.
Checkin release notes
If path no longer have SCM info, include it in change set

This allows the SCM drivers to not report status for non-modified versioned files.

The problem was previously that if a driver didn’t report status for such files, having a file go from modified → clean wouldn’t always cause a refresh, since no change notification was generated for the path.

For the svn driver there is a 50% overhead by svn itself in reporting status for files without status, this overhead is likely magnified by the following XML step (where XML for all files in the working copy needs to be parsed).
Disable main menu’s key equivalent handling

This is done by overloading performKeyEquivalent: for the main menu (by setting it to OakMainMenu in MainMenu.xib).

The default implementation of performKeyEquivalent: does not know about scope selectors so it will sometimes call the wrong actions. For example a bundle overloading ⌘X for “-dyn.selection” may still see the item fire with a selection.

This wasn’t a problem previously, as we set the key equivalents via (deprecated) Carbon API (so presumably Cocoa didn’t know about the keys).

This is a preliminary implementation, I just want it out there to have it tested for edge-cases. Long-term we can probably remove the overload of performKeyEquivalent: on OakTextView, which sort of does similar (stops Cocoa from executing the wrong menu actions or interfering with multi-stroke key bindings).
Add svn status xslt to scm target

This is presently not used, it’s skeleton code for @whitlockjc.
Replaced contents of skeleton svn_status.xsl with real content.

* Note: Column delimiter is back to four spaces due to XML/XSL not allowing control characters
Use xsltproc to parse svn (XML) status output

For a repository with 7,767 files it takes 3.5 seconds for Python to convert a full file listing from XML to the simpler line-based format. Using xsltproc the same takes 0.74 seconds.

According to issue #340 TextMate “freeze for up to about 5 - 10 minutes” when doing svn status. Not sure how much this change helps on that, no doubt it’s an improvement.
Remove code duplication

The SCM status enumeration is now only declared once.

I also introduced an ‘unknown’ status which should be used instead of ‘none’.
Change scm::status::note → unknown where applicable
Change scm::status::versioned → none

The scm::status::versioned status has now been removed.

The upshot of this is that SCM drivers can leave out files that are “clean” from their status map, and TextMate will assume they have status “none” (clean). This cuts down on the amount of data that needs to be sent (and/or processed) by the SCM drivers.
Exclude clean files from svn status

Subversion itself is roughly 30% faster if we do not ask for status of all files, the XML processing though is magnitudes faster, since it will only have to deal with a few records (in the general case) rather than a record per file (xsltproc seems to do around ~10,000 files per second on my Mac Pro, though I have no idea if it scales linearly).
Allow disabling SCM status from .tm_properties

This is done by adding the following (which can be limited to a folder):

    scmStatus = false
Checkin release notes
SCM driver reports if system tracks directories

This can be used to make decisions about whether or not we should assign a virtual status to directories, prune them from a status display, or similar.