* Replace `jupyter-repl--insert-prompt` with `jupyter-repl--make-prompt` which
only makes the prompt overlay and adds text properties to the overlayed
character. `jupyter-repl--insert-prompt` would also insert the newline
character for the overlay as well as recenter the overlays. These tasks are
now handled by `jupyter-repl-insert-prompt`.
* Add notes on why an invisible character is inserted along with the prompts.
* `jupyter-repl-cell-code` properly handles invisible characters introduced by
line continuation prompts.
* Don't make the invisible character inserted by continuation prompts
read-only.
* Use a marker to keep track of the end position of the cell when inserting
continuation prompts.
* Guard against searching past boundary when inserting continuation prompts
- Be more obvious in `jupyter-repl-ret`
- Prefer shorter lines in `js/emacs-jupyter.js`
- Add `jupyter-repl-language`
- Refactor `jupyter-handle-error` for `jupyter-repl-client's
- Include margin width when fixing traceback spacing for python kernels
- Extract out special handling of python kernels in `jupyter-handle-error`
This introduces a way of keeping track of both the encoded and decoded parts of
a message, only decoding the parts of a message when needed, and only encoding
the parts of a message when needed.
If the objects passed to `jupyter--encode` or `jupyter--decode` are lists with
the first element being the symbol `message-part`, then the second element of
the list is interpreted as being the encoded message and the third element
being the decoded part of the message. If either the encoded or the decoded
part are nil, then `jupyter--encode` or `jupyter--decode` will fill those
message parts in and on subsequent calls, passing in the same list, no work
will need to be performed.
This avoids double encoding messages when relaying messages between the channel
subprocess and the browser displaying widgets. This speeds up the communication
process. The cost is storing two representations of the same message, i.e.
speed vs memory.
Fixes:
- Use `eq` instead of `equal` in message status predicates
- Fix time string decoding
- `parse-time-string` was returning all nil on Emacs 26
- Include validation for parent header in `jupyter--encode-message`
- Use `jupyter-message-header' to access the message header instead of `plist-get`
- Strip extra prefix from completion matches if necessary
- The python kernel returns matches like foo.bar.baz, but we just want to
show the baz part as a completion.
- Prevent completion after '.' in floating point numbers
- Note this may be undesirable since numbers are just objects in many
languages and thus have methods associated with them.
- Remove unused no-cache and match cases in `company-jupyter-repl`