Latex tab completion will have to be done outside the normal
completer logic as the completer line splitting logic uses
\\ as a special character to split lines on. I probably want
to put the latex completions first and it if finds any matches,
don't do any other completion logic. The only issue is that might
short circuit dir/path matching on windows. Hmmm.
Comparison between arbitrary python objects can get crazy, whereas we really
only care about if the JSON state we are syncing is different. So with this change,
we store and check against the JSON state.
The new file list is always placed after the upload filename boxes. I also removed the autorefresh guards against refreshing while having an upload box since this is no longer a problem.
When there is an error reading a file, a message is shown (I could reproduce this easily by dragging a folder onto the list), added a missing "return false;" after an illegal notebook was detected, and we prevent no-name files and files starting with dots (which will not be visible in dashboard and automatically overwritten).
javascript doesn't guarantee the order of AJAX requests,
so we give `Session.delete` and `Kernel.kill` a callback signature.
Changing the kernel type calls `Notebook.start_kernel`,
which terminates the previous session, if defined,
before starting the new one.
A flag is stored, to prevent multiple simultaneous attempts to start sessions, raising a SessionAlreadyStarting Error,
preventing the spec_changed event from firing.
This is not perfect (it doesn't check against the real filesystem but the current list in the browser which may be stale) but it is better than nothing.
can happen if a message is waiting in a pipe and the web socket is closed before the message is handled.
And give ZMQChannels a nice repr with their kernel ID
Updated file upload so that the icon of the new upload item reflects if it is a file or notebook, added the ability to use the "Enter" key in the filename text box to cause the upload to happen, and make it so that the list of files refreshes immediately upon successful upload.
we recently added ws pings for keep alive,
and we can now use the longs to close dead connections.
This can apparently happen when connections are not closed cleanly,
e.g. on VPNs.
Setting ws_ping_timeout = 0 disables the ping mechanism altogether.