Added this mechanism by augmenting jQuery dom mutation methods. It will
only trigger an event if the element has a truthy value for the
'triggerAttach' data entry. This will allow us to execute actions that
require the view to be physically on the dom at the appropriate time.
This makes it more consistent with selectoToPosition. Also... you
weren't getting the cursor. The cursor is a thing on the screen. At the
very least getCursor should return an object you can move around, not
just a row/column struct. Position seems like a better name.
NumericPrefix now has a .select() method that calls select multiple
times on its operand. Editor.selectToPosition modified to extend
existing selections, and only create a new one if needed. This allows
repetition of a motion's select method to expand the selection.
GlobalKeymap.bindKey can take a selector and a custom function that
maps key events to commands. If it returns false, no command is
triggered but event propagation is halted.
Vim mode has an operator stack. Every time an operator is pushed to the
stack, we ask if it is complete. If it's complete, we compose it with
the operator below it, then pop that operator if its complete. When no
operators remain on the stack, we call execute the final composed
operator. So far we only have DeleteChar (x) and NumericPrefix
operators.
We just capture focusout events on root view… if anything other than the editors text area lost focus, we focus the editor again. This will likely need refinement when we add more widgets to the system, but its enough to make the fuzzy finder behave appropriately.
Also fixed a bug where the GlobalKeymap wasn't returning true when it
matched a binding, which caused key events to be processed twice when
they bubbled out of the editor and hit the root view.
Ace triggers key handlers for both keydown (onCommandKey) and input
(onTextInput) events. Input events don't pass the event, which was
blowing up the keymap.
Now if a keypress event bubbles to an element with bindings for
multiple matching selectors, the most specific selector is chosen. This
allows us to override a keybinding by using a more specific selector.
For example, say we have an editor instance inside of the file-finder
widget, so that the user can use all their normal bindings when they
type the name of the file. Except when they hit <esc> we want to close
the file finder, not do whatever they normally have it bound to. Now we
can just say:
```
.file-finder .editor {
<esc>: close-file-finder
}
```
And we're assured that our binding will take precedence.