Previously viewForItem() would create a new view each time it was called
with an item whose view did not implement setModel() even if a view for that
item already existed in the pane.
Now a WeakMap is used to map items to their view so they can be reused
and cleaned up even when the view does not implement setModel().
Use event.which if it is lower than the parsed key identifier.
This is the case when a non-English keyboard language is selected and
a physical English keyboard is being used.
This allows keybindings to still work even when the physical key pressed
is different than the key it maps to for the currently selected language.
Closes#585
We're using Peer.js to stream changes to shared telepath documents
between participants.
We're replacing the rootView of joiners in a somewhat hacky way,
but replication of pane splits and items is fully tested.
Previously the score for two grammars matching on path
was equal and so the first one would be selected.
Now the longer match will have a higher score and will be selected
over other grammars with shorter fileType match lengths.
Closes#602
Previously the display buffer markers would still fire events
even after a display buffer was destroyed since they were not
being unsubscribed from their underlying buffer marker which
could still fire events in the case of an editor split on the
same buffer.
Closes#593
Previously the indentation guide level for empty lines was
derived by only looking after the empty line which caused gaps
in certain cases.
Now the indentation for an empty line is the higher value of the
previous non-empty line indentation and the following non-empty
line indentation.
Closes#588
Previously on zero length matches the last two rules were compared
and if they had the same scope name then the last rule was popped
and the remaining line was tokenized using the current scope stack
to prevent infinite parsing loops.
This caused nested method calls in Java to not tokenize correctly
since method rules were sequential in the stack but did not constitute
an infinite loop of zero matches since the stack was currently decreasing.
Now the last two rules are only compared when the stack size is increasing
to prevent this false positive.
Closes#587
Use a subtler error message that displays in the same place as the
loading message but does not change the entire background of the
view.
Also, extending classes can now customize the message displayed
when there are no items and also no filtered items to allow for
different messages for these two cases.