Checkin release notes
Let build.ninja include $USER.ninja (if it exists)

User specific settings and rules can go into this file.
Improve error reporting in gen_build

This is for the case where the user is missing targets (e.g. did not checkout submodules).
Generalize bin/upload

It now takes key path and destination (github repostiory) as arguments. The generated build.ninja assumes the user local build.ninja sets these variables.
Show current framework in window title
Don’t mark empty snippet placeholders ‘unanchored’

Ranges can be unanchored which is when they are made (mainly) by a unit selection, for example “select to enclosing braces”. What it means is that if we later use shift + movement actions (to “move” the selection end point) we will always extend it (as we don’t know which of the two end points should be considered the anchor).

Though the unanchored flag has a double role, for snippet placeholders we also set it, when we select the placeholder field, and when user press tab, we ignore tab expansions if there is an unanchored selection. So this disables recursive snippet expansion if the user immediately press tab when reaching a snippet placeholder.

Turns out that when we reach the last field of a snippet, some users want a new snippet expansion.

This fix is not ideal, but by far the easiest, and it achieves the goal.

This closes issue #182.
Convert multipage tiffs back to 1x/2x pngs
Refactor theme selection to pass through OakDocumentView
Add support for theming the gutter

Theme setting keys gutterForeground, gutterBackground, and gutterDivider
Store component values in cf::color_t
Calculate default gutter colors based on theme
Update rmate: Preserve file permission flags
Search at most 5 MB in regular expression mode

This is to avoid running out of memory, ideally we would search in chunks, but given that Oniguruma has no direct support for this, such fix is more involved, and it’s likely rare people want to perform regular expression searches on files larger than 5 MB, so I feel this is sufficient to close issue #38.
Simplify creating an OakEncodingPopUpButton

We now do the (sort of required) sizeToFit in the initializer. Users can still bypass this by using initWithFrame:pullsDown: instead of init:.
Drop use of OakSavePanel in Terminal preferences
View → Toggle Foldings now work for find results

This will expand/collapse the find results.

The benefit here is just having a key to quickly collapse all the results so that we get a list of files (with matches).
Fix releasing of array

Previously we used ‘dealloc’ to release the array, which is wrong.

Since instances of OakStringListTransformer is normally never released this bug wasn’t affecting anything. But since we have a dealloc, it should be correct.
Don’t register existing value transformers

It can happen that we register the same value transformer twice, e.g. if we register it in an initialize method (since these are not guaranteed to only be called once).

This isn’t a problem per se, but there is no reason to create the new instance.
Limit recursive snippet expansion

If caret is at the first position of a place holder then we no longer look for tab expansions, should the user press tab.

This address the issue where a placeholder has optional content and the word to the left of this optional content is a tab trigger. Previously deleting the placeholder text and pressing tab would insert a new snippet, which would generally not be expected.

This closes issue #226.
Don’t disallow snippet expansion in last placeholder

This was (temporarily) disallowed by previous commit. We do however need to allow it in the last placeholder since that is used for chaining snippets. See issue #182.