There is currently no way to add a TextMate (1.x) license to the key chain, but those who used TextMate r9147 or earlier should have one stored already.
We have to go via OakSubmenuController because the menu item may not exist. The reason for this is related to not having old menu items exist after a delegate has disappeared, though it might be possible to improve.
You can still create an alias for ‘mate’ that calls ‘mate --recent’.
The motivation for this change is that stuff you open via mate is generally SCM commit messages, the cron tab, included files (opened from within TextMate via bundle commands), and other such things. Additionally I think that if you open files via ‘mate’ you would just repeat the line in your shell, though I know not all users feel this way.
Folders opened via mate does go into the recent menu.
We now have:
- performBundleItem:
- performBundleItemWithUUIDString:
- performBundleItemWithUUIDStringFrom:
I’m leaning toward changing the prefix, as ‘perform’ is mainly action methods invoked as a direct response to some user action (with that action part of the name), but haven’t found a better prefix yet.
This is to allow a bundle item to display another key than the one assigned to the item, e.g. when the bundle item is matched by a proxy item it should show that item’s key equivalent.
This is specifically to find the actions bound to modifier + [, {, }, and ] before finding the actions bound to modifier + numbers, since on some keyboards, modifier + number results in one of the brace characters.
This should address issue #374 (although this isn’t a fix per se for the underlying problem of having some key maps result in duplicate keys in the menus).
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).
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.
Mainly this is because when we run tests, we do not want global or default settings from TextMate, so now TextMate.app explicitly sets the path to the default and global settings (unlike when running tests).
We moved it to TMPDIR so that multiple instances of TextMate could run (for different users) but have since gotten a lot of reports about problems with this location. The short version is that ‘ls’ shows the socket exists (in TMPDIR), but stat’ing it or similar will fail.
To still allow different users to use mate side-by-side we add the user ID to the socket name.
Hopefully this closes issue #183.
For example if you have all your projects under ~/Projects then you can do:
mkdir -p ~/Library/Application\ Support/TextMate/Favorites
cd ~/Library/Application\ Support/TextMate/Favorites
ln -s ~/Projects "[DIR] My Projects"
This will then have all the folders inside ~/Projects show when you choose Open Favorites… (⇧⌘O).
Long-term it might be useful to store actual property lists in the favorites folder, akin to smart folders (i.e. describe a query for what to show) and/or allow descending into the folders shown in the ⇧⌘O window.
We have TextMate create a named socket that ‘mate’ can use to contact the main application. Previously it was hardcoded to ‘/tmp/avian.sock’ which is bad on a multi-user system.
Placing it in the user’s temporary directory should ensure it doesn’t clash, yet still give us a predictable path (for mate to use).
Presently we maintain the old socket path as a link to the new location so that old versions of mate will still work.