Has 2 failing specs...
There are still some issue with this code's interaction with the undo
system. The tab stops will need to be or destroyed when certain
changes are undone or redone.
Previously the status was fetched twice, once for
if modified and once for if new.
Now the flags are fetched once and Git now provides
helpers to check the status flags directly for
modified and new status.
Previously if Atom was opened to an already opened
path but that window was hidden then a new window
would be opened when instead the existing window
should be unhidden.
A confirm dialog is now displayed whenever a session
with a dirty buffer is closed so dirty sessions can now
be processed when 'editor:close-other-tabs' is fired.
Previously only the active editor session was prompting to
save dirty buffers before closing. This caused the confirm
dialog to not display when closing from a tab since the
Editor.destroyEditSessionIndex is used there.
Previously, we parsed snippet bodies line at a time, then determined
tab stops within lines. But this disallows tab stops with placeholder
text that spans multiple lines. Now the parser produces a simpler
structure that breaks the body into an array of strings and tab stops.
Newlines are represented directly as characters within the strings.
Previously window.shutdown() was called multiple times
if window.close() was called since the shutdown handler
was also fired in the native window controller.
This prevented proper serialization of the RootView
from occurring when then window was closed via meta-w or
meta-W since it was called a second time when already
empty of packages and editors.
Previously these weren't displayed since event the
documentation loop stopped at the document element and
window events weren't included even though they are
applicable for the currently focused element.
Previously if null was returned for the end of word position then
it was interpreted as 0,0 which would select the entire contents
before the current word instead of the current word.